Autoit-GUI, Variablen werden nicht per Tastendruck deklariert

966
Micheal K

Ich lerne immer noch, wie ich meine eigenen GUIs erstellen kann. Koda war eine große Hilfe, ich habe mich damit beschäftigt, kleine Stücke auf einmal zu lernen. Ich bin jedoch auf einen Fehler gestoßen, den ich scheinbar nicht umgehen kann. Die aktuelle GUI, an der ich gerade arbeite, ist ein einfaches Werkzeug zum Ändern der Bot-Einstellungen für ein Spiel. Diese GUI sollte 5 Schaltflächen für die Schwierigkeitsstufe und eine Liste mit Kontrollkästchen für die Anzahl der Bots enthalten.

ABER, wenn ich einen Schwierigkeitsgrad, die Botnummer und den Klick auf "Speichern" auswähle, erhalte ich diesen Fehler:

'Variable used without being declared' 

Der Fehler tritt in dieser Zeile auf (Schaltfläche botSAVE am Ende):

FileWriteLine($file2, "aiSettings.setMaxNBots " & $botnum) 

Ich dachte, die Schaltfläche 'Func numClick ()' setze diese Variable, aber offensichtlich habe ich etwas übersehen. Hoffentlich ist es eine einfache Lösung. Weiß jemand, was diesen Fehler verursachen könnte? Ich habe diese Frage in Autoitcsript-Foren gepostet, aber sie scheinen sich vor Skripten für die Spielautomation zu scheuen, so dass ich dort nicht wirklich viel Hilfe bekam.

#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form=c:\users\admin\desktop\form1.kxf $Form1 = GUICreate("BF2 Bot-Tool", 418, 499, 759, 83) GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close") GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize") GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore") $Pic1 = GUICtrlCreatePic("C:\Users\admin\Desktop\bflogo.jpg", 0, 0, 417, 233) $Settings = GUICtrlCreateTab(8, 240, 401, 249) GUICtrlSetOnEvent(-1, "SettingsChange") $Bot = GUICtrlCreateTabItem("Bots") $botSAVE = GUICtrlCreateButton("Save these changes", 220, 433, 169, 33) GUICtrlSetOnEvent(-1, "botSAVEClick") $botDEFAULT = GUICtrlCreateButton("Restore default settings", 28, 433, 169, 33) GUICtrlSetOnEvent(-1, "botDEFAULTClick") $botskill = GUICtrlCreateGroup(" Bot skill level", 28, 265, 169, 145) $skill1 = GUICtrlCreateRadio(" RECRUIT", 44, 289, 113, 17) GUICtrlSetTip(-1, "Easy opposition, a damn turkey shoot") GUICtrlSetOnEvent(-1, "skill1Click") $skill2 = GUICtrlCreateRadio(" TRAINED", 44, 313, 113, 17) GUICtrlSetTip(-1, "Default setting, opponents are deadly at close range") GUICtrlSetOnEvent(-1, "skill2Click") $skill3 = GUICtrlCreateRadio(" HARDENED", 44, 337, 113, 17) GUICtrlSetTip(-1, "Enemies are a force to be reckoned with") GUICtrlSetOnEvent(-1, "skill3Click") $skill4 = GUICtrlCreateRadio(" VETERAN", 44, 361, 113, 17) GUICtrlSetTip(-1, "Enemies are experienced, and dangerous") GUICtrlSetOnEvent(-1, "skill4Click") $skill5 = GUICtrlCreateRadio(" ELITE", 44, 385, 113, 17) GUICtrlSetTip(-1, "Crack shot opponents will strategize against you. You will not survive") GUICtrlSetOnEvent(-1, "skill5Click") GUICtrlCreateGroup("", -99, -99, 1, 1) $botnumber = GUICtrlCreateGroup(" Number of bots ", 220, 265, 169, 145) $num1 = GUICtrlCreateRadio("2", 236, 289, 25, 17) GUICtrlSetOnEvent(-1, "num1Click") $num2 = GUICtrlCreateRadio("4", 236, 313, 25, 17) GUICtrlSetOnEvent(-1, "num2Click") $num3 = GUICtrlCreateRadio("6", 236, 337, 25, 17) GUICtrlSetOnEvent(-1, "num3Click") $num4 = GUICtrlCreateRadio("8", 236, 361, 25, 17) GUICtrlSetOnEvent(-1, "num4Click") $num5 = GUICtrlCreateRadio("10", 236, 385, 33, 17) GUICtrlSetOnEvent(-1, "num5Click") $num6 = GUICtrlCreateRadio("12", 284, 289, 33, 17) GUICtrlSetOnEvent(-1, "num6Click") $num7 = GUICtrlCreateRadio("14", 284, 313, 33, 17) GUICtrlSetOnEvent(-1, "num7Click") $num8 = GUICtrlCreateRadio("16", 284, 337, 33, 17) GUICtrlSetOnEvent(-1, "num8Click") $num9 = GUICtrlCreateRadio("18", 284, 361, 33, 17) GUICtrlSetOnEvent(-1, "num9Click") $num10 = GUICtrlCreateRadio("20", 284, 385, 33, 17) GUICtrlSetOnEvent(-1, "num10Click") $num11 = GUICtrlCreateRadio("24", 340, 289, 33, 17) GUICtrlSetOnEvent(-1, "num11Click") $num12 = GUICtrlCreateRadio("28", 340, 313, 33, 17) GUICtrlSetOnEvent(-1, "num12Click") $num13 = GUICtrlCreateRadio("32", 340, 337, 33, 17) GUICtrlSetOnEvent(-1, "num13Click") $num14 = GUICtrlCreateRadio("36", 340, 361, 33, 17) GUICtrlSetOnEvent(-1, "num14Click") $num15 = GUICtrlCreateRadio("40", 340, 385, 33, 17) GUICtrlSetOnEvent(-1, "num15Click") GUICtrlCreateGroup("", -99, -99, 1, 1) $Server = GUICtrlCreateTabItem("Server") $serverDEFAULT = GUICtrlCreateButton("Restore default settings", 28, 433, 169, 33) $serverSAVE = GUICtrlCreateButton("Save these changes", 220, 433, 169, 33) GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) Opt("MustDeclareVars",1) #EndRegion ### END Koda GUI section ###  While 1 Sleep(100) WEnd   Func Form1Close() If @GUI_WINHANDLE = $Form1 Then Exit EndIf EndFunc  Func Form1Maximize() EndFunc  Func Form1Minimize() EndFunc  Func Form1Restore() EndFunc  Func num1Click() $botnum = "2" EndFunc  Func num2Click() $botnum = "4" EndFunc  Func num3Click() $botnum = "6" EndFunc  Func num4Click() $botnum = "8" EndFunc  Func num5Click() $botnum = "10" EndFunc  Func num6Click() $botnum = "12" EndFunc  Func num7Click() $botnum = "14" EndFunc  Func num8Click() $botnum = "16" EndFunc  Func num9Click() $botnum = "18" EndFunc  Func num10Click() $botnum = "20" EndFunc  Func num11Click() $botnum = "24" EndFunc  Func num12Click() $botnum = "28" EndFunc  Func num13Click() $botnum = "32" EndFunc  Func num14Click() $botnum = "36" EndFunc  Func num15Click() $botnum = "40" EndFunc  Func SettingsChange() EndFunc  Func skill1Click() $skillset = "0.1" EndFunc  Func skill2Click() $skillset = "0.3" EndFunc  Func skill3Click() $skillset = "0.6" EndFunc  Func skill4Click() $skillset = "0.8" EndFunc  Func skill5Click() $skillset = "1.0" EndFunc  Func botDEFAULTClick() EndFunc  Func botSAVEClick() Local $file = FileOpen("AIDefault.ai", 1) If $file = -1 Then MsgBox(0, "Protected file", "Please ensure that the file 'AIDefault.ai' is not set to Read Only.") exit EndIf FileWriteLine($file, "aiSettings.setNSides 2 ") FileWriteLine($file, "aiSettings.setAutoSpawnBots 1 ") FileWriteLine($file, "aiSettings.setMaxNBots 64 ") FileWriteLine($file, "aiSettings.maxBotsIncludeHumans 1") FileWriteLine($file, "aiSettings.setBotSkill 0.4 ") FileWriteLine($file, "run BotNames.ai ") FileWriteLine($file, "aiSettings.setInformationGridDimension 32") FileWriteLine($file, "run AIPathFinding.ai") FileWriteLine($file, "run AIBotChanger.ai ") FileClose($file)  $file2 = FileOpen("AIBotChanger.ai", 1) If $file2 = -1 Then MsgBox(0, "Protected file", "Please ensure that the file 'AIBotChanger.ai' is not set to Read Only.") Exit EndIf FileWriteLine($file2, "aiSettings.overrideMenuSettings 1") FileWriteLine($file2, "aiSettings.setMaxNBots " & $botnum) FileWriteLine($file2, "aiSettings.setBotSkill " & $skillset) FileWriteLine($file2, "aiSettings.maxBotsIncludeHumans 0") FileClose($file2) EndFunc  

- Wenn jemand sieht, was ich falsch gemacht habe, ODER einen Link zu einem Thema hat, das das Deklarieren von Variablen mit einem Klick beschreibt, ist die Hilfe immer willkommen. Die einzigen Themen, die ich gefunden habe, sind unglaublich vage oder weichen leicht von dem ab, was ich suche.

3
Bitte bearbeiten Sie nicht Ihre eigenen Antworten in Ihre Frage. Stellen Sie es stattdessen als separate Antwort auf und markieren Sie es (nach einiger Zeit) als akzeptiert nixda vor 10 Jahren 3

1 Antwort auf die Frage

2
Micheal K

Lösung: Ich habe mein Variablenproblem gelöst. Es scheint, dass die Variable in 'Func numClick ()' als globale Variable festgelegt werden muss. Natürlich tut es das. : P

Jedenfalls habe ich es endlich gelöst, indem ich das geändert habe:

$botnumber = "2" $skillset = "0.2"  

Zu diesem:

Global $botnumber = "2"  Global $skillset = "0.2"  EndFunc  

Habe dasselbe mit den restlichen Funktionen und jetzt funktioniert alles.