Page 1 of 1

ImageSearch and errorlevel

Posted: 12 May 2018, 18:39
by donaldthejohn
When I run this, autohotkey says "ELSE with no matching IF" and points to line 13. Tried chaning bits of code here and there, probably something simple im missing, but can't find it.
Code:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

F4::
Loop
{
ImageSearch, ImageX, ImageY, 0, 0, 1920, 1080, D:\Main\etc\etc\ahk\Sword_Active.PNG
if (errorlevel = 1)
sleep 100
send, 1
else if (errorlevel = 2)
msgbox, cant search
else if (errorlevel = 0)
continue
sleep 100
click
}
F5::ExitApp

Re: ImageSearch and errorlevel

Posted: 12 May 2018, 18:50
by swagfag
this is what your code looks like to the interpreter:

Code: Select all

F4::
	Loop
	{
		ImageSearch, ImageX, ImageY, 0, 0, 1920, 1080, D:\Main\etc\etc\ahk\Sword_Active.PNG
		
		if (errorlevel = 1)
		{
			sleep 100
		}

		send, 1
		
		else if (errorlevel = 2) ; this has no matching if
		{
			msgbox, cant search
		}

		else if (errorlevel = 0) ; this doesnt either
		{
			continue
		}

		sleep 100
		click
	}
; also, hotkey Return statement missing, unless of course you intended it that way

F5::ExitApp
tl;dr avoing getting into the habit of writing braceless code

Re: ImageSearch and errorlevel

Posted: 12 May 2018, 19:26
by donaldthejohn
Thanks for the help!
I got the error with some of the code manipulations that a statement has "no matching if" and i'm not certain on what that means. Also, what would be the purpose of a return.
I'm a noob at coding!

Re: ImageSearch and errorlevel

Posted: 13 May 2018, 03:47
by swagfag
donaldthejohn wrote:what would be the purpose of a return.
u press F4, code starts executing top to bottom. if u dont have a Return at the end of the F4 hotkey, the next thing to be executed is the F5 hotkey, which will shutdown your script. in your particular case, its not of great relevance whether u have a return or not, since youll never break out of your neverending loop(thats another can of worms in not opening)

'no matching if' means u cant have standalone else or else if statements in your script, ie there cant be any commands/statements in between as is the case here:

Code: Select all

if (errorlevel = 1)
		{
			sleep 100
		}

		send, 1 ; no bueno
		; comments or whitespace is allowed
		else if (errorlevel = 2)
		{
			msgbox, cant search
		}

Re: ImageSearch and errorlevel

Posted: 13 May 2018, 04:01
by Nwb
Hey bud,

Use braces or the interpreter will assume only the first line is part of the executing sequence under the statement.
Like so:

Code: Select all

if (errorlevel = 1) {
    sleep 100
    send, 1
}
Since you didn't put braces, only sleep 100 was under the statement. So send,1 was outside and would have always been executed regardless of whether the if was passed. If you want it to work like that, then you must mention send, 1 after the else's. Since you put it before the else's there was no connection between the if else's and first if therefore you got that message.

Cheers! :D

Re: ImageSearch and errorlevel

Posted: 13 May 2018, 08:38
by donaldthejohn
Okay i've read this and am able to make sense of it, or believe i am, i had to change the code to a PixelGetColor since an image would be changing. I get the "else with no matching if" at line 19, or the else after "Msgbox, color not found". I'm not seeing a command or case inbetween similar to the "send, 1".

Code: Select all

F4::
	Loop {
		
		PixelGetColor, SwordActive, 883, 1017
		if (ErrorLevel) {
			Msgbox, there is a problem
		}

		else {
			PixelSearch, ColorX, ColorY, 0, 0, 1920, 1080, %SwordActive%
			if (ErrorLevel) {
				Msgbox, color not found
			{
			else {
				Continue
			}
		}

		Sleep 100
		Click
	}

F5::Pause

Re: ImageSearch and errorlevel  Topic is solved

Posted: 13 May 2018, 09:53
by Nwb
donaldthejohn wrote:Okay i've read this and am able to make sense of it, or believe i am, i had to change the code to a PixelGetColor since an image would be changing. I get the "else with no matching if" at line 19, or the else after "Msgbox, color not found". I'm not seeing a command or case inbetween similar to the "send, 1".

Code: Select all

F4::
	Loop {
		
		PixelGetColor, SwordActive, 883, 1017
		if (ErrorLevel) {
			Msgbox, there is a problem
		}

		else {
			PixelSearch, ColorX, ColorY, 0, 0, 1920, 1080, %SwordActive%
			if (ErrorLevel) {
				Msgbox, color not found
			{
			else {
				Continue
			}
		}

		Sleep 100
		Click
	}

F5::Pause
Hey bud,

Everything was correct! You had just replaced the closing brace by an opening brace by mistake, after the if and before the faulty else. Hope that clears out why that dialogue was popping up.

Try this:

Code: Select all

F4::
	Loop {
		
		PixelGetColor, SwordActive, 883, 1017
		if (ErrorLevel) {
			Msgbox, there is a problem
		}

		else {
			PixelSearch, ColorX, ColorY, 0, 0, 1920, 1080, %SwordActive%
			if (ErrorLevel) {
				Msgbox, color not found
			}
			else {
				Continue
			}
		}

		Sleep 100
		Click
	}

F5::Pause
Cheers! :D

Re: ImageSearch and errorlevel

Posted: 13 May 2018, 13:58
by donaldthejohn
Oh my lord, thanks for that. I really didn't think that was a problem, i usually am good with brackets when i use them. Thanks guys.