Что нового

[Ошибки] Ошибка в скрипте. Error: subscript used with non-array variable

Статус
Закрыто для дальнейших ответов.

Duff1993

Новичок
Сообщения
29
Репутация
0
Добрый день. Помогите пожалуйста найти ошибку в функции.

Код:
Func _imagesearcharea($findimage, $resultposition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance)
	If $tolerance > 0 Then $findimage = "*" & $tolerance & " " & $findimage
	$result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findimage)
	If $result[0] = "0" Then Return 0
	$array = StringSplit($result[0], "|")
	$x = Int(Number($array[2]))
	$y = Int(Number($array[3]))
	If $resultposition = 1 Then
		$x = $x + Int(Number($array[4]) / 2)
		$y = $y + Int(Number($array[5]) / 2)
	EndIf
	Return 1
EndFunc


Вот такая появляется ошибка:
1348657742-clip-45kb.jpg


Ругается на
Код:
If $result[0] = "0" Then Return 0
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Duff1993,
Добавьте строку.
Код:
;...
;$result = DllCall("ImageSearchDLL.dll"...
If Not IsArray($result) Then Return 0
If $result[0] = 0 Then Return 0
;...
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Duff1993
Ошибка возникает т.к. данная переменная не является массивом.. Если ошибка возникает постоянно (или редко - не суть) - нужно принимать меры. Например то, что написал уважаемый madmasles
 

ninio

Новичок
Сообщения
8
Репутация
0
Та же проблема но вышеуказанное не помогло-снова выдает ошибку. Что еще можно сделать?
 

ninio

Новичок
Сообщения
8
Репутация
0
При запуске выдает ошибку

Код:
If $result[0] = "0" Then Return 0
If $result^ERROR

Error : Subscript used with non-Array variable


Добавлено:
Сообщение автоматически объединено:

Ругается на это

Код:
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance, $transparency=0)
    ;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
    if not ($transparency = 0) then $findImage = "*" & $transparency & " " & $findImage
    if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
    $result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

    ; If error exit
    if $result[0]="0" then return 0

    ; Otherwise get the x,y location of the match and the size of the image to
    ; compute the centre of search
    $array = StringSplit($result[0],"|")

   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc
Func _WAITFORIMAGESEARCH($FINDIMAGE, $WAITSECS, $RESULTPOSITION, ByRef $X, ByRef $Y, $TOLERANCE)
	$WAITSECS = $WAITSECS * 1000
	$STARTTIME = TimerInit()
	While TimerDiff($STARTTIME) < $WAITSECS
		Sleep(100)
		$RESULT = _IMAGESEARCH($FINDIMAGE, $RESULTPOSITION, $X, $Y, $TOLERANCE)
		If $RESULT > 0 Then
			Return 1
		EndIf
	WEnd
	Return 0
EndFunc


Что в этом коде не так?


Добавлено:
Сообщение автоматически объединено:

Код:
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance, $transparency=0)
    ;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
    if not ($transparency = 0) then $findImage = "*" & $transparency & " " & $findImage
    if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
    $result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

    ; If error exit
    if $result[0]="0" then return 0

    ; Otherwise get the x,y location of the match and the size of the image to
    ; compute the centre of search
    $array = StringSplit($result[0],"|")

   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc
Func _WAITFORIMAGESEARCH($FINDIMAGE, $WAITSECS, $RESULTPOSITION, ByRef $X, ByRef $Y, $TOLERANCE)
	$WAITSECS = $WAITSECS * 1000
	$STARTTIME = TimerInit()
	While TimerDiff($STARTTIME) < $WAITSECS
		Sleep(100)
		$RESULT = _IMAGESEARCH($FINDIMAGE, $RESULTPOSITION, $X, $Y, $TOLERANCE)
		If $RESULT > 0 Then
			Return 1
		EndIf
	WEnd
	Return 0
EndFunc


сорь, первый раз на этом форуме
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ninio
ты опять по кругу спрашиваешь то, что написано в первом сообщении . не является переменная $result[0] частью массива. потому что нет массива. выше уже дали код проверки на существование массива
Код:
If Not IsArray($result) Then Return 0
и пояснили, что если это происходит постоянно, то значит неверно вызывается функция
Код:
$result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findimage)

либо нет этой библиотеки, либо нет прав
 

ninio

Новичок
Сообщения
8
Репутация
0
Автор темы не я, просто ошибки совпадали и по этому решил заного не создавать подобную тему.
Пользовался этой прогой пару месяцев и никаких проблем не было, ошибку начал выдавать неделью назад а у меня нет знания autoit и решил попросить о помощи.
Но если нет библоитеки тогда как оно работала неделью назад :shok: выходит нет прав?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
из темы http://autoit-script.ru/index.php?topic=12511.0
скачал архив . в нем есть эта библиотека. запустил пример. все работает без ошибок. библиотека лежит в папке со скриптом
 

ninio

Новичок
Сообщения
8
Репутация
0
пробовал эти библиотеки, тоже не помогло :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ninio,
Попробуйте поменять в функции
Код:
;..
$result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage)
If (@error) Or (Not $result[0]) Then Return 0
;...
 

ninio

Новичок
Сообщения
8
Репутация
0
спс, сменил код ошибку не выдает. Но теперь перестало работать :( тоесть кликер не работает- в начале запуска один раз кликает и перестает дальше кликать. сменил библиотеки все равно не помогло :(
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ninio
что значит один раз кликает и все?. покажи пример скрипта
 

ninio

Новичок
Сообщения
8
Репутация
0
Извини я не понял как показать пример скрипта. мне ставить вес скрипт сюда? правильно понял?
 

ninio

Новичок
Сообщения
8
Репутация
0
ну помогите нубу или скажите иди.......Каждый лучше в своем деле разве не так?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ninio [?]
Извини я не понял как показать пример скрипта. мне ставить вес скрипт сюда? правильно понял?
сам скрипт или пример , как в твоем скрипте передаются данные в функцию.
 

ninio

Новичок
Сообщения
8
Репутация
0
Скрипт сюда не вместился :(
Сообщение превышает максимально допустимую длину (50000 знаков).
может залить на хостинг?


Добавлено:
Сообщение автоматически объединено:

Вот

ссылка удалена.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ninio,
Очень похоже на то, что Вы декомпилировали чей-то скрипт и пытаетесь исправить его под свои нужды. Мы здесь очень не приветствуем декомпиляцию, поэтому тему закрываю, ссылку на скрипт удаляю,а Вам предупреждение.
 
Статус
Закрыто для дальнейших ответов.
Верх