Что нового

Ошибка при использовании массива

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

Andeangl

Новичок
Сообщения
62
Репутация
4
При использовании массива выдаёт ошибку:

Line 76

$fail[$1Fail][$2Fail] = $a
^ERROR

Error: Array variable has incorrect nuber of subscripts or subscript dimension range exceeded.

Вот фрагмент кода (на который ругается), 76 строчка это:
Код:
$fail[$1Fail][$2Fail] = $a


Код:
If Not @error Then
   $2Fail = 0
   $fail[$1Fail][$2Fail] = $a
   $2Fail = 1
   $fail[$1Fail][$2Fail] = $b
   $1Fail = $1Fail + 1
EndIf



Вот весь код:

Код:
Run("C:\Users\acer\AppData\Local\Mail.Ru\DwarChrome\dwarclient") ;запуск клиента
Sleep(9000)
MouseClick("primary", 667, 477) ;отмена загрузки обновлений
Sleep (10000)
MouseClick("primary", 485, 355) ;клик по полю с ником
Send('{ENTER}') ;Нажатие Enter, заход в игру
Sleep (5000)
MouseClick("primary", 597, 137) ;открытие окна сбора ресурсов
Sleep(2000)
Send('{F7}') ;закрытие чата
Sleep(2000)
Send('{F11}') ;выход в полноэкранный режим
Sleep(1000)
Dim $x, $y, $x15, $y15, $x20, $y20, $coord, $d, $15coord, $res, $zan, $a, $b, $time, $time1, $time2, $fail[100][2],$1Fail, $2Fail, $FatalError
;*************************************************************************************
;*************************|НЕОБХОДИМО ЗАДАТЬ ПЕРЕМЕННЫЕ: |****************************
;*************************************************************************************

$res=0xD0DFDB ;Один из пикселей ресурса который нужен (необходимо выбрать уникальный по цвету пиксель, 
;чтобы пиксель такого цвета был только один в локации (иначе просто будет тыкать в этот пиксель без смысла)
$time = 18 ;Время в секундах, которе занимает сбор ресурса (засекается с таймером)

;*************************************************************************************
;*************************| Дальше всё автоматическое |*******************************
;*************************************************************************************

   $1Fail = 0 ;    ]
			  ;     }Отвечают за координаты X,Y забракованного пикселя
   $2Fail = 0 ;    ]
      $FatalError = 0 ;Отвечает за отсутствие неверных координат
	  
   $d = 2  ;данная переменная отвечает за окно сбора ресурсов (их 4)
   $time1 = $time * 1000 + 1000 ;Минимальная задержка при начале сбора ресурса
   $time2 = $time * 1000 + 3000 ;Максимальная задержка при начале сбора ресурса
   
While (PixelGetColor(654,368)<>0xED1C24)
   
		$coord = PixelSearch ( 301, 153, 1048, 734, $res) ;Поиск пикселя заданного ресурса
If Not @error Then
$a = $coord[0]
$b = $coord[1]
;Задаётся квадрат, в котором проводится проверка чтобы ресурс не был занят
   $x15 = $a - 25
   $y15 = $b - 25
   $x20 = $a + 25
   $y20 = $b + 25
  
       $15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD500,15) ;Поиск вокруг найденной точки пикселей жёлтого цвета, 
																	 ;то есть проверка чтобы ресурс не был занят
	     If @error Then
			For $1Fail=0 To 99
			   For $2Fail = 0 To 1
				  If (($a=$fail[$1Fail][$2Fail]) Or ($b=$fail[$1Fail][$2Fail])) Then
					 $FatalError = $FatalError + 1
				  EndIf
			   Next
			Next
Proverka ()
   If $FatalError = 0 Then
	  ;Жмем на $res
	  Sleep(100)
	  MouseClick("left", $a, $b,2) 
	  Sleep(1000)
   Else
     Search()
;Ожидание сбора ресурса
Sleep(Random($time1, $time2))

Proverka ()

EndIf
EndIf

If Not @error Then
   $2Fail = 0
   $fail[$1Fail][$2Fail] = $a
   $2Fail = 1
   $fail[$1Fail][$2Fail] = $b
   $1Fail = $1Fail + 1
EndIf

;Смена квадрата для сбора ресурсов, если ресурс не обнаружен
While @error
   Search()
WEnd

;Ошибочный скрипт, при получении занозы - теоретически идёт ожидание 3 часа, пока сама пройдёт, 
;потом заход в рюкзак, одевание инструмента, выход в окно сбора ресурсов "Охоты"
		 If PixelGetColor(71, 180) = 0x459105 Then
			   While PixelGetColor(71, 180) = 0x459105
				
					 Sleep(5000)
					 
			   WEnd
		 EndIf 

If PixelGetColor(786, 432) = 0xFE9359 Then
   MouseClick("primary", 679, 465)
   Sleep(100)
   MouseClick("primary", 481, 25)
   Sleep(100)
   MouseClick("primary", 720, 130)
   Sleep(100)
   MouseClick("primary", 479, 213)
   Sleep(100)
   MouseClick("primary", 596, 36)
   Sleep(100)
EndIf
;Конец скрипта для занозы

;При нападении - ошибочный скрипт (удары вообще не работают в том виде в котором должны, удары проходят из-за зацикленного 
;нажатия в определённую точку, чтобы можно было воевать с помощью "Горячих клавиш", кроме того эти самые "Горячие клавиши" 
;обязательно нужно включить в "Анкете" персонажа.
If PixelGetColor(716, 305)=0xF8DEA4 Then ;Проверка что напали
   Sleep(3000)
MouseClick("primary", 482, 319) ;То самое нажатие в определённую точку, которое интерпретируется как удар
While (PixelGetColor(516, 385)<>((0x639500) Or (0xA90000)))  ; Выполнение до тех пор, пока не будет окна "Победа" или "Поражние"
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)

;Теоретически - завершение боя, опять же не работает - должно в случа если ты умер воскрешаться на Центральной Площади, 
;если жив - возвращаться в режим "Охоты".
If PixelGetColor(516, 385) = 0xA90000 Then
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
If PixelGetColor(516, 481) = 0x639500 Then
   MouseClick("primary", 594, 33)
EndIf
;Конец завершения боя
EndIf
EndIf

WEnd



Func Proverka ()
    ;Проверка чтобы не выскакивали ошибки
  If PixelGetColor(756, 432) = 0xFF0000 Then
   MouseClick("primary", 671, 465)
   Sleep(100)
EndIf

If PixelGetColor(725, 250) = 0xB70000 Then
   MouseClick("primary", 683, 497)
   Sleep(100)
EndIf

If PixelGetColor(729, 434) = 0xFF0000 Then
   MouseClick("primary", 675, 462)
   Sleep(100)
EndIf

If PixelGetColor(774, 433) = 0xFF0000 Then
   MouseClick("primary", 674, 464)
   Sleep(100)
EndIf

EndFunc

Func Obnulenie ()
   $FatalError = 0
   For $1Fail=0 To 99
	  For $2Fail = 0 To 1
		 $fail[$1Fail][$2Fail]=0
	  Next
   Next
   
EndFunc

Func Search()
   If $d=1 Then
	  MouseClick("primary", 689, 108)
	  Sleep(Random(500, 750))
		 Obnulenie ()
   EndIf
   If $d=2 Then
	  MouseClick("primary", 696, 129)
	  Sleep(Random(500, 750))
		 Obnulenie ()
   EndIf
   If $d=3 Then
	  MouseClick("primary", 632, 130)
	  Sleep(Random(500, 750))
		 Obnulenie ()
   EndIf
   If $d=4 Then
	  MouseClick("primary", 635, 107)
	  Sleep(Random(1500, 2500))
		 Obnulenie ()
   EndIf
   if $d < 4 then 
	  $d = $d + 1 
   else 
	  $d = 1 
   
		 Proverka ()

   EndIf
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Где тебя учили программированию?! :blum:oke:
Скрипт твой абсолютно нечитабельный! Потому ты и запутался.
А ошибка у тебя вот тут
Код:
For $i = 0 To 99
	ToolTip($i,0,0)
Next
MsgBox(0,"", "$i="&$i)
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
OffTopic:
Кажется, что код взят у кого-то
 

beve

Осваивающий
Сообщения
104
Репутация
31
У тебя ошибка вот где:
Думаю ты хотел, чтобы после обработки функции:
Код:
$15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD500,15)

если будет @error то:
Код:
If @error Then
		For $1Fail=0 To 99
			For $2Fail = 0 To 1

а если не будет ошибки, то:
Код:
If Not @error Then
$2Fail = 0
$fail[$1Fail][$2Fail] = $a
$2Fail = 1
$fail[$1Fail][$2Fail] = $b
$1Fail = $1Fail + 1
EndIf

но на самом деле у тебя выйдет, что этот участок кода:
Код:
If Not @error Then
$2Fail = 0
$fail[$1Fail][$2Fail] = $a
$2Fail = 1
$fail[$1Fail][$2Fail] = $b
$1Fail = $1Fail + 1
EndIf

будет выполняться всегда, так как "Not @Error" будет и после выполнения, например функциии MouseClick (которая у тебя обрабатывается при ошибке выше)..., в результате значение в переменной $1Fail выйдет за пределы допустимого (для массива).
 
Статус
Закрыто для дальнейших ответов.
Верх