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.


Topics - Kedrick

Pages: [1]
1
Использование / Примитивный блэк-джек
« 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.

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

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

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

2
Общие вопросы / Многоярусное условие
« 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 нифига не отработало, хотя все остальное выполняется. Может я чего-то недопонимаю и не так написал?
Помогите разобраться )

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


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

4
Написал бота, большого, умного, с тремя потоками, все отлично работает и требует минимального внимания.
Принес на работу и не работает вообще, начал разбираться. Первая же странность.
Открываю редактор кликермана, делаю любую правку, тыкаю кнопку сохранить потом применить, все отлично. Тыкаю крестик закрыть окно редактора, выскакивает окошко с вопросом "применить изменения?". Как так?, я же только что нажал применить. Нажимаю да, окошко пропадает, а редактор не закрывается. Если нажимаю нет, то редактор закрывается.
Почему так может быть?

5
Есть вот такое поле в игре


Я сделал вот такой скрипт (лишнее убрал для простоты восприятия)
Мне нужно, чтобы скрипт в списке выбирал нужную строку.

Code: (clickermann) [Select]
// на сколько часов ставим работу перед сном, меняется юзером по необходимости
$hour_work = 4

// перемотка вниз, запускать с цифрой
SUB(scroll, $e)
   FOR($r=0, $r < $e)
      KEYPRESS(#DOWN)
      WAITMS(300)
   END_CYC
END_SUB

// ставим работу перед сном
SUB(sleep)
   LCLICK(176,489)  // заход в работу
   waiting()
   LCLICK(1003,872) // открыть выпадающий список
   WAITMS(100)
   $l = $hour_work - 1
   scroll($l) // выбираем время работы
   KEYPRESS(#ENTER)
   WAITMS(500)
   LCLICK(955,905) // погнали
   WAIT(3)
 END_SUB

sleep()
halt

Но бот всегда выбирает первую строчку, на которой открывается список по умолчанию. т.е. не дергает курсор вниз.
Подпрограмма scroll используется во всем моем боте повсеместно, но там я указываю параметр явно разными нужными цифрами (например scroll(3) ) и это работает, а конкретно в этом месте, параметр должен быть задан пользователем по его желанию, и чтобы не заставлять его ковыряться в файле с подпрограммами, явынес этот параметр в настройки.
Где я ошибся?

6
Столкнулся с определенной проблемой и хочется об этом поговорить, может быть кто покажет ссылку на тему где это решено уже, а может и сами тут придумаем как решить :)

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

Собственно вопрос: это оборимо? Я хочу заниматься не только тем что можно, а еще и тем что хочется, в то время когда работает кликер :)
Перенести кликер на мелкий ноут с фтп я передумал, ноуту и без кликера достаточно тяжело, да и чтобы посмотреть что там происходит, надо запускать каждый раз тимвьювер (монитора то на ноуте нет :) ).

Пока писал, подумал о варианте второй видеокарты (у меня их с десяток ненужных и древних валяется на работе), но тогда нужен будет и второй монитор, а это уже не круто для забавы на пару месяцев.

PS Сейчас еще подумал поставить виртуальную машину VirtualBox и запустить все там, но не знаю как без геморроя сделать так, чтобы при автоматической остановке бота в виртуалке по времени, усыплять или гасить комп. Пока хочется решить проблему без виртуальных костылей.

7
Написал бота, на том компе где написан скрипт все отлично работает. Для максимальной совместимости прикрутил коррекцию цветов и снизил точность поиска картинок до 70%
Принес на рабочий комп - не отрабатывает все нажатия. Вычислил где, не пойму почему. Прошу помощи.
Для начала в этой подпрограмме:
Code: (clickermann) [Select]
$donat = 2 // 0 - не скидываем, 1 - только бабло, 2 - бабло и ресы, 3 - только ресы
SUB(donate) // скидываем награбленное в клановую казну
   IF($donat > 0)
      coord() // сверяем координаты, если сместилось корректируем с помощью $x и $y (по умолчанию они = 0)
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (253+$x,569+$y, 355+$x,764+$y, "1.bmp", -1, 70) // страница клана
         LCLICK($_return1, $_return2)
         waiting() // ждем прогрузки страницы
      END_IF
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (448+$x,627+$y, 600+$x,848+$y, "2.bmp", -1, 70) // казна клана
         LCLICK($_return1, $_return2)
         waiting() // ждем прогрузки страницы
      END_IF
      FOR($a=0, $a < 10) // перемотка экрана вниз
         KEYPRESS(#DOWN)
         WAITMS(300)
      END_CYC
      WAITMS(500)
         GETSCREEN
         COLORMODE(6)
      IF(($donat = 1) | ($donat = 2))
         IF_PICTURE_IN (357+$x,438+$y, 600+$x,631+$y, "plus.bmp", -1, 70) // плюсик рядом с окном ввода суммы бабла чтобы положить сразу все из кармана
            LCLICK($_return1, $_return2)
            WAIT(1)
         END_IF
      END_IF
      IF(($donat = 2) | ($donat = 3))
         IF_PICTURE_IN (587+$x,438+$y, 840+$x,631+$y, "plus.bmp", -1, 70) // плюсик рядом с окном ввода суммы ресурса чтобы положить сразу все из кармана
            LCLICK($_return1, $_return2)
            WAIT(1)
         END_IF
      END_IF
      IF_PICTURE_IN (557+$x,445+$y, 875+$x,724+$y, "down.bmp", -1, 70) // кнопка ОК
         LCLICK($_return1, $_return2)
         waiting()
      END_IF
      KEYPRESS(#HOME) //если не сработает то поднять страницу в исходное для работы следующих подпрограмм
      WAITMS(500)
      PRINT("скинул ништяки") // контролим в логе по отчетам где затык
      waiting()
   END_IF
END_SUB

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

Первую и вторую картинки находит и по кнопкам отрабатывает.
Вниз экран скроллит.
По плюсикам - картинки находит, но кликает уже на 1-1,5см левее и выше этих кнопок.
По кнопке ОК не кликает, находит ее или нет я не понял.

8
Можно ли как-то красиво написать такую функцию, чтобы после клика по кнопке или ссылке в браузере, кликер ждал ровно столько времени, сколько грузится следующая страница?
Простой WAIT не всегда возможно адекватно использовать, по причине того, что интернет то летает и скрипт работает отлично, то начинает тупить и скрипт не зная этого тыкает в еще незагруженную кнопку или ссылку и ессно все сбивается.
Надоело нагромождать монструозные проверки и втыкать их после и перед каждым действием :(


9
Браузер мозилла, скриптую бота для браузерки, необходимо слегка отскроллить страницу вниз чтобы охватить поиском все нужные кнопки из списка. Причем не тупо до самого низа кнопкой END, и не пробелом или PgDown, а буквально пару раз крутнуть колесо мыши :)
Но поскольку самые очевидные варианты в привязке не работают, я сделал так:
Code: (clickermann) [Select]
while(1 = 1) // бесконечный цикл
   // тут вырезано начало скрипта и открытие большой страницы которая не влезает по высоте полностью в окно
   // дальше надо скрольнуть чуть вниз
      FOR($a, $a < 10)
         LCLICK(1200,980) // кликать на стрелку вниз в правом нижнем углу
         WAITMS(50)
      END_CYC
   // тут находим необходимую кнопку и тыкаем по ней
   // страница перезагружается и скрипт завершается
END_CYC

Потом сделал так:
Code: (clickermann) [Select]
FOR($a, $a < 10)
      KEYPRESS(#DOWN)
      WAITMS(50)
END_CYC

Оба варианта работают, но только в первый раз при запуске. Первый круг скрипт проходит, а на втором уже не скроллит ничего, ни одним из вариантов. Все остальные нажатия и поиски картинок отрабатывает.
Пробовал ps/2 режим, вообще все перестает нажимать.

Теперь собственно вопрос, это моя локальная бага, или я что-то упустил? И есть ли более изящный способ скроллиться?

Pages: [1]