Jump to content

New StreamDeck Plugin


Recommended Posts

Got the JF-17 manual radio display working, but the second row won't display some of the text like arrows or Am. I just added the strings next to UFCP idk how to make them separate section when ever I do it crashes. Probably not the correct way of doing it 1st time trying it.

function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)

    -- UFCP Text Display Windows 1-4
	local ufcp_1 = ExportScript.Tools.split(list_indication(3), "%c")[6]
	local ufcp_2 = ExportScript.Tools.split(list_indication(4), "%c")[6]
	local ufcp_3 = ExportScript.Tools.split(list_indication(5), "%c")[6]
	local ufcp_4 = ExportScript.Tools.split(list_indication(6), "%c")[6]
	local radio1 = ExportScript.Tools.split(list_indication(7), "%c")[3]
	local radio2 = ExportScript.Tools.split(list_indication(7), "%c")[8]
	
	
	-- Temporary fix: DCS-ExportScript uses colons (:) as separation between uplink messages.
    -- Replace all colons with semicolons for TOT view, TODO: add escape char parsing in streamdeck plugin (ctytler).	
	ufcp_1 = ufcp_1:gsub(":",";")
	ufcp_2 = ufcp_2:gsub(":",";")
	ufcp_3 = ufcp_3:gsub(":",";")
	ufcp_4 = ufcp_4:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	
	-- The below logic handles the case where a UFCP display has been selected for entry and
	-- has blinking "--".
	-- Additional logic could be added to handle the blinking itself and show the other side
	-- with the e.g. win1fill value, however this logic seemed sufficient for now.
	if ufcp_1 == nil then
	    ufcp_1 = ""
	elseif list_indication(3):match("txt_win1r") then
		ufcp_1 = string.format("%8s", ufcp_1)
	end
	if ufcp_2 == nil then
	    ufcp_2 = ""
	elseif list_indication(3):match("txt_win2r") then
		ufcp_2 = string.format("%8s", ufcp_2)
	end
	if ufcp_3 == nil then
	    ufcp_3 = ""
	elseif list_indication(3):match("txt_win3r") then
		ufcp_3 = string.format("%8s", ufcp_3)
	end
	if ufcp_4 == nil then
	    ufcp_4 = ""
	elseif list_indication(3):match("txt_win4r") then
		ufcp_4 = string.format("%8s", ufcp_4)
	end
	if radio1 == nil then
	    radio1 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio1 = string.format("%8s", radio1)
	end
	if radio2 == nil then
	    radio2 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio2 = string.format("%8s", radio2)
	end
	-- Full 8 character strings.
	ExportScript.Tools.SendData(2001, string.format("%-8s", ufcp_1))
	ExportScript.Tools.SendData(2002, string.format("%-8s", ufcp_2))
	ExportScript.Tools.SendData(2003, string.format("%-8s", ufcp_3))
	ExportScript.Tools.SendData(2004, string.format("%-8s", ufcp_4))
	ExportScript.Tools.SendData(2013, string.format("%-8s", radio1))
	ExportScript.Tools.SendData(2016, string.format("%-8s", radio2))
	-- Left-Hand 4 character strings.
	ExportScript.Tools.SendData(2005, string.format("%-4s", ufcp_1:sub(1,4)))
	ExportScript.Tools.SendData(2006, string.format("%-4s", ufcp_2:sub(1,4)))
	ExportScript.Tools.SendData(2007, string.format("%-4s", ufcp_3:sub(1,4)))
	ExportScript.Tools.SendData(2008, string.format("%-4s", ufcp_4:sub(1,4)))
	ExportScript.Tools.SendData(2014, string.format("%-4s", radio1:sub(1,4)))
	ExportScript.Tools.SendData(2017, string.format("%-4s", radio2:sub(1,4)))
	-- Right Hand 4 character strings.
	ExportScript.Tools.SendData(2009, string.format("%-4s", ufcp_1:sub(5,8)))
	ExportScript.Tools.SendData(2010, string.format("%-4s", ufcp_2:sub(5,8)))
	ExportScript.Tools.SendData(2011, string.format("%-4s", ufcp_3:sub(5,8)))
	ExportScript.Tools.SendData(2012, string.format("%-4s", ufcp_4:sub(5,8)))
	ExportScript.Tools.SendData(2015, string.format("%-4s", radio1:sub(5,8)))
	ExportScript.Tools.SendData(2018, string.format("%-4s", radio2:sub(5,8)))

end

 

JF-17 manual radio display.PNG

Link to comment
Share on other sites

On 10/5/2021 at 2:49 PM, jonny415 said:

Got the JF-17 manual radio display working, but the second row won't display some of the text like arrows or Am. I just added the strings next to UFCP idk how to make them separate section when ever I do it crashes. Probably not the correct way of doing it 1st time trying it.

function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)

    -- UFCP Text Display Windows 1-4
	local ufcp_1 = ExportScript.Tools.split(list_indication(3), "%c")[6]
	local ufcp_2 = ExportScript.Tools.split(list_indication(4), "%c")[6]
	local ufcp_3 = ExportScript.Tools.split(list_indication(5), "%c")[6]
	local ufcp_4 = ExportScript.Tools.split(list_indication(6), "%c")[6]
	local radio1 = ExportScript.Tools.split(list_indication(7), "%c")[3]
	local radio2 = ExportScript.Tools.split(list_indication(7), "%c")[8]
	
	
	-- Temporary fix: DCS-ExportScript uses colons (:) as separation between uplink messages.
    -- Replace all colons with semicolons for TOT view, TODO: add escape char parsing in streamdeck plugin (ctytler).	
	ufcp_1 = ufcp_1:gsub(":",";")
	ufcp_2 = ufcp_2:gsub(":",";")
	ufcp_3 = ufcp_3:gsub(":",";")
	ufcp_4 = ufcp_4:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	
	-- The below logic handles the case where a UFCP display has been selected for entry and
	-- has blinking "--".
	-- Additional logic could be added to handle the blinking itself and show the other side
	-- with the e.g. win1fill value, however this logic seemed sufficient for now.
	if ufcp_1 == nil then
	    ufcp_1 = ""
	elseif list_indication(3):match("txt_win1r") then
		ufcp_1 = string.format("%8s", ufcp_1)
	end
	if ufcp_2 == nil then
	    ufcp_2 = ""
	elseif list_indication(3):match("txt_win2r") then
		ufcp_2 = string.format("%8s", ufcp_2)
	end
	if ufcp_3 == nil then
	    ufcp_3 = ""
	elseif list_indication(3):match("txt_win3r") then
		ufcp_3 = string.format("%8s", ufcp_3)
	end
	if ufcp_4 == nil then
	    ufcp_4 = ""
	elseif list_indication(3):match("txt_win4r") then
		ufcp_4 = string.format("%8s", ufcp_4)
	end
	if radio1 == nil then
	    radio1 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio1 = string.format("%8s", radio1)
	end
	if radio2 == nil then
	    radio2 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio2 = string.format("%8s", radio2)
	end
	-- Full 8 character strings.
	ExportScript.Tools.SendData(2001, string.format("%-8s", ufcp_1))
	ExportScript.Tools.SendData(2002, string.format("%-8s", ufcp_2))
	ExportScript.Tools.SendData(2003, string.format("%-8s", ufcp_3))
	ExportScript.Tools.SendData(2004, string.format("%-8s", ufcp_4))
	ExportScript.Tools.SendData(2013, string.format("%-8s", radio1))
	ExportScript.Tools.SendData(2016, string.format("%-8s", radio2))
	-- Left-Hand 4 character strings.
	ExportScript.Tools.SendData(2005, string.format("%-4s", ufcp_1:sub(1,4)))
	ExportScript.Tools.SendData(2006, string.format("%-4s", ufcp_2:sub(1,4)))
	ExportScript.Tools.SendData(2007, string.format("%-4s", ufcp_3:sub(1,4)))
	ExportScript.Tools.SendData(2008, string.format("%-4s", ufcp_4:sub(1,4)))
	ExportScript.Tools.SendData(2014, string.format("%-4s", radio1:sub(1,4)))
	ExportScript.Tools.SendData(2017, string.format("%-4s", radio2:sub(1,4)))
	-- Right Hand 4 character strings.
	ExportScript.Tools.SendData(2009, string.format("%-4s", ufcp_1:sub(5,8)))
	ExportScript.Tools.SendData(2010, string.format("%-4s", ufcp_2:sub(5,8)))
	ExportScript.Tools.SendData(2011, string.format("%-4s", ufcp_3:sub(5,8)))
	ExportScript.Tools.SendData(2012, string.format("%-4s", ufcp_4:sub(5,8)))
	ExportScript.Tools.SendData(2015, string.format("%-4s", radio1:sub(5,8)))
	ExportScript.Tools.SendData(2018, string.format("%-4s", radio2:sub(5,8)))

end

 

JF-17 manual radio display.PNG

There are two ways to get the character you want:
1)Go to this site (https://unicode-table.com/), then scroll down to the arrows (https://unicode-table.com/en/blocks/arrows/). Click the one you want and then click "copy". Then paste it directly into the lua file.

 

2) Open Windows Character map by pressing the start/windows key and type "character map". Scroll down to find the character you want. Click the character and then click select. You should see it populate in the lower box. Then click copy and paste it into your lua.

 

After completing option 1 or 2 you will still have to parse the list_indication output in order to put the arrow in the correct location.

 

I made the following code as an example. Tested and working for the JF17. It gets the status of the flight stick (argument 970) and determines which string should be used. This code is only an example and may not be applicable to every situation. Click the bottom of the stick ingame to toggle it and therefore the resulting exported string.

 

function ExportScript.arrowTest(mainPanelDevice)
	
	local stickShowHide = mainPanelDevice:get_argument_value(970)
	local stickStatus
	
	if stickShowHide >= 0.5 then
		stickStatus = "↑Up"
	else
		stickStatus = "↓Down"
	end
	
	ExportScript.Tools.SendData(2001, stickStatus)
end

 

Remember to put 

ExportScript.arrowTest(mainPanelDevice)

into the 

function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)

function.

 

DSA3WPM.png


Having this knowledge I'll be going back to the Mossie lua to put in the special characters for the air temp degrees and No10 and No12 tanks. Thanks!


Update (sry for small pic):

 SBeLR4G.png

 

Another Update (what hath i unleashed?!?! xD):
vVrl9Or.png


Edited by Bailey
Link to comment
Share on other sites

On 10/5/2021 at 2:49 PM, jonny415 said:

Got the JF-17 manual radio display working, but the second row won't display some of the text like arrows or Am. I just added the strings next to UFCP idk how to make them separate section when ever I do it crashes. Probably not the correct way of doing it 1st time trying it.

function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)

    -- UFCP Text Display Windows 1-4
	local ufcp_1 = ExportScript.Tools.split(list_indication(3), "%c")[6]
	local ufcp_2 = ExportScript.Tools.split(list_indication(4), "%c")[6]
	local ufcp_3 = ExportScript.Tools.split(list_indication(5), "%c")[6]
	local ufcp_4 = ExportScript.Tools.split(list_indication(6), "%c")[6]
	local radio1 = ExportScript.Tools.split(list_indication(7), "%c")[3]
	local radio2 = ExportScript.Tools.split(list_indication(7), "%c")[8]
	
	
	-- Temporary fix: DCS-ExportScript uses colons (:) as separation between uplink messages.
    -- Replace all colons with semicolons for TOT view, TODO: add escape char parsing in streamdeck plugin (ctytler).	
	ufcp_1 = ufcp_1:gsub(":",";")
	ufcp_2 = ufcp_2:gsub(":",";")
	ufcp_3 = ufcp_3:gsub(":",";")
	ufcp_4 = ufcp_4:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	radio1 = radio1:gsub(":",";")
	
	-- The below logic handles the case where a UFCP display has been selected for entry and
	-- has blinking "--".
	-- Additional logic could be added to handle the blinking itself and show the other side
	-- with the e.g. win1fill value, however this logic seemed sufficient for now.
	if ufcp_1 == nil then
	    ufcp_1 = ""
	elseif list_indication(3):match("txt_win1r") then
		ufcp_1 = string.format("%8s", ufcp_1)
	end
	if ufcp_2 == nil then
	    ufcp_2 = ""
	elseif list_indication(3):match("txt_win2r") then
		ufcp_2 = string.format("%8s", ufcp_2)
	end
	if ufcp_3 == nil then
	    ufcp_3 = ""
	elseif list_indication(3):match("txt_win3r") then
		ufcp_3 = string.format("%8s", ufcp_3)
	end
	if ufcp_4 == nil then
	    ufcp_4 = ""
	elseif list_indication(3):match("txt_win4r") then
		ufcp_4 = string.format("%8s", ufcp_4)
	end
	if radio1 == nil then
	    radio1 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio1 = string.format("%8s", radio1)
	end
	if radio2 == nil then
	    radio2 = ""
	elseif list_indication(7):match("txt_win4r") then
		radio2 = string.format("%8s", radio2)
	end
	-- Full 8 character strings.
	ExportScript.Tools.SendData(2001, string.format("%-8s", ufcp_1))
	ExportScript.Tools.SendData(2002, string.format("%-8s", ufcp_2))
	ExportScript.Tools.SendData(2003, string.format("%-8s", ufcp_3))
	ExportScript.Tools.SendData(2004, string.format("%-8s", ufcp_4))
	ExportScript.Tools.SendData(2013, string.format("%-8s", radio1))
	ExportScript.Tools.SendData(2016, string.format("%-8s", radio2))
	-- Left-Hand 4 character strings.
	ExportScript.Tools.SendData(2005, string.format("%-4s", ufcp_1:sub(1,4)))
	ExportScript.Tools.SendData(2006, string.format("%-4s", ufcp_2:sub(1,4)))
	ExportScript.Tools.SendData(2007, string.format("%-4s", ufcp_3:sub(1,4)))
	ExportScript.Tools.SendData(2008, string.format("%-4s", ufcp_4:sub(1,4)))
	ExportScript.Tools.SendData(2014, string.format("%-4s", radio1:sub(1,4)))
	ExportScript.Tools.SendData(2017, string.format("%-4s", radio2:sub(1,4)))
	-- Right Hand 4 character strings.
	ExportScript.Tools.SendData(2009, string.format("%-4s", ufcp_1:sub(5,8)))
	ExportScript.Tools.SendData(2010, string.format("%-4s", ufcp_2:sub(5,8)))
	ExportScript.Tools.SendData(2011, string.format("%-4s", ufcp_3:sub(5,8)))
	ExportScript.Tools.SendData(2012, string.format("%-4s", ufcp_4:sub(5,8)))
	ExportScript.Tools.SendData(2015, string.format("%-4s", radio1:sub(5,8)))
	ExportScript.Tools.SendData(2018, string.format("%-4s", radio2:sub(5,8)))

end

 

JF-17 manual radio display.PNG

I took a look at chucks guide and it seems that the arrow is a power indicator. I couldn't see what represented it in the list_indication, so I would have linked it to the mode switch position of the radio itself. Just FYI. Also, good luck parsing the list_indication with the blinking cursor. It's tricky.

Link to comment
Share on other sites

1 hour ago, Bailey said:

I took a look at chucks guide and it seems that the arrow is a power indicator. I couldn't see what represented it in the list_indication, so I would have linked it to the mode switch position of the radio itself. Just FYI. Also, good luck parsing the list_indication with the blinking cursor. It's tricky.

yeah I could not get it to work, i will keep testing it from time to time the 1st row is working that was the main one I need. The arrow and Am won't show either for me. Mean while I am just updating all my profiles.

Thanks for looking in to it.

Link to comment
Share on other sites

  • 2 weeks later...

The latest openbeta update has broken my stream deck plug in I think.  It can read the state of the switches but if I push them on the stream deck they don't flick the switch.

This is in the Tomcat

 

Anyone else getting this with the 2.7.7 update yesterday?

Link to comment
Share on other sites

52 minutes ago, hasole said:

La dernière mise à jour openbeta a cassé mon plug-in de plate-forme de flux, je pense. Il peut lire l'état des commutateurs, mais si je les pousse sur la plate-forme de flux, ils n'actionnent pas le commutateur.

C'est dans le Tomcat

 

Quelqu'un d'autre a-t-il obtenu cela avec la mise à jour 2.7.7 hier ?

You have to increase the Device ID number by +1 on the buttons that no longer work. At least, this is what corrected the same problem for me.

  • Thanks 2
Link to comment
Share on other sites

6 hours ago, hasole said:

The latest openbeta update has broken my stream deck plug in I think.  It can read the state of the switches but if I push them on the stream deck they don't flick the switch.

This is in the Tomcat

 

Anyone else getting this with the 2.7.7 update yesterday?

My Radio channel/freq readout no longer works properly either. This is what I have
 

    local UHF_ARC159_infoBase = ExportScript.Tools.split(list_indication(8), "%c")--this contains the formated table of the base radio
    local UHF_ARC159_readoutBase = UHF_ARC159_infoBase[10] -- so far it has always been 10 in both channel and freq modes
    local UHF_ARC159_FreqMode = string.format("%0.1f", mainPanelDevice:get_argument_value(2033))
    
    if UHF_ARC159_FreqMode == "1.0" or UHF_ARC159_FreqMode == "0.5" then
        ExportScript.Tools.SendData(60000, string.format("ARC-159\n" .. UHF_ARC159_readoutBase:sub(1,3) .. "." .. UHF_ARC159_readoutBase:sub(4,6)))
        ExportScript.Tools.SendData(60001, string.format(UHF_ARC159_readoutBase:sub(1,3) .. "." .. UHF_ARC159_readoutBase:sub(4,6)))
    elseif UHF_ARC159_FreqMode == "0.0" then
        ExportScript.Tools.SendData(60000, string.format("ARC-159\n" .. "CH " .. UHF_ARC159_readoutBase:sub(4,6)))
        ExportScript.Tools.SendData(60001, string.format("CH " .. UHF_ARC159_readoutBase:sub(4,6)))
    end

Link to comment
Share on other sites

Question - 

I'm running some of the profiles I find here on the page on my streamdeck XL. I want to add a few features, but I don't know how to go about it. 

First, I would like an fuel indicator added (for instance in the hungry F-16). How can this be added? If I use the lookup ID, I cannot find it, since its not a button, but only a "display/indicator" - how will I find the ID's for that?

Secondly, I would love to use is as a MFD keyboard - Right now I have made diffrent "sets" of MFD keys - 1 set is for SMS page, 1 set for MAV page, 1 set for TGP etc.....  This is because on each page the MFD key have a different function. Is there a way to "extract" what action the button will do? (eg what label is on the MFD next to the button) 

Link to comment
Share on other sites

4 hours ago, Martin1454 said:

Question - 

I'm running some of the profiles I find here on the page on my streamdeck XL. I want to add a few features, but I don't know how to go about it. 

First, I would like an fuel indicator added (for instance in the hungry F-16). How can this be added? If I use the lookup ID, I cannot find it, since its not a button, but only a "display/indicator" - how will I find the ID's for that?

Secondly, I would love to use is as a MFD keyboard - Right now I have made diffrent "sets" of MFD keys - 1 set is for SMS page, 1 set for MAV page, 1 set for TGP etc.....  This is because on each page the MFD key have a different function. Is there a way to "extract" what action the button will do? (eg what label is on the MFD next to the button) 

1. In the F16 you will have to find the IDs for the fuel totalizer (730, 731, and 732) and then make a function that extracts that data into numerical values for the button. The other way to get the fuel value is to call list_indication(6). In the lua code "if" you can read "["TOTAL value"]", "then" export the fuel value. Unfortunately this method will only work when the DED is on the BINGO page.

2. Kinda/yes/maybe, but it would be pretty complicated (imo). The best video that would expose you to how its done is this one.

You will need to find the correct list_indication, the associate the MFD readout to the export text per button.

 

P.S. I have found some errors in my F16 lua file. I'll update it and try to incorporate your first concern.


Edited by Bailey
  • Like 1
Link to comment
Share on other sites

4 hours ago, Martin1454 said:

Question - 

I'm running some of the profiles I find here on the page on my streamdeck XL. I want to add a few features, but I don't know how to go about it. 

First, I would like an fuel indicator added (for instance in the hungry F-16). How can this be added? If I use the lookup ID, I cannot find it, since its not a button, but only a "display/indicator" - how will I find the ID's for that?

Secondly, I would love to use is as a MFD keyboard - Right now I have made diffrent "sets" of MFD keys - 1 set is for SMS page, 1 set for MAV page, 1 set for TGP etc.....  This is because on each page the MFD key have a different function. Is there a way to "extract" what action the button will do? (eg what label is on the MFD next to the button) 

Concerning your first question: https://github.com/asherao/DCS-ExportScripts/blob/master/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua
https://github.com/asherao/DCS-ExportScripts/wiki/F-16C
f16CMSandFuel.jpg?raw=true

You can tinker with the rounding if you like by changing "totalFuelFlowCounter = round(totalFuelFlowCounter, -1)" to "totalFuelFlowCounter = round(totalFuelFlowCounter, -2)", if you like.

  • Like 1
Link to comment
Share on other sites

@BaileyYou're the man! I will have a look at that profile - Does the F-16 lua you linked have the fix for the TGP crashing DCS? I will have a look, and see if I can implement the MFD my self, but I can see its a bigger project.

 

EDIT: I just tested, TGP did not crash, so all is good 🙂 Also got the fuel thing to work! 


Edited by Martin1454
  • Thanks 1
Link to comment
Share on other sites

After the intro (Thanks @Bailey) I found the correct table for the MFD's for the F-16 I want to export to my stream deck - But I cannot isolate the button text!. 

Running 

local txt_RMFD = ExportScript.Tools.split(list_indication(5), "%c")
return txt_RMFD

Will return me the following data in the SMS page: 

 

Spoiler
{
    [1] = "-----------------------------------------",
    [2] = "Background_Mask",
    [3] = "",
    [4] = "-----------------------------------------",
    [5] = "BOMB_ROOT",
    [6] = "",
    [7] = "children are {",
    [8] = "-----------------------------------------",
    [9] = "BOMB_PAGE",
    [10] = "",
    [11] = "children are {",
    [12] = "-----------------------------------------",
    [13] = " Table. Root. Unic ID: _id:211",
    [14] = "",
    [15] = "children are {",
    [16] = "-----------------------------------------",
    [17] = " Table. Root. Unic ID: _id:211. Text",
    [18] = "PROF1",
    [19] = "children are {",
    [20] = "-----------------------------------------",
    [21] = " Table. Root. Unic ID: _id:211. Text_Mask",
    [22] = "",
    [23] = "}",
    [24] = "}",
    [25] = "-----------------------------------------",
    [26] = " Table. Root. Unic ID: _id:212",
    [27] = "",
    [28] = "children are {",
    [29] = "-----------------------------------------",
    [30] = " Table. Root. Unic ID: _id:212. Text",
    [31] = "1  SGL",
    [32] = "children are {",
    [33] = "-----------------------------------------",
    [34] = " Table. Root. Unic ID: _id:212. Text_Mask",
    [35] = "",
    [36] = "}",
    [37] = "}",
    [38] = "-----------------------------------------",
    [39] = " Table. Root. Unic ID: _id:213",
    [40] = "",
    [41] = "children are {",
    [42] = "-----------------------------------------",
    [43] = " Table. Root. Unic ID: _id:213. Text",
    [44] = "10FT",
    [45] = "children are {",
    [46] = "-----------------------------------------",
    [47] = " Table. Root. Unic ID: _id:213. Text_Mask",
    [48] = "",
    [49] = "}",
    [50] = "}",
    [51] = "-----------------------------------------",
    [52] = " Table. Root. Unic ID: _id:214",
    [53] = "",
    [54] = "children are {",
    [55] = "-----------------------------------------",
    [56] = " Table. Root. Unic ID: _id:214. Text",
    [57] = "RP",
    [58] = "1",
    [59] = "children are {",
    [60] = "-----------------------------------------",
    [61] = " Table. Root. Unic ID: _id:214. Text_Mask",
    [62] = "",
    [63] = "}",
    [64] = "}",
    [65] = "-----------------------------------------",
    [66] = " Table. Root. Unic ID: _id:215",
    [67] = "",
    [68] = "children are {",
    [69] = "-----------------------------------------",
    [70] = " Table. Root. Unic ID: _id:215. Text",
    [71] = "NSTL",
    [72] = "children are {",
    [73] = "-----------------------------------------",
    [74] = " Table. Root. Unic ID: _id:215. Text_Mask",
    [75] = "",
    [76] = "}",
    [77] = "}",
    [78] = "}",
    [79] = "}",
    [80] = "-----------------------------------------",
    [81] = "A-G Table. Root. Unic ID: _id:422",
    [82] = "",
    [83] = "children are {",
    [84] = "-----------------------------------------",
    [85] = "A-G Table. Root. Unic ID: _id:422. Text",
    [86] = "A-G",
    [87] = "children are {",
    [88] = "-----------------------------------------",
    [89] = "A-G Table. Root. Unic ID: _id:422. Text_Mask",
    [90] = "",
    [91] = "}",
    [92] = "}",
    [93] = "-----------------------------------------",
    [94] = " Table. Root. Unic ID: _id:423",
    [95] = "",
    [96] = "children are {",
    [97] = "-----------------------------------------",
    [98] = " Table. Root. Unic ID: _id:423. Text",
    [99] = "CCIP",
    [100] = "children are {",
    [101] = "-----------------------------------------",
    [102] = " Table. Root. Unic ID: _id:423. Text_Mask",
    [103] = "",
    [104] = "}",
    [105] = "}",
    [106] = "-----------------------------------------",
    [107] = "INV Table. Root. Unic ID: _id:424",
    [108] = "",
    [109] = "children are {",
    [110] = "-----------------------------------------",
    [111] = "INV Table. Root. Unic ID: _id:424. Text",
    [112] = "INV",
    [113] = "children are {",
    [114] = "-----------------------------------------",
    [115] = "INV Table. Root. Unic ID: _id:424. Text_Mask",
    [116] = "",
    [117] = "}",
    [118] = "}",
    [119] = "-----------------------------------------",
    [120] = "       Table. Root. Unic ID: _id:425",
    [121] = "",
    [122] = "children are {",
    [123] = "-----------------------------------------",
    [124] = "       Table. Root. Unic ID: _id:425. Text",
    [125] = "6BD33T",
    [126] = "children are {",
    [127] = "-----------------------------------------",
    [128] = "       Table. Root. Unic ID: _id:425. Text_Mask",
    [129] = "",
    [130] = "}",
    [131] = "}",
    [132] = "-----------------------------------------",
    [133] = "Weapon_Status_Ready",
    [134] = "",
    [135] = "children are {",
    [136] = "-----------------------------------------",
    [137] = "Weapon_Status_Ready_Top",
    [138] = "RDY",
    [139] = "-----------------------------------------",
    [140] = "Weapon_Status_Ready_Bottom",
    [141] = "RDY",
    [142] = "}",
    [143] = "-----------------------------------------",
    [144] = "DCLT Table. Root. Unic ID: _id:1",
    [145] = "",
    [146] = "children are {",
    [147] = "}",
    [148] = "-----------------------------------------",
    [149] = "S-J Table. Root. Unic ID: _id:43",
    [150] = "",
    [151] = "children are {",
    [152] = "-----------------------------------------",
    [153] = "S-J Table. Root. Unic ID: _id:43. Text",
    [154] = "S-J",
    [155] = "children are {",
    [156] = "-----------------------------------------",
    [157] = "S-J Table. Root. Unic ID: _id:43. Text_Mask",
    [158] = "",
    [159] = "}",
    [160] = "}",
    [161] = "-----------------------------------------",
    [162] = "TCN Table. Root. Unic ID: _id:44",
    [163] = "",
    [164] = "children are {",
    [165] = "}",
    [166] = "-----------------------------------------",
    [167] = "PB_Menu_Label_ROOT_12",
    [168] = "",
    [169] = "children are {",
    [170] = "-----------------------------------------",
    [171] = "PB_Menu_Label_12",
    [172] = "   ",
    [173] = "}",
    [174] = "-----------------------------------------",
    [175] = "PB_Menu_Label_ROOT_13",
    [176] = "",
    [177] = "children are {",
    [178] = "-----------------------------------------",
    [179] = "PB_Menu_Label_13",
    [180] = "HSD",
    [181] = "}",
    [182] = "-----------------------------------------",
    [183] = "PB_Menu_Label_3Sym_13_Mask",
    [184] = "",
    [185] = "-----------------------------------------",
    [186] = "PB_Menu_Label_ROOT_14",
    [187] = "",
    [188] = "children are {",
    [189] = "-----------------------------------------",
    [190] = "PB_Menu_Label_ROOT_Selected14",
    [191] = "",
    [192] = "children are {",
    [193] = "-----------------------------------------",
    [194] = "PB_Menu_Label_rootFiller_3Sym_14",
    [195] = "",
    [196] = "children are {",
    [197] = "-----------------------------------------",
    [198] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:225",
    [199] = "",
    [200] = "-----------------------------------------",
    [201] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:226",
    [202] = "",
    [203] = "-----------------------------------------",
    [204] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:227",
    [205] = "",
    [206] = "-----------------------------------------",
    [207] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:228",
    [208] = "",
    [209] = "-----------------------------------------",
    [210] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:229",
    [211] = "",
    [212] = "-----------------------------------------",
    [213] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:230",
    [214] = "",
    [215] = "-----------------------------------------",
    [216] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:231",
    [217] = "",
    [218] = "-----------------------------------------",
    [219] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:232",
    [220] = "",
    [221] = "-----------------------------------------",
    [222] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:233",
    [223] = "",
    [224] = "-----------------------------------------",
    [225] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:234",
    [226] = "",
    [227] = "-----------------------------------------",
    [228] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:235",
    [229] = "",
    [230] = "-----------------------------------------",
    [231] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:236",
    [232] = "",
    [233] = "-----------------------------------------",
    [234] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:237",
    [235] = "",
    [236] = "-----------------------------------------",
    [237] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:238",
    [238] = "",
    [239] = "-----------------------------------------",
    [240] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:239",
    [241] = "",
    [242] = "-----------------------------------------",
    [243] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:240",
    [244] = "",
    [245] = "-----------------------------------------",
    [246] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:241",
    [247] = "",
    [248] = "-----------------------------------------",
    [249] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:242",
    [250] = "",
    [251] = "-----------------------------------------",
    [252] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:243",
    [253] = "",
    [254] = "-----------------------------------------",
    [255] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:244",
    [256] = "",
    [257] = "-----------------------------------------",
    [258] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:245",
    [259] = "",
    [260] = "-----------------------------------------",
    [261] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:246",
    [262] = "",
    [263] = "-----------------------------------------",
    [264] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:247",
    [265] = "",
    [266] = "-----------------------------------------",
    [267] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:248",
    [268] = "",
    [269] = "-----------------------------------------",
    [270] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:249",
    [271] = "",
    [272] = "-----------------------------------------",
    [273] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:250",
    [274] = "",
    [275] = "-----------------------------------------",
    [276] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:251",
    [277] = "",
    [278] = "-----------------------------------------",
    [279] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:252",
    [280] = "",
    [281] = "-----------------------------------------",
    [282] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:253",
    [283] = "",
    [284] = "-----------------------------------------",
    [285] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:254",
    [286] = "",
    [287] = "-----------------------------------------",
    [288] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:255",
    [289] = "",
    [290] = "-----------------------------------------",
    [291] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:256",
    [292] = "",
    [293] = "-----------------------------------------",
    [294] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:257",
    [295] = "",
    [296] = "-----------------------------------------",
    [297] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:258",
    [298] = "",
    [299] = "-----------------------------------------",
    [300] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:259",
    [301] = "",
    [302] = "-----------------------------------------",
    [303] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:260",
    [304] = "",
    [305] = "-----------------------------------------",
    [306] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:261",
    [307] = "",
    [308] = "-----------------------------------------",
    [309] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:262",
    [310] = "",
    [311] = "-----------------------------------------",
    [312] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:263",
    [313] = "",
    [314] = "-----------------------------------------",
    [315] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:264",
    [316] = "",
    [317] = "-----------------------------------------",
    [318] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:265",
    [319] = "",
    [320] = "-----------------------------------------",
    [321] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:266",
    [322] = "",
    [323] = "-----------------------------------------",
    [324] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:267",
    [325] = "",
    [326] = "-----------------------------------------",
    [327] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:268",
    [328] = "",
    [329] = "-----------------------------------------",
    [330] = "PB_Menu_Label_rootFiller_3Sym_14_Line__id:269",
    [331] = "",
    [332] = "}",
    [333] = "-----------------------------------------",
    [334] = "PB_Menu_Label_Black_PB_14",
    [335] = "SMS",
    [336] = "}",
    [337] = "}",
    [338] = "-----------------------------------------",
    [339] = "PB_Menu_Label_3Sym_14_Mask",
    [340] = "",
    [341] = "-----------------------------------------",
    [342] = "SWAP Table. Root. Unic ID: _id:315",
    [343] = "",
    [344] = "children are {",
    [345] = "-----------------------------------------",
    [346] = "SWAP Table. Root. Unic ID: _id:315. Text",
    [347] = "SWAP",
    [348] = "children are {",
    [349] = "-----------------------------------------",
    [350] = "SWAP Table. Root. Unic ID: _id:315. Text_Mask",
    [351] = "",
    [352] = "}",
    [353] = "}",
}

 

And in the HSD page I will get:

Spoiler
{
    [1] = "-----------------------------------------",
    [2] = "Background_Mask",
    [3] = "",
    [4] = "-----------------------------------------",
    [5] = "HSDCenter",
    [6] = "",
    [7] = "children are {",
    [8] = "-----------------------------------------",
    [9] = "Aircraft_Symbol",
    [10] = "",
    [11] = "-----------------------------------------",
    [12] = "RingsPH",
    [13] = "",
    [14] = "children are {",
    [15] = "-----------------------------------------",
    [16] = "Range_Ring_1",
    [17] = "",
    [18] = "-----------------------------------------",
    [19] = "Range_Ring_2",
    [20] = "",
    [21] = "-----------------------------------------",
    [22] = "Range_Ring_3",
    [23] = "",
    [24] = "}",
    [25] = "-----------------------------------------",
    [26] = "FcrConePH",
    [27] = "",
    [28] = "children are {",
    [29] = "-----------------------------------------",
    [30] = "Azimuth_Scan_Limits_Left",
    [31] = "",
    [32] = "-----------------------------------------",
    [33] = "Azimuth_Scan_Limits_Right",
    [34] = "",
    [35] = "-----------------------------------------",
    [36] = "Azimuth_Scan_Limits_Circle",
    [37] = "",
    [38] = "}",
    [39] = "-----------------------------------------",
    [40] = "HSD_Heading_PH",
    [41] = "",
    [42] = "children are {",
    [43] = "-----------------------------------------",
    [44] = "Bullseye_Root",
    [45] = "",
    [46] = "children are {",
    [47] = "-----------------------------------------",
    [48] = "Bullseye_Cirle_First",
    [49] = "",
    [50] = "-----------------------------------------",
    [51] = "Bullseye_Cirle_Second",
    [52] = "",
    [53] = "-----------------------------------------",
    [54] = "Bullseye_Cirle_Third",
    [55] = "",
    [56] = "}",
    [57] = "-----------------------------------------",
    [58] = "HSD ghost AG cursor",
    [59] = "",
    [60] = "-----------------------------------------",
    [61] = "NavRoute_1_WYPT_Root_1",
    [62] = "",
    [63] = "children are {",
    [64] = "-----------------------------------------",
    [65] = "NavRoute_1_Selected_STPT_circle_1_1",
    [66] = "",
    [67] = "-----------------------------------------",
    [68] = "NavRoute_1_Selected_STPT_circle_1_2",
    [69] = "",
    [70] = "-----------------------------------------",
    [71] = "NavRoute_1_Selected_STPT_circle_1_3",
    [72] = "",
    [73] = "-----------------------------------------",
    [74] = "NavRoute_1_Selected_STPT_circle_1_4",
    [75] = "",
    [76] = "}",
    [77] = "-----------------------------------------",
    [78] = "NavRoute_1_WYPT_Root_2",
    [79] = "",
    [80] = "children are {",
    [81] = "-----------------------------------------",
    [82] = "NavRoute_1_WYPT_circle_2",
    [83] = "",
    [84] = "}",
    [85] = "-----------------------------------------",
    [86] = "NavRoute_1_WYPT_Root_3",
    [87] = "",
    [88] = "children are {",
    [89] = "-----------------------------------------",
    [90] = "NavRoute_1_WYPT_circle_3",
    [91] = "",
    [92] = "}",
    [93] = "-----------------------------------------",
    [94] = "NavRoute_1_WYPT_Root_4",
    [95] = "",
    [96] = "children are {",
    [97] = "-----------------------------------------",
    [98] = "NavRoute_1_WYPT_circle_4",
    [99] = "",
    [100] = "}",
    [101] = "-----------------------------------------",
    [102] = "NavRoute_1_Line_1",
    [103] = "",
    [104] = "-----------------------------------------",
    [105] = "NavRoute_1_Line_2",
    [106] = "",
    [107] = "-----------------------------------------",
    [108] = "NavRoute_1_Line_3",
    [109] = "",
    [110] = "}",
    [111] = "}",
    [112] = "-----------------------------------------",
    [113] = "Aircraft_reference_symbol_Root",
    [114] = "",
    [115] = "children are {",
    [116] = "-----------------------------------------",
    [117] = "AC_Reference_root",
    [118] = "",
    [119] = "children are {",
    [120] = "-----------------------------------------",
    [121] = "Aircraft_reference_Reference_Symbol",
    [122] = "",
    [123] = "-----------------------------------------",
    [124] = "Azimuth_Steering_Bar",
    [125] = "",
    [126] = "}",
    [127] = "}",
    [128] = "-----------------------------------------",
    [129] = "HSD_Cursor_Root",
    [130] = "",
    [131] = "children are {",
    [132] = "-----------------------------------------",
    [133] = "HSD_Cursor_Line_Left",
    [134] = "",
    [135] = "-----------------------------------------",
    [136] = "HSD_Cursor_Line_Right",
    [137] = "",
    [138] = "}",
    [139] = "-----------------------------------------",
    [140] = "HSD_Bearing_range",
    [141] = "146 02",
    [142] = "-----------------------------------------",
    [143] = "HSD_Main_Menu_PH",
    [144] = "",
    [145] = "children are {",
    [146] = "-----------------------------------------",
    [147] = "    Table. Root. Unic ID: _id:1",
    [148] = "",
    [149] = "children are {",
    [150] = "-----------------------------------------",
    [151] = "    Table. Root. Unic ID: _id:1. Text",
    [152] = "DEP",
    [153] = "children are {",
    [154] = "-----------------------------------------",
    [155] = "    Table. Root. Unic ID: _id:1. Text_Mask",
    [156] = "",
    [157] = "}",
    [158] = "}",
    [159] = "-----------------------------------------",
    [160] = "DCPL Table. Root. Unic ID: _id:2",
    [161] = "",
    [162] = "children are {",
    [163] = "-----------------------------------------",
    [164] = "DCPL Table. Root. Unic ID: _id:2. Text",
    [165] = "DCPL",
    [166] = "children are {",
    [167] = "-----------------------------------------",
    [168] = "DCPL Table. Root. Unic ID: _id:2. Text_Mask",
    [169] = "",
    [170] = "}",
    [171] = "}",
    [172] = "-----------------------------------------",
    [173] = "NORM Table. Root. Unic ID: _id:3",
    [174] = "",
    [175] = "children are {",
    [176] = "-----------------------------------------",
    [177] = "NORM Table. Root. Unic ID: _id:3. Text",
    [178] = "NORM",
    [179] = "children are {",
    [180] = "-----------------------------------------",
    [181] = "NORM Table. Root. Unic ID: _id:3. Text_Mask",
    [182] = "",
    [183] = "}",
    [184] = "}",
    [185] = "-----------------------------------------",
    [186] = "MSG Table. Root. Unic ID: _id:4",
    [187] = "",
    [188] = "children are {",
    [189] = "-----------------------------------------",
    [190] = "MSG Table. Root. Unic ID: _id:4. Text",
    [191] = "MSG",
    [192] = "children are {",
    [193] = "-----------------------------------------",
    [194] = "MSG Table. Root. Unic ID: _id:4. Text_Mask",
    [195] = "",
    [196] = "}",
    [197] = "}",
    [198] = "-----------------------------------------",
    [199] = "CNTL Table. Root. Unic ID: _id:5",
    [200] = "",
    [201] = "children are {",
    [202] = "-----------------------------------------",
    [203] = "CNTL Table. Root. Unic ID: _id:5. Text",
    [204] = "CNTL",
    [205] = "children are {",
    [206] = "-----------------------------------------",
    [207] = "CNTL Table. Root. Unic ID: _id:5. Text_Mask",
    [208] = "",
    [209] = "}",
    [210] = "}",
    [211] = "-----------------------------------------",
    [212] = "XMT",
    [213] = "OFF Table. Root. Unic ID: _id:6",
    [214] = "",
    [215] = "children are {",
    [216] = "-----------------------------------------",
    [217] = "XMT",
    [218] = "OFF Table. Root. Unic ID: _id:6. Text",
    [219] = "XMT",
    [220] = "OFF",
    [221] = "children are {",
    [222] = "-----------------------------------------",
    [223] = "XMT",
    [224] = "OFF Table. Root. Unic ID: _id:6. Text_Mask",
    [225] = "",
    [226] = "}",
    [227] = "}",
    [228] = "-----------------------------------------",
    [229] = "F",
    [230] = "Z Table. Root. Unic ID: _id:7",
    [231] = "",
    [232] = "children are {",
    [233] = "-----------------------------------------",
    [234] = "F",
    [235] = "Z Table. Root. Unic ID: _id:7. Text",
    [236] = "F",
    [237] = "Z",
    [238] = "children are {",
    [239] = "-----------------------------------------",
    [240] = "F",
    [241] = "Z Table. Root. Unic ID: _id:7. Text_Mask",
    [242] = "",
    [243] = "}",
    [244] = "}",
    [245] = "-----------------------------------------",
    [246] = "FR",
    [247] = "ON Table. Root. Unic ID: _id:8",
    [248] = "",
    [249] = "children are {",
    [250] = "-----------------------------------------",
    [251] = "FR",
    [252] = "ON Table. Root. Unic ID: _id:8. Text",
    [253] = "FR",
    [254] = "ON",
    [255] = "children are {",
    [256] = "-----------------------------------------",
    [257] = "FR",
    [258] = "ON Table. Root. Unic ID: _id:8. Text_Mask",
    [259] = "",
    [260] = "}",
    [261] = "}",
    [262] = "-----------------------------------------",
    [263] = "Range_Scale_Root",
    [264] = "",
    [265] = "children are {",
    [266] = "-----------------------------------------",
    [267] = "Range_Scale_Value",
    [268] = "60",
    [269] = "-----------------------------------------",
    [270] = "Decrement_Range_Scale_Symbol",
    [271] = "",
    [272] = "-----------------------------------------",
    [273] = "Increment_Range_Scale_Symbol",
    [274] = "",
    [275] = "}",
    [276] = "}",
    [277] = "-----------------------------------------",
    [278] = "Range_Scale_Root_Mask",
    [279] = "",
    [280] = "-----------------------------------------",
    [281] = "Bullseye_LOS_Mask_PH",
    [282] = "",
    [283] = "-----------------------------------------",
    [284] = "Bullseye_LOS_Mask_PH_Mask",
    [285] = "",
    [286] = "-----------------------------------------",
    [287] = "HSD_AircraftPosValid_PH",
    [288] = "",
    [289] = "children are {",
    [290] = "-----------------------------------------",
    [291] = "Link16_DefenseZones_Keeper",
    [292] = "",
    [293] = "-----------------------------------------",
    [294] = "System_AirTracks_Keeper",
    [295] = "",
    [296] = "}",
    [297] = "-----------------------------------------",
    [298] = "DCLT Table. Root. Unic ID: _id:1",
    [299] = "",
    [300] = "children are {",
    [301] = "-----------------------------------------",
    [302] = "DCLT Table. Root. Unic ID: _id:1. Text",
    [303] = "DCLT",
    [304] = "children are {",
    [305] = "-----------------------------------------",
    [306] = "DCLT Table. Root. Unic ID: _id:1. Text_Mask",
    [307] = "",
    [308] = "}",
    [309] = "}",
    [310] = "-----------------------------------------",
    [311] = "S-J Table. Root. Unic ID: _id:43",
    [312] = "",
    [313] = "children are {",
    [314] = "}",
    [315] = "-----------------------------------------",
    [316] = "TCN Table. Root. Unic ID: _id:44",
    [317] = "",
    [318] = "children are {",
    [319] = "}",
    [320] = "-----------------------------------------",
    [321] = "PB_Menu_Label_ROOT_12",
    [322] = "",
    [323] = "children are {",
    [324] = "-----------------------------------------",
    [325] = "PB_Menu_Label_12",
    [326] = "   ",
    [327] = "}",
    [328] = "-----------------------------------------",
    [329] = "PB_Menu_Label_ROOT_13",
    [330] = "",
    [331] = "children are {",
    [332] = "-----------------------------------------",
    [333] = "PB_Menu_Label_ROOT_Selected13",
    [334] = "",
    [335] = "children are {",
    [336] = "-----------------------------------------",
    [337] = "PB_Menu_Label_rootFiller_3Sym_13",
    [338] = "",
    [339] = "children are {",
    [340] = "-----------------------------------------",
    [341] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:135",
    [342] = "",
    [343] = "-----------------------------------------",
    [344] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:136",
    [345] = "",
    [346] = "-----------------------------------------",
    [347] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:137",
    [348] = "",
    [349] = "-----------------------------------------",
    [350] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:138",
    [351] = "",
    [352] = "-----------------------------------------",
    [353] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:139",
    [354] = "",
    [355] = "-----------------------------------------",
    [356] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:140",
    [357] = "",
    [358] = "-----------------------------------------",
    [359] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:141",
    [360] = "",
    [361] = "-----------------------------------------",
    [362] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:142",
    [363] = "",
    [364] = "-----------------------------------------",
    [365] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:143",
    [366] = "",
    [367] = "-----------------------------------------",
    [368] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:144",
    [369] = "",
    [370] = "-----------------------------------------",
    [371] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:145",
    [372] = "",
    [373] = "-----------------------------------------",
    [374] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:146",
    [375] = "",
    [376] = "-----------------------------------------",
    [377] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:147",
    [378] = "",
    [379] = "-----------------------------------------",
    [380] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:148",
    [381] = "",
    [382] = "-----------------------------------------",
    [383] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:149",
    [384] = "",
    [385] = "-----------------------------------------",
    [386] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:150",
    [387] = "",
    [388] = "-----------------------------------------",
    [389] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:151",
    [390] = "",
    [391] = "-----------------------------------------",
    [392] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:152",
    [393] = "",
    [394] = "-----------------------------------------",
    [395] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:153",
    [396] = "",
    [397] = "-----------------------------------------",
    [398] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:154",
    [399] = "",
    [400] = "-----------------------------------------",
    [401] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:155",
    [402] = "",
    [403] = "-----------------------------------------",
    [404] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:156",
    [405] = "",
    [406] = "-----------------------------------------",
    [407] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:157",
    [408] = "",
    [409] = "-----------------------------------------",
    [410] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:158",
    [411] = "",
    [412] = "-----------------------------------------",
    [413] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:159",
    [414] = "",
    [415] = "-----------------------------------------",
    [416] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:160",
    [417] = "",
    [418] = "-----------------------------------------",
    [419] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:161",
    [420] = "",
    [421] = "-----------------------------------------",
    [422] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:162",
    [423] = "",
    [424] = "-----------------------------------------",
    [425] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:163",
    [426] = "",
    [427] = "-----------------------------------------",
    [428] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:164",
    [429] = "",
    [430] = "-----------------------------------------",
    [431] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:165",
    [432] = "",
    [433] = "-----------------------------------------",
    [434] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:166",
    [435] = "",
    [436] = "-----------------------------------------",
    [437] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:167",
    [438] = "",
    [439] = "-----------------------------------------",
    [440] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:168",
    [441] = "",
    [442] = "-----------------------------------------",
    [443] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:169",
    [444] = "",
    [445] = "-----------------------------------------",
    [446] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:170",
    [447] = "",
    [448] = "-----------------------------------------",
    [449] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:171",
    [450] = "",
    [451] = "-----------------------------------------",
    [452] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:172",
    [453] = "",
    [454] = "-----------------------------------------",
    [455] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:173",
    [456] = "",
    [457] = "-----------------------------------------",
    [458] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:174",
    [459] = "",
    [460] = "-----------------------------------------",
    [461] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:175",
    [462] = "",
    [463] = "-----------------------------------------",
    [464] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:176",
    [465] = "",
    [466] = "-----------------------------------------",
    [467] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:177",
    [468] = "",
    [469] = "-----------------------------------------",
    [470] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:178",
    [471] = "",
    [472] = "-----------------------------------------",
    [473] = "PB_Menu_Label_rootFiller_3Sym_13_Line__id:179",
    [474] = "",
    [475] = "}",
    [476] = "-----------------------------------------",
    [477] = "PB_Menu_Label_Black_PB_13",
    [478] = "HSD",
    [479] = "}",
    [480] = "}",
    [481] = "-----------------------------------------",
    [482] = "PB_Menu_Label_3Sym_13_Mask",
    [483] = "",
    [484] = "-----------------------------------------",
    [485] = "PB_Menu_Label_ROOT_14",
    [486] = "",
    [487] = "children are {",
    [488] = "-----------------------------------------",
    [489] = "PB_Menu_Label_14",
    [490] = "SMS",
    [491] = "}",
    [492] = "-----------------------------------------",
    [493] = "PB_Menu_Label_3Sym_14_Mask",
    [494] = "",
    [495] = "-----------------------------------------",
    [496] = "SWAP Table. Root. Unic ID: _id:315",
    [497] = "",
    [498] = "children are {",
    [499] = "-----------------------------------------",
    [500] = "SWAP Table. Root. Unic ID: _id:315. Text",
    [501] = "SWAP",
    [502] = "children are {",
    [503] = "-----------------------------------------",
    [504] = "SWAP Table. Root. Unic ID: _id:315. Text_Mask",
    [505] = "",
    [506] = "}",
    [507] = "}",
}

 

So looking at these 2, the "DEP"  is line 152 in one page, where "A-G" on the other page is line 86 - These 2 labels go on the same MFD button / location - So how do I ID this value since it moves all over the table? 

 

A very crude solution would be a long table of "If  [86] = "A-G" then text = "A-G" elseif [152] = DED then text = "DED" and so on for all cases, but that will be a large if line!


Edited by Martin1454
Link to comment
Share on other sites

Hi Bailey,

How would I manage to get say the Chaff and Flare values on one button as you have in your post a couple up from this post;

image.png

I would love to be able to do this for a lot of the values for my F/A-18C, Chaff and Flare being one combined set, and perhaps Fuel. I have the value for the value of Fuel Remaining, but not sure how you have done it with say the    'Fuel LBS and then the comma'd value underneath. Obviously there is significant amount of data I could display in combined formats as you have done

Again, I do not mean to sound stupid, but I just need to understand it once, and then I will have it

Thank you

Toni 

Toni Carrera (Ice Rhino)

 

ThrustMaster HOTAS Warthog Throttle & A10C Stick, ThrustMaster F/A-18C Stick, ThrustMaster TFRP Pedals, ThrustMaster Cougars x 2, fitted to CubeSim USB Screens, TrackIR 4 Active LED & Cap Reflector, Stream Deck XL

Intel® Core™ i7-5820K 12 Core Processor, 32GB RAM, 1 x 500GB SSD, 2 x 256GB SSD, 1 x 1TB SSD 4 x 4TB Western Digital Mechanical. 2 x ASUS GTX 1080's SLI, ASUS 29" Ultrawide flanked by 2 x 22" IPS Monitors

Link to comment
Share on other sites

8 hours ago, Toni Carrera said:

Hi Bailey,

How would I manage to get say the Chaff and Flare values on one button as you have in your post a couple up from this post;

image.png

I would love to be able to do this for a lot of the values for my F/A-18C, Chaff and Flare being one combined set, and perhaps Fuel. I have the value for the value of Fuel Remaining, but not sure how you have done it with say the    'Fuel LBS and then the comma'd value underneath. Obviously there is significant amount of data I could display in combined formats as you have done

Again, I do not mean to sound stupid, but I just need to understand it once, and then I will have it

Thank you

Toni 

Np. All you need is a little more lua knowledge. Let's take the F16 lua for example (https://github.com/asherao/DCS-ExportScripts/blob/master/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua).
 

Starting on line 1076 you can see:

ExportScript.Tools.SendData(3004, "CH " .. CMDS_CH_Amount .. "\nFL " .. CMDS_FL_Amount)

 

ExportScript.Tools.SendData is the way that ExportScript uses its library to format the data to be sent to the streamdeck.

3004, is the ID that ExportScript assigns the following data

"CH " .. CMDS_CH_Amount .. "\nFL " .. CMDS_FL_Amount is the data that will be sent to the SD. Let's break it down a bit more.

It is "normal lua" so you can google all of these concepts. Anything in quotes can be considered a string. What you write is what you get. Anything not in quotes is a variable that was defined earlier in the code. The double dots are what combine the strings and the variables. Consider them as the tape that holds the two together. The "\n" is the way you tell lua that you want a NewLine. It essentially simulates the EnterKey. 

That's all there is to it! For practice, try making something like this in one of your export luas. I haven't tried this ingame, but it will get you used to the concepts. Take a look at some of the other luas like the hind and mossie to see these kinds of tiles in action. Keep the questions coming!
 

local testNumber
testNumber = 12345
ExportScript.Tools.SendData(9999, "TEST\n" .. testNumber)
  • Like 2
Link to comment
Share on other sites

I recently bought a Stream Deck (SD) XL to use with DCS. I programmed a bunch of different profiles and folders of SD buttons using the Stream Deck DCS Interface and DCS Exports shared by Charles Tyler, but the DCS Interface and Exports don't work for controlling simulation controls like shortcuts to exterior and cockpit views, show/hide flight controls, show/hide Pilot, show/hide flight stick, auto-start, active pause, view briefing, view rearm/refuel window, and communication shortcuts like calling the ball, salute, RTB, rejoin, cover me, etc. I am terrible about remembering the dozens of keyboard shortcuts for all of the DCS Control Settings, so I programmed all of these sim controls and a lot more as Stream Deck hot keys mirrored to the keyboard shortcuts in DCS Control Settings, but none of them are working in DCS. 

However all of the Stream Deck buttons that I programmed with the much more complex DCS Interface plug-in using DCS Exports scripts are working beautifully, so it's clear that my Stream Deck is being recognized by DCS, however whenever I use my Stream Deck buttons as simple hot keys aka keyboard shortcuts, which is basically just a keyboard emulator, DCS doesn't recognize any of them. I know that the hot keys are set up correctly because I opened up MS Word and pressed all the SD hot keys and they typed the characters that I had set up for each hot key. The hot keys also work perfectly as keyboard shortcuts in other apps like MSFS 2020.

At first I thought the issue might have been due to modifiers like left shift and right shift, etc., so I programmed my SD hot keys as single characters like single letters and numbers without any modifiers and I changed the corresponding keyboard shortcuts in DCS Control Settings to match the single characters that I had programmed as hot keys in the Stream Deck app, but still none of the hot keys worked in DCS.

I would just use the Stream Deck DCS Interface/DCS Exports scripts for programming all of the DCS functions that I want on my Stream Deck, but DCS doesn't have the necessary device ID's and DCS ID's for all the sim controls that I listed above, which are needed to use Stream Deck DCS Interface/DCS Exports scripts. Stream Deck Interface/DCS Exports scripts are only good for programming Stream Deck buttons to control things in the aircraft that have a physical input like a button, switch, lever, or flight control. 

So far I've tried every fix that I could find on this message board and elsewhere for the issue I'm having with SD hot keys not working in DCS. I've tried using my Stream Deck hot keys when I was running DCS as administrator and I've tried running DCS not as admin. I've tried running the Stream Deck application as admin and not as admin. 

I'm not sure if it matters, but I do have Voice Attack, VAICOM, SRS, DCS Bios, and TacView installed on my PC, as well the Stream Deck DCS Interface and DCS Exports plug-ins. Everything else is working fine, except for Stream Deck Hot Keys only in DCS. 

Does anyone have any suggested fixes that I haven't tried yet? 

Link to comment
Share on other sites

9 hours ago, CrashAlot said:

I recently bought a Stream Deck (SD) XL to use with DCS. I programmed a bunch of different profiles and folders of SD buttons using the Stream Deck DCS Interface and DCS Exports shared by Charles Tyler, but the DCS Interface and Exports don't work for controlling simulation controls like shortcuts to exterior and cockpit views, show/hide flight controls, show/hide Pilot, show/hide flight stick, auto-start, active pause, view briefing, view rearm/refuel window, and communication shortcuts like calling the ball, salute, RTB, rejoin, cover me, etc. I am terrible about remembering the dozens of keyboard shortcuts for all of the DCS Control Settings, so I programmed all of these sim controls and a lot more as Stream Deck hot keys mirrored to the keyboard shortcuts in DCS Control Settings, but none of them are working in DCS. 

However all of the Stream Deck buttons that I programmed with the much more complex DCS Interface plug-in using DCS Exports scripts are working beautifully, so it's clear that my Stream Deck is being recognized by DCS, however whenever I use my Stream Deck buttons as simple hot keys aka keyboard shortcuts, which is basically just a keyboard emulator, DCS doesn't recognize any of them. I know that the hot keys are set up correctly because I opened up MS Word and pressed all the SD hot keys and they typed the characters that I had set up for each hot key. The hot keys also work perfectly as keyboard shortcuts in other apps like MSFS 2020.

At first I thought the issue might have been due to modifiers like left shift and right shift, etc., so I programmed my SD hot keys as single characters like single letters and numbers without any modifiers and I changed the corresponding keyboard shortcuts in DCS Control Settings to match the single characters that I had programmed as hot keys in the Stream Deck app, but still none of the hot keys worked in DCS.

I would just use the Stream Deck DCS Interface/DCS Exports scripts for programming all of the DCS functions that I want on my Stream Deck, but DCS doesn't have the necessary device ID's and DCS ID's for all the sim controls that I listed above, which are needed to use Stream Deck DCS Interface/DCS Exports scripts. Stream Deck Interface/DCS Exports scripts are only good for programming Stream Deck buttons to control things in the aircraft that have a physical input like a button, switch, lever, or flight control. 

So far I've tried every fix that I could find on this message board and elsewhere for the issue I'm having with SD hot keys not working in DCS. I've tried using my Stream Deck hot keys when I was running DCS as administrator and I've tried running DCS not as admin. I've tried running the Stream Deck application as admin and not as admin. 

I'm not sure if it matters, but I do have Voice Attack, VAICOM, SRS, DCS Bios, and TacView installed on my PC, as well the Stream Deck DCS Interface and DCS Exports plug-ins. Everything else is working fine, except for Stream Deck Hot Keys only in DCS. 

Does anyone have any suggested fixes that I haven't tried yet? 

If you're just trying to send keystrokes via HOTKEY buttons on the SD then this sounds like a common issue that I fell foul of when I got my SD. Check that the Streamdeck software and DCS are both running in Administrator Mode. If one is and the other isn't then that seems to stop the keystrokes making their way through.


Edited by frostycab
Link to comment
Share on other sites

On 10/31/2021 at 9:41 AM, CrashAlot said:

I recently bought a Stream Deck (SD) XL to use with DCS. I programmed a bunch of different profiles and folders of SD buttons using the Stream Deck DCS Interface and DCS Exports shared by Charles Tyler, but the DCS Interface and Exports don't work for controlling simulation controls like shortcuts to exterior and cockpit views, show/hide flight controls, show/hide Pilot, show/hide flight stick, auto-start, active pause, view briefing, view rearm/refuel window, and communication shortcuts like calling the ball, salute, RTB, rejoin, cover me, etc. I am terrible about remembering the dozens of keyboard shortcuts for all of the DCS Control Settings, so I programmed all of these sim controls and a lot more as Stream Deck hot keys mirrored to the keyboard shortcuts in DCS Control Settings, but none of them are working in DCS. 

However all of the Stream Deck buttons that I programmed with the much more complex DCS Interface plug-in using DCS Exports scripts are working beautifully, so it's clear that my Stream Deck is being recognized by DCS, however whenever I use my Stream Deck buttons as simple hot keys aka keyboard shortcuts, which is basically just a keyboard emulator, DCS doesn't recognize any of them. I know that the hot keys are set up correctly because I opened up MS Word and pressed all the SD hot keys and they typed the characters that I had set up for each hot key. The hot keys also work perfectly as keyboard shortcuts in other apps like MSFS 2020.

At first I thought the issue might have been due to modifiers like left shift and right shift, etc., so I programmed my SD hot keys as single characters like single letters and numbers without any modifiers and I changed the corresponding keyboard shortcuts in DCS Control Settings to match the single characters that I had programmed as hot keys in the Stream Deck app, but still none of the hot keys worked in DCS.

I would just use the Stream Deck DCS Interface/DCS Exports scripts for programming all of the DCS functions that I want on my Stream Deck, but DCS doesn't have the necessary device ID's and DCS ID's for all the sim controls that I listed above, which are needed to use Stream Deck DCS Interface/DCS Exports scripts. Stream Deck Interface/DCS Exports scripts are only good for programming Stream Deck buttons to control things in the aircraft that have a physical input like a button, switch, lever, or flight control. 

So far I've tried every fix that I could find on this message board and elsewhere for the issue I'm having with SD hot keys not working in DCS. I've tried using my Stream Deck hot keys when I was running DCS as administrator and I've tried running DCS not as admin. I've tried running the Stream Deck application as admin and not as admin. 

I'm not sure if it matters, but I do have Voice Attack, VAICOM, SRS, DCS Bios, and TacView installed on my PC, as well the Stream Deck DCS Interface and DCS Exports plug-ins. Everything else is working fine, except for Stream Deck Hot Keys only in DCS. 

Does anyone have any suggested fixes that I haven't tried yet? 

Try this. https://forums.eagle.ru/topic/266840-cant-get-stream-deck-hotkeys-to-be-recognized-in-dcs/?do=findComment&comment=4813510

Link to comment
Share on other sites

Hi,

I'm new to all this. I tried to follow the thread but there is a lot of info there. I have downloaded the latest plug in but not sure how to install it.  I have downloaded the A10 and F16 profiles I found but I did not see any for the P-51, P47 or FW190. I did see the Mosquito profile and got that. Would love to get these working on my StreamDeck XL.

Link to comment
Share on other sites

Hi Durkin,

Did you follow Charles' excellent tutorial guides?

--------------------------------------------------

Installation and Configuration - DCS Interface for StreamDeck

Switches - DCS Interface for StreamDeck

Momentary Push-Buttons - DCS Interface for StreamDeck

Image State Change (Lamp Illumination) - DCS Interface for StreamDeck

Increment (Rotary Dials) - DCS Interface for StreamDeck

Increment (pt 2 - switches) - DCS Interface for StreamDeck

Title Text Change Settings - DCS Interface for StreamDeck

Button vs Lamp IDs (Common Mistakes) - DCS Interface for StreamDeck

DCS Interface for StreamDeck: Display Strings (JF-17 UFCP)

DCS Interface for StreamDeck (Advanced): Identifying Module Exports

If you have any particular issues, I will do my best to help. I am by no means an expert in any way shape or form, but I do have mental issues that make things like this difficult for me, but I will help you where I can

Toni

 


Edited by Toni Carrera
Removed Images

Toni Carrera (Ice Rhino)

 

ThrustMaster HOTAS Warthog Throttle & A10C Stick, ThrustMaster F/A-18C Stick, ThrustMaster TFRP Pedals, ThrustMaster Cougars x 2, fitted to CubeSim USB Screens, TrackIR 4 Active LED & Cap Reflector, Stream Deck XL

Intel® Core™ i7-5820K 12 Core Processor, 32GB RAM, 1 x 500GB SSD, 2 x 256GB SSD, 1 x 1TB SSD 4 x 4TB Western Digital Mechanical. 2 x ASUS GTX 1080's SLI, ASUS 29" Ultrawide flanked by 2 x 22" IPS Monitors

Link to comment
Share on other sites

6 hours ago, Durkin said:

Hi,

I'm new to all this. I tried to follow the thread but there is a lot of info there. I have downloaded the latest plug in but not sure how to install it.  I have downloaded the A10 and F16 profiles I found but I did not see any for the P-51, P47 or FW190. I did see the Mosquito profile and got that. Would love to get these working on my StreamDeck XL.

Here are the install instructions for the SD app. https://github.com/charlestytler/streamdeck-dcs-interface#installation

you will notice that they also point to DCS-ExportScripts install instructions within. 

Link to comment
Share on other sites

Is there a way to create profiles for user aircraft?  I'd love to create one for the Hercules.  I use it so little, just when logistics ops are needed, and would love to have all the main controls on my SDXL.  Basically I'm asking if users can create profile.lua's on their own, and if so where might I find some info?

Thanks!

Link to comment
Share on other sites

3 hours ago, harvesthunt said:

Is there a way to create profiles for user aircraft?  I'd love to create one for the Hercules.  I use it so little, just when logistics ops are needed, and would love to have all the main controls on my SDXL.  Basically I'm asking if users can create profile.lua's on their own, and if so where might I find some info?

Thanks!

Try this 

I know that people have trouble making profiles for the A4, so mileage may vary.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

Is anyone out there having issues with ExportScripts not talking to DCS even though the log file can find the airframe when you jump into sim.  My DCS comms in the stream deck checks out and can read from the game.

The only thing that fixes it is a reboot of Windows 10.  Happens intermittently.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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