Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ronny56

Pages: [1]
1
Можно написать примерно такой сценарий с использованием функции IF_PICTURE_IN().
[spoiler]
Code: (clickermann) [Select]
WAITMS(500)

LOGCLEAR

$entry = 0 // Количество найденных изображений

//-------------------------------- Предварительное сканирование

GETSCREEN
COLORMODE(8)

IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Картинка.bmp", -1, 90)
   $entry_1_X = $_return1 // Сохраняем координаты для следующих операций
   $entry_1_y = $_return2
   LOGWRITE ("Первое совпадение найдено")
   LOGWRITE( STRCONCAT("x=", $entry_1_X) ) // Вывод в лог информации для отладки
   LOGWRITE( STRCONCAT("y=", $entry_1_y) )
   LOGWRITE (" ")
   INC($entry) // Счетчик найденных изображений увеличивается на единицу
   //
   // Координата X (горизонтальное смещение) для левого верхнего угла области поиска остается неизменной
   // Область поиска становится меньше и смещается вниз на высоту искомого изображения (10 пикселей)
   IF_PICTURE_IN ($_return1,$_return2+10, $_xmax,$_ymax, "Картинка.bmp", -1, 90)
      $entry_2_X = $_return1
      $entry_2_y = $_return2
      LOGWRITE ("Второе совпадение найдено")
      LOGWRITE( STRCONCAT("x=", $entry_2_X) )
      LOGWRITE( STRCONCAT("y=", $entry_2_y) )
      LOGWRITE (" ")
      INC($entry)
      // В этом месте (если достаточно двух совпадений) можно перейти к следующему действию сценария
      // и не терять время на поиск третьего совпадения.
      // Например оператором GOTO(label) :)
      //
      IF_PICTURE_IN ($_return1,$_return2+10, $_xmax,$_ymax, "Картинка.bmp", -1, 90)
         $entry_3_X = $_return1
         $entry_3_y = $_return2
         LOGWRITE ("Третье совпадение найдено")
         LOGWRITE( STRCONCAT("x=", $entry_3_X) )
         LOGWRITE( STRCONCAT("y=", $entry_3_y) )
         LOGWRITE (" ")
         INC($entry)
      ELSE
         LOGWRITE ("Третье совпадение не найдено")
      END_IF
      //
   ELSE
      LOGWRITE ("Второе совпадение не найдено")
   END_IF
   //
ELSE
   LOGWRITE ("Первое совпадение не найдено")
END_IF

LOGWRITE (" ")
LOGWRITE ("Всего найдено совпадений: ", $entry)

//-------------------------------- Окончательная обработка

SWITCH($entry) // Действия в зависимости от количества найденых изображений
CASE(1)
   // случай 1
CASE(2)
   // Для примера, здесь может быть код для проверки точности найденных изображений
   // ...
   //   $arr[0] = "0.bmp"
   //   $arr[1] = "1.bmp"
   //   $arr[2] = "2.bmp"
   //   $arr[3] = "3.bmp"
   //   FOR($i, $i < 4) // Переменная i - Индекс элемента массива
   //      GETSCREEN
   //      IF_PICTURE_IN (x,y, x2,y2, $arr[$i])
   //         // Действие
   //      END_IF
   //   END_CYC
   // ...
CASE(3)
   // случай 3
DEFAULT
   // случай по умолчанию
END_SWITCH


HALT
[/spoiler]
Картинка и скрипт для теста во вложении.

Теперь разберем по порядку
Code: (clickermann) [Select]
CASE(1)
   // случай 1

это то,что будет делать кликер если найдет 1 совпадение?
 случай 2,это если 2 подряд,и случай по умолчанию это если не найдет верно?

Еще,случай 1 это -6?,случай 2 -12,случай 3 -18 я верно понял?


2
Quote
вынужден не согласится на процент совпадения выставленный в 95-99 % позволит отсеять возможные изменения пары  рандомных пикселей, а вот выискивание всех возможных вариаций картинки может вылиться в увлекательное приключение поскольку искомая картинка мало того что появляется в рандомном месте так и еще и фон не статический.
Давайте рассмотрим на примере картинки http://s019.radikal.ru/i640/1407/b1/1b13236923c0.png
Попробуем установить процент совпадения 95-99%. Расчет прост.
180 / 100 * 1 = 1.8 (99% совпадения - будет проигнорирован 1 пиксель) - это не вариант
180 / 100 * 2 = 3.6 (98% совпадения - будет проигнорировано 3 пикселя) - не стабильно
...
180 / 100 * 5 = 9 (95% совпадения - будет проигнорировано 9 пикселей) - это перебор
Вот что получится если проигнорировать 5% (95% совпадения) пикселей этой картинки:
http://s015.radikal.ru/i333/1407/fd/94ebc6124f72.png Какая там цифра распознается, не подскажете? :)
Это еще повезло, что картинка такая большая, цифры вполне умещаются на поле 3x5, тогда нельзя проигнорировать даже 1 пиксель (ноль можно спутать с восьмеркой).
Цель разработчиков защиты игры в том и заключается, чтобы бот не мог точно распознать изображение, а путался в этих самых 95-99%.
Зачем нам самим себе процент неудач устанавливать?  :)
Перебор картинок работает очень быстро, тем более что их не так уж и много, мало их будет в этой задаче.
Code: (clickermann) [Select]
$arr[0] = "0.bmp"
$arr[1] = "1.bmp"
$arr[2] = "2.bmp"
$arr[3] = "3.bmp"

FOR($i, $i < 4) // Переменная i - Индекс элемента массива
   GETSCREEN
   IF_PICTURE_IN (x,y, x2,y2, $arr[$i])
      // Действие, если изображение найдено
   END_IF
END_CYC

HALT

IF_PICTURE_IN можно заменить на PXLXOR или PXLCRC.

Для тяжелых случаев, где помимо точности, критична скорость распознавания, можно использовать "двухступенчатое" распознавание изображений, т.е. за два прохода. Первый "грубый" поиск находит саму область искомой картинки, или размытые очертания изображения. В первом проходе уместно и даже обязательно применение % точности. Второй "точный" поиск запустится только по положительному результату первого поиска и будет иметь точность 100%.
А вообще, первым делом, нужно пролазить все настройки игры (все файлы настроек игры), почитать в интернете про настройку данной игры. И окажется, что можно отключить все эффекты прозрачности окон и размытости шрифтов. Или хотя бы немного их уменьшить. Да и клавиши заодно забиндить на нужные действия, чтобы мышку использовать как можно меньше и не палиться. Другими словами Clickermann'у помогать надо всемерно, тогда и он ответит точностью и скоростью. :)

можно последний абзац в виде кода,я всю голову сломал уже себе как это сделать
код выше,я так понял будет оставлять с -6,а мне надо -6х2,х3 , а это можно сделать только с сканипикчур


Насчет других сообщений,-6% там может быть только у активации,так что "время активации" в изображении не имеет значения.

3
Так чтоль те надо?

Code: (clickermann) [Select]
getscreen
colormode(8)
scanpicture($img, 0,0, $_xmax,$_ymax, "11.bmp", -1, 99)
if(arrsize($img)>2)
   lclick(249,522) // сработает если найденно 2е и более картинок
   halt
else
   ldown(743,517)
   WAITMS(50)
   lup(626,466)
   WAITMS(50)
   Keypress(#Y)
   WAITMS(50)
   UNDEFINE($img)
end_if

Определяет как Время активации -6 любую картинку вообще

4
перемещает,но не в заданом диапазоне,диапазон задал заного,всеравно,куда попало тыкает

Вот как вписать зону.

Code: (clickermann) [Select]
837,570 - Верхний левый угол
1022,677 - нижний правый


$rx = RND(837,1022)
$ry = RND(570,677)
MOVE($rx,$ry)

А теперь не анализирует текст.Так давайте сначала.Фиг с ним с перетаскиванием.Каждые 7 секунд создается 1 бижа,за это время,курсор заранее установлен уже на бижа. Кликер наводит на нее анализируется текст,где есть Время активации -6% х2,или х3 то есть , то кликер нажимает кнопку отмена,и завершает работу скрипта ,кнопка отмены(lclick(x:y) завершение работы(halt) Важно,что бы проверяло только чтобы было время активации х2,или х3,тобишь -12 и -18,а просто -6 выкидывало.Вот мой скрипт,где ошибки?
Code: (clickermann) [Select]
getscreen
colormode(8)
scanpicture($img, 0,0, $_xmax,$_ymax, "11.bmp",-1,99)
if($img>0)
   while (arrsize($img) > 0)
      $y = arrpop($img)
      $x = arrpop($img)
     lclick(249,522)
     halt
   end_cyc
else
ldown(743,517)
lup(626,466)
Keypress(#Y) 
end_if

5

неважно подряд или нет ищи количество совпадений и через arrsize вычисляй сколько раз выпало

можно поподробнее,прочитал эту статью http://crapware.aidf.org/forum/index.php?topic=319.0 мало что понял,аналог If какое преимущество у SCAN перед IF  и как найти это количество совпадений?
SCANPICTURE  выводит координаты найденных картинок в массив

соответственно arrsize разделить на 2 выдаст количество найденных картинок

Я ничего не понял как мне это поможет отсеять ненужные бижи,и оставить именно те где -12 или -18,что мне в коде то писать?

6

неважно подряд или нет ищи количество совпадений и через arrsize вычисляй сколько раз выпало

можно поподробнее,прочитал эту статью http://crapware.aidf.org/forum/index.php?topic=319.0 мало что понял,аналог If какое преимущество у SCAN перед IF  и как найти это количество совпадений?

7
Вот решение твоей проблемы, нужно числа генерировать в переменные а уж потом их использовать в нескольких местах.

Code: (clickermann) [Select]
getscreen
colormode(8)
IF_PICTURE_IN (715,165,1017,470, "4.bmp",-1,90)
   LDOWN(709,482)
   WAITMS(50)
   $rx = RND(699,506)
   $ry = RND(966,676)
   MOVE($rx,$ry)
   WAITMS(50)
   LUP($rx,$ry)
   WAITMS(50)
END_IF

перемещает,но не в заданом диапазоне,диапазон задал заного,всеравно,куда попало тыкает

8
вы похоже не осознаете что пишете в коде
Code: (clickermann) [Select]
waitms(3000)
getscreen
colormode(8)
IF_PICTURE_IN (715,165,1017,470, "4.bmp",-1,90)
ldown(709,482)    //зажать кнопку в данных координатах
move( RND(699,506), RND(966,676) )   // переместить мышку в рандомное место в заданном диапазоне
lup( RND(699,506), RND(966,676) )  // отпустить мышку в заново сгенерированном рандомном месте из указанного диапазона
END_IF
lDown(705,483)   
  lUp(683,383)
LCLICK(586 ,367)

что у вас работает не так как вы ожидаете вопрос другой для начала осознайте тот код который написали и поймите как он работает.

глупо просить подсказки по каждой мелочи не пытаясь вникнуть в результат своей работы.

Расскажу суть чего я хочу.Хочу чтобы когда определяло где есть время активации,перетаскивало эту бижу в другую клетку,(скрин ячеек) я вам скидывал,указанный диапазон и есть все эти ячейки.Я осознаю какая команда что делает.Только сейчас понял что если lup вставить такие же координаты как и в мув,то ничего не получится.И так насколько я верно понял надо вставить в LUP такие же сгенерированы координаты как и в move.Вопрос:это не переменные $return часом?

9
добавь move между ldown и lup

неважно подряд или нет ищи количество совпадений и через arrsize вычисляй сколько раз выпало

move координаты как в lup?
да, вместо того чтобы каждую непонятную мелочь спрашивать здесь откройте instructions.chm и почитайте по интересующей команде описание, там даже с примерами описано как использовать


MOVE

Синтаксис

MOVE (x, y) - перемещает курсор мышки


Параметры
x, y - координаты, в которые будет помещен курсор

 
Что я тут должен вычитать?move( RND(699,506), RND(966,676) ) пробывал,не получается,в таком случае игнорируется условие IF и выкидывается бижа тоесть
Code: (clickermann) [Select]
lDown(705,483)
  lUp(683,383)
LCLICK(586 ,367)




Код полностью
Code: (clickermann) [Select]
waitms(3000)
getscreen
colormode(8)
IF_PICTURE_IN (715,165,1017,470, "4.bmp",-1,90)
ldown(709,482)
move( RND(699,506), RND(966,676) )
lup( RND(699,506), RND(966,676) )
END_IF
lDown(705,483)
  lUp(683,383)
LCLICK(586 ,367)

10
добавь move между ldown и lup

неважно подряд или нет ищи количество совпадений и через arrsize вычисляй сколько раз выпало

move координаты как в lup?

11
ну я так понимаю они не обязательно подряд могут быть так что не поможет так что SCANPICTURE тебе в помощь, как пользоваться читай в инструкции

если -12,то подряд не будут,но если -18 то будут подряд.Еще вопрос,если находит с -12,или -18 чтобы перемещало в какую то из этих ячеек http://joxi.ru/dNLPU_3JTJDxR6X3qNc написал такой код,но не работает почему то
Code: (clickermann) [Select]
IF_PICTURE_IN (715,165,1017,470, "4.bmp",-1,90)
ldown(709,482)
lup( RND(699,506), RND(966,676) )
END_IF

12
процент совпадения поставь 90-95 %

Отлично,работает.Теперь как сделать так чтобы останавливало только где будет дважды "время активации -6%",склеить их в пеинте?

13
именно
Сделал не помогло,специально ставлю такую бижу что бы было -6,но всеравно ее выкидывает новый сделанный скрин выглядит так

14
скорее всего он не находит данную картинку изза меняющегося заднего фона
Code: (clickermann) [Select]
colormode(8)
должен помочь

Это заного сделать скрин но уже с колормод 8?

15
Вообщем понял что моя предыдущая просьба тяжело реализироваемая,по-этому переделал смысл скрипта
Вырезал текст с картинки он должен сканироваться с такой рамочки
Суть такова,курсор заранее установлен в одном и том же месте и не меняется,произведена привязка по окну.Вещи делаются бесконечно,кликеру дается 5 секунд что бы определить где есть "Время активации" а где нету,где нету он выбрасывает.Получается реализовать все кроме анализа самого текста.Мой скрипт
Code: (clickermann) [Select]
waitms(5000)
getscreen

IF_PICTURE_IN (715,165,1017,470, "3.bmp",-1,100)
LCLICK(208,494)
HALT
END_IF
lDown(705,483)
  lUp(683,383)
LCLICK(586,367)


Где я ошибся?

Pages: [1]