Что нового

Не могу найти причину ошибки: subscript used with non-array variable

Andeangl

Новичок
Сообщения
62
Репутация
4
$x = $koord[0]
$x=$koord^ERROR

Error:Subscript used with non-Array variable.

Не могу понять причину ошибки - перед этим также использовалась данная функция, без проблем!


Код:
Dim $x, $y, $x15, $y15, $x20, $y20, $coord, $d, $res, $zan, $koord
$res=0x9EFFFF

   $d = 2
     
	 
	 While 1 
$coord = PixelSearch ( 301, 153, 1048, 734, $res) ;1
   If Not @error Then
$x = $coord[0]
$y = $coord[1]
;Проверка квадрата вокруг точки, на наличие оттенка опр. цвета
   $x15 = $x - 15
   $y15 = $y - 15
   $x20 = $x + 15
   $y20 = $y + 15
   EndIf

$koord = PixelSearch ($x15, $y15, $x20, $y20, 0xFFD700)

   If @error Then
			$x = $koord[0]
			$y = $koord[1]
   EndIf
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Andeangl,
A так?
Код:
$koord = PixelSearch ($x15, $y15, $x20, $y20, 0xFFD700)
If Not @error Then
	$x = $koord[0]
	$y = $koord[1]
EndIf
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
Нет, все равно выдаёт ту же ошибку =(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Andeangl [?]
Нет, все равно выдаёт ту же ошибку
A так?
Код:
$coord = PixelSearch(301, 153, 1048, 734, $res)
If Not @error Then
	$x = $coord[0]
	$y = $coord[1]
	$x15 = $x - 15
	$y15 = $y - 15
	$x20 = $x + 15
	$y20 = $y + 15
	$koord = PixelSearch($x15, $y15, $x20, $y20, 0xFFD700)
	If Not @error Then
		$x = $koord[0]
		$y = $koord[1]
	EndIf
EndIf
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Andeangl
А что будет, если убрать переменную $koord из данной строки Dim?
Исчезнет ошибка?

Код:
Dim $x, $y, $x15, $y15, $x20, $y20, $coord, $d, $res, $zan, $koord



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

И ещё... Вижу While, но не вижу WEnd... Это ошибка или указана только часть скрипта?
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
madmasles Не знаю, выдаёт ошибку =((( Могу отправить Вам скрипт полностью в ПМ? Не хочу выкладывать его - это аквтокликер, не думаю что админы игры для которой я его пишу будут рады о нём узнать =) А информация имеет свойство просачиваться и доходить до "адресата" самыми изощрёнными путями =)

snoitaleR Убрал, ничего не изменилось =( Там вторая такая же функция, она работает корректно. Да, это часть скрипта =)
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
Код:
While (PixelGetColor(654,368)<>0xED1C24)
Dim $x, $y, $x15, $y15, $x20, $y20, $coord, $d, $15coord, $res, $zan, $a, $b
$res=0x9EFFFF

   $d = 2
     
	 
	 While 1 
		$coord = PixelSearch ( 301, 153, 1048, 734, $res) ;1
If Not @error Then
$a = $coord[0]
$b = $coord[1]
;Проверка квадрата вокруг точки, на наличие помехи
   $x15 = $a - 15
   $y15 = $b - 15
   $x20 = $a + 15
   $y20 = $b + 15
  
       $15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD700)
	     If @error Then
			$x = $15coord[0]
			$y = $15coord[1]
		 EndIf
EndIf
	 If $a=$x Then 
	  ;Жмем на $res
   Sleep(100)
MouseClick("left", $x, $y,2) 
Sleep(1000)
  If PixelGetColor(649, 420) = 0xFFE1BA Then
   MouseClick("primary", 673, 464)
   Sleep(100)
EndIf
If PixelGetColor(853, 291) = 0x7A0000 Then
   MouseClick("primary", 674, 517)
   Sleep(100)
EndIf

Sleep(Random(21000, 24000))

If PixelGetColor(649, 420) = 0xFFE1BA Then
   MouseClick("primary", 673, 464)
   Sleep(100)
EndIf
If PixelGetColor(853, 291) = 0x7A0000 Then
   MouseClick("primary", 674, 517)
   Sleep(100)
EndIf

EndIf
While @error
 If $d=1 Then
 MouseClick("primary", 631, 108)
 Sleep(Random(500, 750))
 EndIf
  If $d=2 Then
 MouseClick("primary", 689, 109)
Sleep(Random(500, 750))
 EndIf
  If $d=3 Then
 MouseClick("primary", 625, 130)
Sleep(Random(500, 750))
 EndIf
  If $d=4 Then
   MouseClick("primary", 685, 130)
Sleep(Random(1500, 2500))
 EndIf
 if $d < 4 then 
$d = $d + 1 
else 
   $d = 1 
EndIf
WEnd
;Если нельзя временно добывать
			If PixelGetColor(71, 180) = 0x459105 Then
   While PixelGetColor(71, 180) = 0x459105
       Sleep(5000)
   WEnd
			EndIf 
;Если нападают
If PixelGetColor(716, 305)=0xF8DEA4 Then
   Sleep(3000)
MouseClick("primary", 516, 308)
While PixelGetColor(365, 538)<>0xA60000
Sleep(500)
Send('{right}')
Sleep(Random(2000,3500))
Send('{right}')
Sleep(Random(2000,3500))
Send('{right}')
Sleep(Random(2000,3500))
Send('{down}')
Sleep(Random(2000,3500))
WEnd
Sleep(1000)

MouseClick("primary", 537, 134)
Sleep(Random(500,1000)
MouseClick("primary", 679, 243)
Sleep(Random(500,1000)
MouseClick("primary", 678, 261)
Sleep(Random(500,1000)
MouseClick("primary", 682, 496)
Sleep(Random(500,1000)
MouseClick("primary", 1137, 156)
Sleep(Random(500,1000)
MouseClick("primary", 596, 35)
EndIf

WEnd
WEnd


Вот полностью весь скрипт, проблема такая: курсор уходит в верхний левый угол и там спит. Видимо это из-за того, что я неверно вложил одну функцию PixelSearch в другую =( Помогите пожалуйста!

Если я понял верно, то проблема с привязкой @Error к определённому PixelSearch
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
$15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD700)
If @error Then
    $x = $15coord[0]
    $y = $15coord[1]
EndIf


Ничего подозрительного не видите?
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
То есть у меня невыполнимая операция? Задаются координаты после проверки что их нет?


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

Код:
While (PixelGetColor(654,368)<>0xED1C24)

Dim $x, $y, $x15, $y15, $x20, $y20, $coord, $d, $15coord, $res, $zan, $a, $b
;Необходимо задать!!!
$res=0x9EFFFF ;Рес ;1

   $d = 2
     
	 
	 While 1 
		$coord = PixelSearch ( 301, 153, 1048, 734, $res) ;1
If Not @error Then
$a = $coord[0]
$b = $coord[1]
;Проверка квадрата вокруг точки, на наличие других
   $x15 = $a - 15
   $y15 = $b - 15
   $x20 = $a + 15
   $y20 = $b + 15
  
       $15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD700)
	     If @error Then
	  ;Жмем на $res
   Sleep(100)
MouseClick("left", $a, $b,2) 
Sleep(1000)
  If PixelGetColor(649, 420) = 0xFFE1BA Then
   MouseClick("primary", 673, 464)
   Sleep(100)
EndIf
If PixelGetColor(853, 291) = 0x7A0000 Then
   MouseClick("primary", 674, 517)
   Sleep(100)
EndIf

Sleep(Random(21000, 24000))

If PixelGetColor(649, 420) = 0xFFE1BA Then
   MouseClick("primary", 673, 464)
   Sleep(100)
EndIf
If PixelGetColor(853, 291) = 0x7A0000 Then
   MouseClick("primary", 674, 517)
   Sleep(100)
EndIf
EndIf
EndIf
While @error
 If $d=1 Then
 MouseClick("primary", 631, 108)
 Sleep(Random(500, 750))
 EndIf
  If $d=2 Then
 MouseClick("primary", 689, 109)
Sleep(Random(500, 750))
 EndIf
  If $d=3 Then
 MouseClick("primary", 625, 130)
Sleep(Random(500, 750))
 EndIf
  If $d=4 Then
   MouseClick("primary", 685, 130)
Sleep(Random(1500, 2500))
 EndIf
 if $d < 4 then 
$d = $d + 1 
else 
   $d = 1 
EndIf
WEnd
;Если заноза
			If PixelGetColor(71, 180) = 0x459105 Then
   While PixelGetColor(71, 180) = 0x459105
       Sleep(5000)
   WEnd
			EndIf 
;Если нападают
If PixelGetColor(716, 305)=0xF8DEA4 Then
   Sleep(3000)
MouseClick("primary", 516, 308)
While PixelGetColor(365, 538)<>0xA60000
Sleep(500)
Send('{right}')
Sleep(Random(2000,3500))
Send('{right}')
Sleep(Random(2000,3500))
Send('{right}')
Sleep(Random(2000,3500))
Send('{down}')
Sleep(Random(2000,3500))
WEnd
Sleep(1000)

MouseClick("primary", 537, 134)
Sleep(Random(500,1000)
MouseClick("primary", 679, 243)
Sleep(Random(500,1000)
MouseClick("primary", 678, 261)
Sleep(Random(500,1000)
MouseClick("primary", 682, 496)
Sleep(Random(500,1000)
MouseClick("primary", 1137, 156)
Sleep(Random(500,1000)
MouseClick("primary", 596, 35)
EndIf

WEnd
WEnd


Переделал, вроде работает =) Сейчас буду проверять, насколько корректно =) По ресурсу ткнул, но нужно проверить чтобы он проверял, занят ресурс или нет =)

Кстати, скажите пожалуйста, можно ли данный скрипт вычислить програмно? Мои познания говорят что нет, т.к. это:
1) Автокликер
2) Рандомные задержки не позволяют заметить закономерность в тайме при сборе ресурсов (хотя в принципе это можно реализовать, но тогда могут много обычных игроков попасться)


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

Спрашиваю в каких целях - если нельзя, то я без проблем выложу его в ботах на соответствующем подразделе Вашего форума, с указанием для чего, зачем, как и почему =) Мне не жалко, но не хотелось бы чтобы из-за этого админы усовершенствовали свою систему антибота и поломали мне перса =)


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

Всё получилось, долго не мог понять, почему иногда все равно начинался сбор ресурса занятого, если стоит проверка на наличие индикатора "занятости" ресурса, оказалось, что этот индикатор немного прозрачный, и на его цвет влияет подстилающая поверхность. Поставил дополнительный параметр в поиск цвета +/-15 оттенков, всё отлично работает. Всем спасибо, хотелось бы увидеть ответ насчёт того, можно ли засечь такой скрипт (если Вам не очень трудно).
 
Верх