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 - Kedrick

Pages: [1] 2 3 ... 5
1
по твоему копирование экрана в буфер гетскрином с последующим поиском там нужной картинки более изящно чем копирование в буфер нужного куска текста?
Ну-ка расскажи нам маэстро, что придумал ты.

2
Если цифру в поле игры можно выделить мышкой или даблкликом, то я использую такой изящный способ распознавания:

Code: (clickermann) [Select]
DBLCLICK(738,793)    // выделяем цифру двойным кликом
WAITMS (50)
KEYDOWN (#CTRL)  // копируем в буфер
WAITMS (50)
KEYDOWN (#C)
WAITMS (50)
KEYUP (#C)
KEYUP (#CTRL)
$summ = INT(FROMCLIP())  // назначаем переменной значение из буфера

А дальше уже работаем с назначенной переменной как душе угодно. И никакого распознавания тысяч картинок, которые хитровыделанный админ может менять в день по 3 раза, то керн шрифта, то сам шрифт, то цвет шрифта, то цвет фона, то еще что-то. Меня в определенный момент задрало перефоткивать картинки раз в неделю и сделал вот так. Таким-же способом можно определять и появление нужного текста в нужном месте. Главное чтобы оно было не кликабельно и было выделяемым. Во флешах не проканает.

3
Использование / Re: Примитивный блэк-джек
« on: January 13, 2016, 06:01:12 PM »
Стек $pic я использовал еще и как флаг, пока он больше нуля, выполняем цикл, если закончилась партия, то по условию в 56 строке флаг обнуляется. Для флага неважно что там в первом элементе, главное он больше нуля (я так посчитал нормальным).
Массив собирается перед началом партии, когда все 6 карт еще не открыты и больше не трогается, обнуляется только после окончания партии.
Этот флагомассив я замутил в одной из последних попыток, до этого там была обычная переменная создаваемая только для этого. Еще раньше я пробовал и по размеру массива проверять. Результат всегда один, ELSE в 55 строке не отрабатывается еще одну итерацию.

PS: я там неверно посчитал, в первом сообщении исправил, теперь верно все, условие ELSE в 55 строке

4
Использование / Re: Примитивный блэк-джек
« on: January 13, 2016, 12:36:58 PM »
Не вижу никакой связи между сглаживанием картинок и не отработкой условия ELSE
При том, что в другом скрипте подобное условие работает нормально.

5
Использование / Примитивный блэк-джек
« on: January 13, 2016, 11:54:52 AM »
Набросал робота, который будет играть в сабж.
2 вопроса к сообществу:

1.Можно ли сделать проще?
На поле 6 карт рубашкой вверх, у игрока и НПС свои. Игрок всегда начинает первым.
Партия идет до 5 побед (максимум 9 раундов).
На подпрограммы разбил в попытках разобраться почему не работает.
Код в подпрограмме (gam) взял на этом форуме.
Code: (clickermann) [Select]
SUB(gam) // рандомим цифру 1-6, берем из стека соответствующие координаты и кликаем
   $c = 0
   $m = "123456"
   WHILE($c = 0)
      $f = INT(STRCUT($m, RND(1, STRLEN($m)), 1))
      IF(STRLEN($m) > 1)
         $m = INT(STRFILTER ($m, $f, 0))
      Else
         $c = 1
      END_IF
      $r = ($f * 2 - 1)
      $j = ($r - 1)
      $k = $pic[$j]
      $l = $pic[$r]
      LCLICK($k,$l)
      WAIT(1)
      DBLCLICK(738,793)    // выделяем цифру набраных очков
      WAITMS (50)
      KEYDOWN (#CTRL)  // копируем в буфер
      WAITMS (50)
      KEYDOWN (#C)
      WAITMS (50)
      KEYUP (#C)
      KEYUP (#CTRL)
      $summ = INT(FROMCLIP())
      IF($summ > 14) // если набрано больше 14 выходим из цикла
         $c = 1
      END_IF
      WAITMS(50)
   END_CYC
   WAIT(1)
END_SUB

SUB(igra)
   LCLICK(547,573) // кликаем в поле ставки
   WAITMS(300)
   KEYPRESS(#1) // ставим копейку
   WAITMS(300)
   LCLICK(954,573)  // начинаем игру
   WAIT(3)
   // находим рубашки карт на своей половине поля и заносим их координаты в массив
   GETSCREEN
   scanpicture($pic, 433,643, 696,881, "pict.bmp")
   WHILE($pic > 0)
      gam() //кликаем в любую неоткрытую карту и проверяем сумму
      GETSCREEN // заканчиваем раунд
      IF_PICTURE_IN (900,900, 1040,970, "raund.bmp")
         LCLICK($_return1, $_return2)
         WAIT(3)
      END_IF
         GETSCREEN  // начинаем следующий раунд
         IF_PICTURE_IN (900,900, 1040,970, "next.bmp")
            LCLICK($_return1, $_return2)
            WAIT(3)
         ELSE // если закончилась партия
            UNDEFINE($pic)
            LCLICK(818,989) // начинаем новую партию
            MOVE(10,10)
            WAIT(3)
      END_IF
      WAITMS(50)
   END_CYC
END_SUB

FOR($bp, $bp < 3)  // сколько партий играть
   igra()
END_CYC

HALT

Второй вопрос ломает мне мозг уже несколько дней
На домашнем компьютере (вин7х64) кликерман не выходит из цикла по условию в 55 строке и прогоняет впустую еще один раз подпрограмму gam, после чего продолжает работать нормально. Даже если в 56 строке я прописываю жестко GOTO или HALT - они игнорируются одну итерацию цикла в строке 44.

Сейчас попробовал этот скрипт не меняя ничего на рабочем компьютере (винХР) и тут кликерман отрабатыват все отлично.

На домашнем компе куча других скриптов в подобной ситуации работают нормально.

Прошу помощи.

6
А насколько реалистично такое предположение?
В браузерках это же невозможно (или тоже возможно уже?) и данный вопрос касается только клиентских приложений?

7
Предложения / Re: функции
« on: October 05, 2015, 06:09:39 PM »
чем отличаются подпрограммы от функций в нашем случае?

8
В моих ботах скроллинг экрана и списков реализован так

Code: (clickermann) [Select]
SUB(scroll, $e)
   FOR($r=0, $r < $e)
      KEYPRESS(#DOWN)
      WAITMS(300)
   END_CYC
END_SUB

//запускать такой командой
//в скобках указано сколько раз нажать стрелку вниз
scroll(5)

9
Общие вопросы / Многоярусное условие
« on: May 07, 2015, 09:29:09 PM »
Несколько раз в сутки требуется запускать одну подпрограмму в определенное время

На скорую руку набросал так
Code: (clickermann) [Select]
SUB(tak)
// куча кода
$p = 2 // после выполнения изменяем переменную
END_SUB

// это кусок кода из бесконечного цикла
IF(($_time_h = 6) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 14) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 22) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 7) ^ ($_time_h = 15) ^ ($_time_h = 23))
   $p = 0
END_IF


Сейчас захотелось оптимизировать, ибо слишком глупо и громоздко
Сделал так

Code: (clickermann) [Select]
// при запуске скрипта в самом начале добавил переменную
$p = 0
// чтобы при первом запуске отработало

IF((($_time_h = 6) ^ ($_time_h = 14) ^ ($_time_h = 22)) & ($p = 0))
   tak()
END_IF
IF(($_time_h ! 6) & ($_time_h ! 14) & ($_time_h ! 22))
   $p = 0
END_IF

Работает только если запускаю непосредственно в нужные часы, т.е. замечаю что нифига не отрабатывает, выключаю скрипт, включаю - выполнилось. Если скрипт запускаю в 23 и иду спать, то утром вижу, что в 6 нифига не отработало, хотя все остальное выполняется. Может я чего-то недопонимаю и не так написал?
Помогите разобраться )

10
Ошибки / Re: Привязка проблемка.
« on: March 05, 2015, 09:19:48 AM »
На всех виртуальных рабочих столах (включая и десктопс) кликер не будет искать картинки в неактивном окне, на неактивном десктопе, и при включенном хранителе экрана. Если скрипт кликает просто по координатам то это идеальный вариант, а если нужно искать картинки и пиксели то только на активном десктопе и развернутом окне. Причина в винде, для экономии ресурсов она не рисует все то, что находится за пределами физического монитора и что пользователь не может видеть.


11
Предложения / Re: команда UNDEFINE
« on: March 05, 2015, 09:08:33 AM »
Кто запрещает называть переменные внятным словом?
$start = 0
$clik_tut = 0
$clik_tam = 0
$flag_otmeny = 0
$flag_starta_kapchi = 0
$просто_флаг = 0
$временная_переменная = 0
$свари_кофе = 0
$пора_спать = 0

миллион вариантов которые совпадать и мешать друг другу не будут в принципе. И читабельность скрипта повышается

12
Ну не знаю, видя такой гонор, не уверен что будут отвечать и в личке  :D

13
Спасибо.
Для меня это филькина грамота с парой знакомых букв, буду разбираться по уже готовому рабочему примеру.  8)
Чуть позже выложу тут то что намучу под конкретное место.

14
С массивами я вообще никогда не работал и даже после изучения статьи и справки не могу внятно сообразить что делать. Прошу помощи.
В игре 3 раза в сутки появляется на несколько минут мини-игра, руками я успеваю поймать только один заход, и хочется чтобы кликер остальные разы отрабатывал без меня. Победа приятна но не критична, награда прокачивается за количество попыток а не побед.
Имеется поле из 6х4 клеток. На нем есть 5 нужных клеток (ключи), 6 вредных (зеленые пятна) и 13 нейтральных (желтые пятна).
Соответственно количество кликов не ограничено. Для выигрыша надо найти 5 полезных клеток. При попадании на 5 вредных, игра заканчивается проигрышем. Но выигрыш не критичен, поэтому я хочу просто рандомно прокликивать игровое поле пока не найдется 5 ключей или 5 зеленых клякс. Победу или поражение (для остановки кликов) я смогу проконтролировать сам по верхней части картинки где все отображается


Написать нужную мне подпрограмму я смогу и через жопу, с обьявлением кучи переменных с координатами и рандомным выбором из них нужных. Но это будет неоптимально и содержит много букв.
Прошу показать пример работы с массивом если такое возможно.
Поочередную выборку координат из стэка я нашел в примере, но не знаю как сделать произвольную и не повторяющую уже кликанные.
Координаты всех клеток поля всегда одинаковы, такчто массив можно заполнить и из заранее заготовленного файла.

15
Вы будете плакать, только не смейтесь.
Мы решили проблему методом исключения участков кода.
Все было просто, клиент решил что ему нужен файл с названием бот, а остальное фуфло (в том числе и файл с подпрограммами приинклуживаемый к боту), и ему не пригодится.

Сказать что я был зол - ничего не сказать.

Всем спасибо.

Pages: [1] 2 3 ... 5