Advertisement
SemlerPDX

LoadAll Inline Including Dynamic Command Parsing

Jul 21st, 2020 (edited)
413
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 13.93 KB | None | 0 0
  1. ' Save File System Inline-Function for VoiceAttack -  Load Any/All Variables from File/List to Profile
  2. '  by SemlerPDX Mar2020 (updated Dec2020)
  3. '  VETERANS-GAMING.COM
  4. ' --Loads Variables from Text List Format into VA Variables of Appropriate Data Type (INT/DEC/TXT/BOOL)--
  5.  
  6.  
  7. Imports Microsoft.VisualBasic
  8. Imports System
  9. Imports System.Collections
  10. Imports System.Collections.Generic
  11. Imports System.Data
  12. Imports System.Drawing
  13. Imports System.Diagnostics
  14. Imports System.Globalization
  15. Imports System.Windows.Forms
  16. Imports System.Linq
  17. Imports System.Xml.Linq
  18. Imports System.Threading.Tasks
  19.  
  20. Public Class VAInline
  21.     dim decimalSeparator as string = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
  22.     dim cmdIndex as Int32
  23.     dim cmdMax as Int32 = 255
  24.     dim level as Int32
  25.     dim phrase as string
  26.     dim phrases as string
  27.     dim phraseDataCheck as string
  28.     dim phraseArray() as string
  29.     dim phrasesList() as string
  30.     dim phrasesUnique as string = ""
  31.     dim macrosUnique as string = ""
  32.     dim listenUnique as string = ""
  33.     dim toggleUnique as string = ""
  34.     dim phrasesFinal as new list(of string) ()
  35.     dim clearVariable as boolean
  36.     dim saveVariable as boolean
  37.     dim variableIndex as integer
  38.     dim commandRID as integer = 0
  39.     dim countD as integer
  40.     dim countC as integer
  41.     dim contents() as string
  42.     dim entry() as string
  43.     dim debugCheck as boolean
  44.     dim debugCount as integer = 0
  45.     dim debugColor as integer = 3
  46.     dim debugText as string = ""
  47.    
  48.    
  49.     Public Sub Main()
  50.        
  51.         'Get Live Debugging Return ID from VA
  52.         if ((VA.GetInt("AVCS_CMD_RID")) IsNot nothing)
  53.             commandRID = VA.GetInt("AVCS_CMD_RID")
  54.         end if
  55.        
  56.         if ((VA.GetText("~save_file")) IsNot nothing)
  57.            
  58.             'Clear all QCC Commands & Data variables       
  59.             if ((VA.GetInt("AVCS_QCC_COMMAND_MAX")) IsNot nothing)
  60.                 cmdMax = Convert.ToInt32(VA.GetInt("AVCS_QCC_COMMAND_MAX"))
  61.             end if
  62.             for cmdIndex = 1 to cmdMax
  63.                 VA.SetText("AVCS_QCC_DATA_MACROS_" + cmdIndex.ToString(), nothing)
  64.                 VA.SetText("AVCS_QCC_COMMAND_" + cmdIndex.ToString(), nothing)
  65.             next
  66.             for i as integer = 1 to 6
  67.                 VA.SetText("AVCS_" + vaProxy.ParseTokens("{TXT:AVCS_ACTIVE_PROFILE:CORE}").ToString() + "_PTTBUTTON_" + i.ToString(),nothing)
  68.             next
  69.             VA.SetInt("AVCS_CORE_PTT_MODE", nothing)
  70.            
  71.             'Clear all QCC Variable 'When I say' phrases
  72.             VA.SetText("AVCS_QCC_WAKE", nothing)
  73.             VA.SetText("AVCS_QCC_COMMANDS", nothing)
  74.             VA.SetText("AVCS_QCC_MACROS", nothing)
  75.             VA.SetText("AVCS_QCC_LISTEN", nothing)
  76.             VA.SetText("AVCS_QCC_LISTEN_TOGGLE", nothing)
  77.            
  78.             'Clear all VAS Passphrase Command variables
  79.             for level = 1 to 10
  80.                 VA.SetText("AVCS_VAS_PASSWORDS_LEVEL_" + level.ToString(), nothing)
  81.             next
  82.            
  83.            
  84.             'Check and Set Clear/Save Parameter Variables
  85.             if ((VA.GetBoolean("AVCS_SFS_LOAD_clear")) IsNot nothing)
  86.                 clearVariable = VA.GetBoolean("AVCS_SFS_LOAD_clear")
  87.             end if
  88.             if ((VA.GetBoolean("AVCS_SFS_LOAD_save")) IsNot nothing)
  89.                 saveVariable = VA.GetBoolean("AVCS_SFS_LOAD_save")
  90.             end if
  91.            
  92.             'Split contents of save file into single lines separated by the newline or (/n)
  93.             if (VA.GetText("~save_file").Contains(vbNewLine))
  94.                 contents = VA.GetText("~save_file").Split(new string() {Environment.NewLine},StringSplitOptions.None)
  95.             else
  96.                 contents = VA.GetText("~save_file").Split(new string() {"(/n)"},StringSplitOptions.None)
  97.             end if
  98.            
  99.             'In each line, isolate Var Name/Val via '=' and Eval entry value for data type
  100.             for each line as string in contents
  101.                 if not(line = "")
  102.                     entry = line.Split("=")
  103.                    
  104.                     if (entry(1).Contains("."))
  105.                         countD = entry(1).Split(".").Length -1
  106.                     else
  107.                         countD = 0
  108.                     end if
  109.                     if (entry(1).Contains(","))
  110.                         countC = entry(1).Split(",").Length -1
  111.                     else
  112.                         countC = 0
  113.                     end if
  114.                    
  115.                     'Use Comma and Decimal Count to check data type for casting as Int or Dec
  116.                     if ((IsNumeric(entry(1))) and (((countD <= 1) and (countC = 0)) or ((countC <= 1) and (countD = 0))))
  117.                    
  118.                         if ((entry(1).Contains (".")) or (entry(1).Contains (",")))
  119.                        
  120.                             ' Attempt to Handle International Decimal Separator
  121.                             if (decimalSeparator <> ".")
  122.                                 if (entry(1).Contains("."))
  123.                                     entry(1) = Replace(entry(1), ".", decimalSeparator)
  124.                                 end if
  125.                             end if
  126.                            
  127.                             ' Entry is a DECIMAL Type
  128.                             if ((clearVariable) and (saveVariable))
  129.                                 ' Prepare Decimal Var for SaveToProfile command, clearing from Profile completely
  130.                                 variableIndex = variableIndex + 1
  131.                                 VA.SetText("~~varType" + variableIndex.ToString(), "DEC")
  132.                                 VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  133.                             elseif (saveVariable)
  134.                                 ' Prepare Decimal Var for SaveToProfile command
  135.                                 variableIndex = variableIndex + 1
  136.                                 VA.SetText("~~varType" + variableIndex.ToString(), "DEC")
  137.                                 VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  138.                                 VA.SetText("~~varValue" + variableIndex.ToString(), entry(1))
  139.                             elseif (clearVariable)
  140.                                 ' Clear Decimal Var directly from Profile
  141.                                 VA.SetDecimal(entry(0), nothing)
  142.                             else
  143.                                 ' Load Decimal Var directly to Profile
  144.                                 VA.SetDecimal(entry(0), entry(1))
  145.                             end if
  146.                            
  147.                         else
  148.                        
  149.                             ' Entry is an INTEGER Type
  150.                             if ((clearVariable) and (saveVariable))
  151.                                 ' Prepare Integer Var for SaveToProfile command, clearing from Profile completely
  152.                                 variableIndex = variableIndex + 1
  153.                                 VA.SetText("~~varType" + variableIndex.ToString(), "INT")
  154.                                 VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  155.                             elseif (saveVariable)
  156.                                 ' Prepare Integer Var for SaveToProfile command
  157.                                 variableIndex = variableIndex + 1
  158.                                 VA.SetText("~~varType" + variableIndex.ToString(), "INT")
  159.                                 VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  160.                                 VA.SetText("~~varValue" + variableIndex.ToString(), entry(1))
  161.                             elseif (clearVariable)
  162.                                 ' Clear Integer Var directly from Profile
  163.                                 VA.SetInt(entry(0), nothing)
  164.                             else
  165.                                 ' Load Integer Var directly to Profile
  166.                                 VA.SetInt(entry(0), entry(1))
  167.                             end if
  168.                            
  169.                         end if
  170.                    
  171.                     'if entry(1) is NOT Numeric--------------------------  
  172.                     elseif ((LCase(entry(1)) = "true") or (LCase(entry(1)) = "false"))
  173.                    
  174.                         ' Entry is a BOOLEAN Type
  175.                         if ((clearVariable) and (saveVariable))
  176.                             ' Prepare Boolean Var for SaveToProfile command, clearing from Profile completely
  177.                             variableIndex = variableIndex + 1
  178.                             VA.SetText("~~varType" + variableIndex.ToString(), "BOOL")
  179.                             VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  180.                         elseif (saveVariable)
  181.                             ' Prepare Boolean Var for SaveToProfile command
  182.                             variableIndex = variableIndex + 1
  183.                             VA.SetText("~~varType" + variableIndex.ToString(), "BOOL")
  184.                             VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  185.                             VA.SetText("~~varValue" + variableIndex.ToString(), entry(1))
  186.                         elseif (clearVariable)
  187.                             ' Clear Boolean Var directly from Profile
  188.                             VA.SetBoolean(entry(0), nothing)
  189.                         else
  190.                             ' Load Boolean Var directly to Profile
  191.                             VA.SetBoolean(entry(0), entry(1))
  192.                         end if
  193.                        
  194.                     else
  195.                    
  196.                         ' Entry is a TEXT Type
  197.                         if ((clearVariable) and (saveVariable))
  198.                             ' Prepare Text Var for SaveToProfile command, clearing from Profile completely
  199.                             variableIndex = variableIndex + 1
  200.                             VA.SetText("~~varType" + variableIndex.ToString(), "TXT")
  201.                             VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  202.                         elseif (saveVariable)
  203.                             ' Prepare Text Var for SaveToProfile command
  204.                             variableIndex = variableIndex + 1
  205.                             VA.SetText("~~varType" + variableIndex.ToString(), "TXT")
  206.                             VA.SetText("~~varName" + variableIndex.ToString(), entry(0))
  207.                             VA.SetText("~~varValue" + variableIndex.ToString(), entry(1))
  208.                         elseif (clearVariable)
  209.                             ' Clear Text Var directly from Profile
  210.                             VA.SetText(entry(0), nothing)
  211.                         else
  212.                             ' Load Text Var directly to Profile
  213.                             VA.SetText(entry(0), entry(1))
  214.                         end if
  215.                        
  216.                     end if
  217.                 end if
  218.                
  219.             next 'loop around to the next entry value
  220.            
  221.             if (variableIndex > 0)
  222.                 ' Set Max Count of Vars prepared for SaveToProfile command func, execute as sub-command, wait for completion
  223.                 VA.SetInt("~~varIndex", variableIndex.ToString())
  224.                 vaProxy.Command.Execute ("f_sfs_to_profile", true, true)
  225.             end if
  226.            
  227.             'Load all QCC Commands to main phrase(s) variable           ----------CHECK IS THIS NEEDED _ DOUBLE CALL HERE AND ABOVE?! -----
  228.             if ((VA.GetInt("AVCS_QCC_COMMAND_MAX")) IsNot nothing)
  229.                 cmdMax = Convert.ToInt32(VA.GetInt("AVCS_QCC_COMMAND_MAX"))
  230.             end if
  231.            
  232.             for cmdIndex = 1 to cmdMax
  233.            
  234.                 if (((VA.GetText("AVCS_QCC_COMMAND_" + cmdIndex.ToString())) IsNot nothing) and ((VA.GetText("AVCS_QCC_DATA_COMMAND_" + cmdIndex.ToString())) IsNot nothing))
  235.                     phrases = (VA.GetText("AVCS_QCC_COMMAND_" + cmdIndex.ToString()))
  236.                     phraseArray = vaProxy.Utility.ExtractPhrases(phrases, true, true)
  237.                     for each phrase in phraseArray
  238.                         if ((not(phrase = "")) and (not(phrasesFinal.Contains(phrase))))
  239.                             phrasesFinal.Add(phrase)
  240.                             phrasesUnique = phrasesUnique + phrase + ";"
  241.                             VA.SetText(phrase, cmdIndex.ToString())
  242.                         end if
  243.                     next
  244.                 end if
  245.                
  246.                 if (((VA.GetText("AVCS_QCC_MACROS_" + cmdIndex.ToString())) IsNot nothing) and ((VA.GetText("AVCS_QCC_DATA_MACROS_" + cmdIndex.ToString())) IsNot nothing))
  247.                     phraseDataCheck = VA.GetText("AVCS_QCC_DATA_MACROS_" + cmdIndex.ToString())
  248.                     phrases = (VA.GetText("AVCS_QCC_MACROS_" + cmdIndex.ToString()))
  249.                     phraseArray = vaProxy.Utility.ExtractPhrases(phrases, true, true)
  250.                     for each phrase in phraseArray
  251.                         if ((not(phrase = "")) and (not(phrasesFinal.Contains(phrase))))
  252.                             phrasesFinal.Add(phrase)
  253.                             'Check for commands with Start/Toggle VoiceAttack listening
  254.                             if ((not(phraseDataCheck.Contains("1[(2)]VALB"))) and (not(phraseDataCheck.Contains("1[(2)]VALT"))))
  255.                                 macrosUnique = macrosUnique + phrase + ";"
  256.                             else
  257.                                 if (phraseDataCheck.Contains("1[(2)]VALB"))
  258.                                     listenUnique = listenUnique + phrase + ";"
  259.                                 elseif (phraseDataCheck.Contains("1[(2)]VALT"))
  260.                                     toggleUnique = toggleUnique + phrase + ";"
  261.                                 end if
  262.                             end if
  263.                             'Set Key Data Variable Name to Variable Name including each Quick Command Phrase
  264.                             VA.SetText(phrase, cmdIndex.ToString())
  265.                         end if
  266.                     next
  267.  
  268.                 end if
  269.             next
  270.        
  271.         end if
  272.        
  273.        
  274.         'Create Variable 'When I Say' Tokens containing all QCC phrases
  275.         if not (phrasesUnique = "")
  276.             VA.SetText("AVCS_QCC_COMMANDS", phrasesUnique)
  277.         else
  278.             VA.SetText("AVCS_QCC_COMMANDS", nothing)
  279.         end if
  280.         if not (macrosUnique = "")
  281.             VA.SetText("AVCS_QCC_MACROS", macrosUnique)
  282.         else
  283.             VA.SetText("AVCS_QCC_MACROS", nothing)
  284.         end if
  285.         if not (listenUnique = "")
  286.             VA.SetText("AVCS_QCC_LISTEN", listenUnique)
  287.         else
  288.             VA.SetText("AVCS_QCC_LISTEN", nothing)
  289.         end if
  290.         if not (toggleUnique = "")
  291.             VA.SetText("AVCS_QCC_LISTEN_TOGGLE", toggleUnique)
  292.         else
  293.             VA.SetText("AVCS_QCC_LISTEN_TOGGLE", nothing)
  294.         end if     
  295.        
  296.        
  297.         'Load all VAS Passphrase Commands to main phrase variables
  298.         for level = 1 to 10
  299.             VA.SetText("AVCS_VAS_PASSWORDS_LV_" + level.ToString(), nothing)
  300.         next
  301.        
  302.         for level = 1 to 10
  303.            
  304.             phrase = ""
  305.             phrases = ""
  306.             phrasesUnique = ""
  307.             phrasesList = nothing
  308.            
  309.             if ((VA.GetText("AVCS_VAS_PASSWORDS_LEVEL_" + level.ToString())) IsNot nothing)
  310.                 phrases = (VA.GetText("AVCS_VAS_PASSWORDS_LEVEL_" + level.ToString()))
  311.                 if (phrases.Contains("[(1)]"))
  312.                    
  313.                     phrasesList = (VA.GetText("AVCS_VAS_PASSWORDS_LEVEL_" + level.ToString()).Replace("[(1)]", "↑")).Split("↑")
  314.                     if (not(phrasesList.ToString() = ""))
  315.                        
  316.                         for each phrases as string in phrasesList
  317.                             if (not(phrases = ""))
  318.                                 phraseArray = vaProxy.Utility.ExtractPhrases(phrases, true, true)
  319.                                
  320.                                 for each phrase in phraseArray
  321.                                     if ((not(phrase = "")) and (not(phrasesFinal.Contains(phrase))))
  322.                                         phrasesFinal.Add(phrase)
  323.                                         phrasesUnique = phrasesUnique + phrase + ";"
  324.                                     elseif ((not(phrase = "")) and ((phrasesFinal.Contains(phrase))))
  325.                                         'Log Debug Error - Duplicate Passphrase Detected - note level number of base variable
  326.                                         if (debugCheck)
  327.                                             debugText = "DUPLICATE PASSPHRASE DETECTED inside Level " + level.ToString()
  328.                                             debugCount += 1
  329.                                             debugColor = 2
  330.                                             VA.SetText("~avcs_vas_debug_" + debugCount.ToString(), debugText)
  331.                                             VA.SetInt("~avcs_vas_debug_wclr_" + debugCount.ToString(), debugColor)
  332.                                         end if
  333.                                     end if
  334.                                 next
  335.                            
  336.                             end if
  337.                         next
  338.                    
  339.                     end if
  340.                
  341.                 else
  342.                    
  343.                     phraseArray = vaProxy.Utility.ExtractPhrases(phrases, true, true)
  344.                     for each phrase in phraseArray
  345.                         if ((not(phrase = "")) and (not(phrasesFinal.Contains(phrase))))
  346.                             phrasesFinal.Add(phrase)
  347.                             phrasesUnique = phrasesUnique + phrase + ";"
  348.                         elseif ((not(phrase = "")) and ((phrasesFinal.Contains(phrase))))
  349.                             'Log Debug Error - Duplicate Passphrase Detected - note level number of base variable
  350.                             if (debugCheck)
  351.                                 debugText = "DUPLICATE PASSPHRASE DETECTED inside Level " + level.ToString()
  352.                                 debugCount += 1
  353.                                 debugColor = 2
  354.                                 VA.SetText("~avcs_vas_debug_" + debugCount.ToString(), debugText)
  355.                                 VA.SetInt("~avcs_vas_debug_wclr_" + debugCount.ToString(), debugColor)
  356.                             end if
  357.                         end if
  358.                     next
  359.                
  360.                 end if
  361.                
  362.                 if (not(phrasesUnique = ""))
  363.                     'Create Level Based Variables for 'When I Say' Tokens containing all VAS phrases
  364.                     VA.SetText("AVCS_VAS_PASSWORDS_LV_" + level.ToString(), phrasesUnique)
  365.                 end if
  366.            
  367.             end if
  368.         next
  369.        
  370.        
  371.         'Increment and Return Live Debugging RID to VA
  372.         if (commandRID > 0)
  373.             commandRID = commandRID + 234
  374.             VA.SetInt("AVCS_CMD_RID", commandRID)
  375.         end if
  376.    
  377.     End Sub
  378. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement