2013-09-29 61 views
1

我仍在學習如何編寫自己的GUI腳本。 Koda一直是一個很大的幫助,我一直在搞它,一次學習一點點。但是,我遇到了一個我似乎無法解決的錯誤。我正在使用的當前GUI是一個簡單的工具,用於更改遊戲的bot設置。這個gui應該有5個按鈕來設置難度,以及一些機器人複選框。Autoit GUI,變量不在按鈕上聲明

但是,當我選擇一個難度級別,機器人數量,並點擊保存我得到這個錯誤:

'Variable used without being declared' 

的錯誤是在這條線存在的(末尾botSAVE按鈕):

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

我認爲按鈕功能'Func numClick()'基於被按下的按鈕來設置這個變量,但顯然我忽略了一些東西。希望這是一個簡單的解決方案。有人看到可能導致此錯誤的原因嗎?我已經在autoitcsript論壇上發佈了這個問題,但他們似乎迴避了遊戲自動化腳本,所以我在那裏沒有得到太多的幫助。

#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("Battlefield 2 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 

- 如果任何人認爲我做了什麼錯了,還是有一個鏈接,能以按鈕點擊聲明變量的話題,幫助總是讚賞。我發現的唯一主題非常含糊,或者與我尋找的內容略有不同

回答

2

當您想要在函數外部使用變量值時,您必須將其範圍聲明爲全局。所以在你的許多函數聲明之前只需添加一行Global $botnum(可能是一個默認值)...

而且明顯與$skillset一樣。

由於您使用了Opt("MustDeclareVars", 1)而引發錯誤。但是,如果不將這些變量聲明爲全局變量,它將無法工作,因爲該值在函數中設置,但函數結束後會立即丟棄。所以當你在另一個函數中使用它們未初始化的時候,你總是會收到一個未初始化變量的默認值。

+0

設置它們爲Global解決它,非常感謝! – MHFSU