AutoHotKey throwing Error: Unexpected}, хотя скобки кажутся правильными

Скрипт не будет компилироваться из-за неправильных скобок после добавления оператора Else. Компилятор говорит, что виновата строка 67, и я не уверен, почему.

#NoEnv
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Pixel
SendMode Input
#SingleInstance Force
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1

^!6::
CoordMode, Pixel, Screen
CoordMode, ToolTip, Screen
CoordMode, Mouse, Screen

Click, 830, 393
Sleep 2000
Click, 678, 538
Sleep 500

Click, 840, 800
Sleep 2000
Click, 671, 974
Sleep 500


Click, 1775, 300
Sleep 2000
Click, 1643, 487
Sleep 2000

var = 0
Loop {
    ImageSearch, FoundX, FoundY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, *100 C:\Users\USER\Desktop\Folder\ImageAssets\storage4x4\image%var%.jpg

    If (ErrorLevel = 0) {
        If %var% = 0 {
            Click, %FoundX%, %FoundY%
            Sleep 50
            Click, %FoundX%, %FoundY%
            Sleep 100
            ToolTip, Refreshing Store..., %FoundX%, %FoundY%
        }

        Else {
            SoundPlay, C:\Users\USER\Desktop\Folder\SoundAssets\found.wav
            Click, %FoundX%, %FoundY%
            Sleep 50
            Click, %FoundX%, %FoundY%
            ToolTip, image%var%.jpg, %FoundX% + 10, %FoundY% + 10
            ErrorLevel := -1
            FoundX := ""
            FoundY := ""
            SearchAndPurchase()
        }
    }

    If ErrorLevel 
        ToolTip, Didn't find image%var%.jpg, 0, 25

    If var >= 10 
        var = 


     var += 1
}
Return

SearchAndPurchase(){
    Sleep 5000
    var = 0 
    Loop, 5 {
        var += 1
        Sleep 5000
        ImageSearch, FoundX, FoundY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, *100 C:\Users\USER\Desktop\Folder\ImageAssets\storage4x4\Storage4x4Store\image%var%.jpg

        If (ErrorLevel = 0) {
            SoundPlay, C:\Users\USER\Desktop\Folder\SoundAssets\chaching.wav
            Click, %FoundX%, %FoundY%
            ToolTip, $$$ image%var%.jpg $$$, %FoundX% + 10, %FoundY% + 10
            Sleep 50
            Click, %FoundX%, %FoundY%
            FoundX := ""
            FoundY := ""
        }
        If (ErrorLevel) 
            ToolTip, Couldn't purchase... 0, 75
        If (var >= 10) 
            var = 0
    }

    ToolTip, Leaving Store and refreshing market..., 0, 25
    Click, 678, 538
    Click, 678, 1043
    Click, 1643, 538
    Sleep 2000
    Click, 678, 538
    Click, 678, 1043
    Click, 1643, 538
    Sleep 2000
}


Esc:: ExitApp

Я посчитал все скобки и в коде по 7 каждого направления. Я также удалил все скобки и снова добавил их пару раз, чтобы попытаться поймать ошибку, но безуспешно. Что тут происходит?


person Efie    schedule 05.11.2019    source источник


Ответы (2)


У вас есть плавающее задание:

var = в строке 63

Фигурная скобка является неожиданной, потому что ожидает, что вы закончите фразу.

person AnnoyinC    schedule 05.11.2019
comment
Я исправил это, но, к сожалению, получаю ту же ошибку - person Efie; 06.11.2019
comment
Когда я компилирую ваш код, я получаю: ›C: \ Program Files \ AutoHotkey \ Compiler \ Ahk2Exe.exe / в C: \ Users \ Robert \ DataFiles_9 Programs_Programming \ AHK \ Someonesprogram.ahk Успешно скомпилировано:› Код выхода: 0 Время: 5.602 ... Но опять же, может быть, моей платформе нельзя доверять, см. stackoverflow.com/questions/58738870/. Вижу, после компиляции вы получаете сообщение .. Не обращайте внимания на мое сообщение. - person Robert Ilbrink; 07.11.2019

Если кто-то еще видит это с аналогичной проблемой, проверьте свои операторы if и заключите все условия в круглые скобки. В этом примере он работал после исправления (вместе с комментарием AnnoyinC) после помещения всех условий if в круглые скобки.

person Efie    schedule 06.11.2019
comment
Как правило, как вы упомянули, рекомендуется всегда использовать круглые скобки для выражений if-statement (за исключением одиночных переменных типа true / false). Однако в вашем конкретном случае происходило то, что он проверял, было ли содержимое var равно 0 {, поэтому на самом деле не было никакой начальной скобки, поскольку она использовалась как часть выражения. - person EJE; 12.11.2019