Автор Тема: Ошибка при использовании массива  (Прочитано 2454 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kornerupin [?]

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

Line 76

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

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

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


Код: AutoIt [Выделить]
If Not @error Then
   $2Fail = 0
   $fail[$1Fail][$2Fail] = $a
   $2Fail = 1
   $fail[$1Fail][$2Fail] = $b
   $1Fail = $1Fail + 1
EndIf



Вот весь код:

Код: AutoIt [Выделить]
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


Русское сообщество AutoIt

Ошибка при использовании массива
« Отправлен: Декабрь 04, 2012, 18:06:17 »

Оффлайн C2H5OH [?]

  • Знаю я тут одно место с офигенными циркулями...
  • AutoIt Гуру
  • *****
  • Сообщений: 1473
  • Репутация: 332
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Ошибка при использовании массива
« Ответ #1, Отправлен: Декабрь 04, 2012, 19:44:19 »
Где тебя учили программированию?!  :poke:
Скрипт твой абсолютно нечитабельный! Потому ты и запутался.
А ошибка у тебя вот тут
Код: AutoIt [Выделить]
For $i = 0 To 99
    ToolTip($i,0,0)
Next
MsgBox(0,"", "$i="&$i)

Рано или поздно все станет понятно, все станет на свои места и выстроится в единую красивую схему, как кружева. Станет понятно, зачем все было нужно, потому что все будет правильно.

Оффлайн DarWiM [?]

  • Продвинутый
  • ***
  • Сообщений: 527
  • Репутация: 90
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Ошибка при использовании массива
« Ответ #2, Отправлен: Декабрь 04, 2012, 20:15:58 »
OffTopicКажется, что код взят у кого-то

Русское сообщество AutoIt

Re: Ошибка при использовании массива
« Ответ #2 Отправлен: Декабрь 04, 2012, 20:15:58 »

Оффлайн beve [?]

  • Осваивающий
  • **
  • Сообщений: 104
  • Репутация: 30
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Ошибка при использовании массива
« Ответ #3, Отправлен: Декабрь 04, 2012, 20:21:49 »
У тебя ошибка вот где:
Думаю ты хотел, чтобы после обработки функции:
Код: AutoIt [Выделить]
$15coord = PixelSearch ( $x15, $y15, $x20, $y20, 0xFFD500,15)

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

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

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

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

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: Ошибка при использовании массива
« Ответ #4 Отправлен: Декабрь 04, 2012, 21:36:35 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
3788 Просмотров
Последний ответ Январь 09, 2010, 01:45:27
от voody
4 Ответов
4190 Просмотров
Последний ответ Февраль 10, 2010, 20:41:02
от CreatoR
38 Ответов
12723 Просмотров
Последний ответ Август 27, 2011, 15:09:50
от Zalman1980
0 Ответов
1911 Просмотров
Последний ответ Август 26, 2011, 21:09:41
от Kaster
9 Ответов
3859 Просмотров
Последний ответ Март 06, 2013, 19:49:11
от viter
2 Ответов
2749 Просмотров
Последний ответ Апрель 14, 2013, 23:22:46
от Yura-H2O
2 Ответов
2583 Просмотров
Последний ответ Май 13, 2013, 14:14:56
от Vlasssov
4 Ответов
3892 Просмотров
Последний ответ Август 21, 2013, 03:19:10
от AZJIO
2 Ответов
313 Просмотров
Последний ответ Май 14, 2018, 14:19:25
от joparezzz
2 Ответов
174 Просмотров
Последний ответ Апрель 17, 2019, 14:20:20
от Cornet