Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: faser on July 21, 2017, 11:06:48 AM
-
Предлагаю скрипт фарма подзмелий игры Gods and glory
https://vk.com/godsandglory (https://vk.com/godsandglory)
//скрипт выполняет майн подземелий в игре Gods and Glory
// подходит для сбора низкоуроуневых ресурсов для кузни
// останавливает сбор, когда войска начинают гибнуть
// или когда полоска очков подземелья заполняется почти до максимума
// запускать в ноксе, пришвартованном к левому верхнему углу экрана
#name "Слава шахтёрам"
//процедура клика с рандомным отклонением от точки клика на количество точек от 0 до $rc по обеим осям
sub (clkr, $xc,$yc,$rc)
$nx=$xc+rnd(0-$rc,$rc)
$ny=$yc+rnd(0-$rc,$rc)
// print(" x",$xc," y",$yc," nx",$nx, " ny",$ny)
$getx=$_xmouse
$gety=$_ymouse
MOVE($nx,$ny)
LDOWN($nx,$ny)
waitms(80+rnd(0,60))
LUP($nx,$ny)
MOVE($getx,$gety)
end_sub
//процедура рандомного ожидания таймер + 1-10%
sub(waitrnd, $t)
WAIT($t+$t*(1/rnd(1,10)))
end_sub
//main part основная часть
GETSCREEN
COLORMODE(6)
//screenshot
WHILE(pxl(226,185)=4144959) //проверка по заполненности полоски очков,этот цикл можно поменять, если требуется другое условие для окончания фарма
print("Можно в бой, очки есть куда собирать",pxl(315,500))
//рандомно бьем один из отрядов в списке, можно выбирать только один из 2-х вариантов
// вариант 1: бьем только нижние 4 отряда в подземелье, например, для защиты от дыхания дракона
clkr(325,341+76*rnd(0,3),5)
//вариант 2: бьем все 5 отрядов, имеет смысл использовать при отключенной проверке на войска, но при уверенности, что остаток войск вытянет бои со всеми отрядами. иначе скрипт будет часто останавливаться т.к. войска будут дохнуть. ГГ маг вполне норм может фармить
// clkr(325,263+76*rnd(0,4),5)
waitrnd(1)
//тут проверка на наличие войск в армии по цвету полоски,если войска начинают дохнуть и не пополняются, то хальт, можно отключить и биться, к пример, только основным героем
GETSCREEN
COLORMODE(6)
IF(pxl(210,230)=4144959)
print("войска закончились! блеа!!!")
halt
END_IF
//начать бой на выборе войск
clkr(281,589,5)
waitrnd(2)
//начать бой на поле
clkr(199,612,5)
//дальше ждем конца, проверяем наличие кнопки
GETSCREEN
COLORMODE(6)
print("бой идет",pxl(315,500))
WHILE(pxl(315,500)!8355711)
waitrnd(1)
print("бой идет",pxl(315,500))
GETSCREEN
COLORMODE(6)
end_cyc
//раздача призов
//выбираем первый приз
$pp=rnd(0,4)
clkr(55+66*$pp,444,7)
waitrnd(0.2)
clkr(55+66*$pp,444,7)
waitrnd(0.6)
// а здесь выбираем второй приз. можно отключить всю эту конструкцию, если можно брать только один приз
$vp=$pp
WHILE($vp=$pp)
$vp=rnd(0,4)
waitrnd(0.1)
end_cyc
clkr(55+66*$vp,444,7)
waitrnd(0.2)
clkr(55+66*$vp,444,7)
waitrnd(1.5)
//после сбора призов можно выходить
clkr(280,496,10)
waitrnd(2)
GETSCREEN
COLORMODE(6)
end_cyc
//конец цикла, если очки набрались
print("мы почти у цели, дальше пили сам")
halt
-
Исправил кодировку. А чтоб такого не было нужно, перед копированием в буфер, раскладку языка в редакторе перевести на Ру.
-
спс
-
faser, идея классная, разве что я бы в районе 66-й строки еще добавил проверку на случайное поражение, с соответствующей логикой выхода из нее.
Ну и координаты точек увы не совпадают, надо все равно под свой экран перерабатывать :)
Плюс, не понимаю почему, но случайным образом, при проверке заполненности шкалы и проверке наличия войск, когда применяю getscreen - почему-то оказывается что используется не текущий экран, а предыдущий его снимок. Экспериментально вылечилось установлением больших задержек примерно по wait(5) до и после команды getscreen
upd: еще вспомнил: цели строк 66-67 не понял, у меня достаточно однократного клика на сундук. Соответственно, строки 78-87 без доната не проверял
-
Благодарю за отзыв.
про поражение конечно думал, но не стал заморачиваться, т.к. основная цель скрипта - собрать обычные ресурсы для крафта (экспа - добавочно), поэтому проигрышей не бывает. ГГ обычно сам может бой вывезти.
Про координаты точек я сначала думал привязаться к окну, вымерять размер и указать "относительные точки". Потом чёт заленился и сделал абсолютные точки при том, что нокс подвешен к координатам 0,0 (примерно).
Если запрос будет, подумаю, чтоб переделать по-человечески.
С глюком скриншота не встречался. Возможно от мощности компа зависит.
цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.
78-87 - действительно, для тех, кто может 2 ящика открыть (с донатом), как я там в комментарии написал, если ящик только один, то этот блок можно отключить
-
у меня щас больше голова болит о том, как сделать автофарм шахт по выбранному уровню...
не могу определиться к чему цепять проверку на уровень и свободность шахты.
upd: увидел твоё http://crapware.aidf.org/forum/index.php?topic=88.msg22957#msg22957
буду изучать
-
не могу определиться к чему цепять проверку на уровень и свободность шахты.
Я привязываю в абсолютных пикселях к координатам того фрагмента изображения шахты, по которому ищется сама шахта. Плюс добавляю люфты - учитывая неточность в поиске в размытых текстурах
-
а увеличение карты?
-
Общий вопрос по алгоритму Распознавание чисел 1.5.cms (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571 )
Для случаев, когда конкретные написания цифр могут достаточно сильно отклоняться от "шаблона", можно ли использовать не конкретные образцы, а их массивы? Например, сделать подпапки "texures\number0\", "texures\number1\", "texures\number2\"... в которые накидывать разные написания одной и той же цифры. А алгоритм бы проверял на совпадение каждому из вариантов цифры в соответствующей подпапке.
А совсем идеально - чтобы если совпадений не найдено (установив высокую точность, например от 95), но скриншот данного кусочка экрана сразу складировался в отдельной папке - из которой потом вручную можно было бы нарезать цифры и добавить в нужную подпапку...
Есть мастера, которые могли бы так доделать алгоритм распознавания? Или тогда комп каждое распознавание будет по полчаса делать?
не, у нас фигня какая-то получается :( даже при "большом" увеличении есть несколько проблем
1) размеры цифр "вверху" и "внизу" экрана разные. внизу больше (типа ближе к наблюдателю). И кстати, это не только цифры, но и все объекты. Потому сложно будет найти шахты (тем более, что теперь сияние ввели для тех шахт, с которых самоцвет выпадет)
2) при применении colormode вообще "сказка" получается. Даже на увеличенных изображениях отличить 1 от 2 или 7 может быть проблематично, а при увеличении количества цветов - проявляется нежелательный фон за цифрами, которые не позволяет достоверно определить цифры
(https://photos-1.dropbox.com/t/2/AAABMxY6z9SxZMhmEt4rOCWTPvSmWhH9TRLXDQ7xHAWX1Q/12/131524863/png/32x32/1/_/1/2/primer2.png/EPuPiGUYiwwgBygH/M7LZQAX93MjCD2KCNlO4uz8mYn6_frLbv4qYvUq5eDw?size=1280x960&size_mode=3)
(https://photos-3.dropbox.com/t/2/AAAu7jF2wPuyHeiCdrfOvSOznrsn1MFATPVTZDGluE3OEA/12/131524863/png/32x32/1/_/1/2/primer.png/EPuPiGUYigwgBygH/wvBEBAM9G7kBjXei3wMyws79qHTQJWCLqDg92_bgVQo?size=1280x960&size_mode=3)
в общем, надо думать.
Полагаю, что отдельные цифры искать вообще нет смысла. С точки зрения игрового процесса надо искать не отдельные цифры, а прям числа -2-3 уровня от уровня игрока. Т.е. если цита 15, то желательно искать шахты 12,13,14,15. Следовательно искать надо только эти картинки, а не все цифры. Так ИМХО будет быстрее для скрипта и правильнее для игрока.
-
Потому сложно будет найти шахты (тем более, что теперь сияние ввели для тех шахт, с которых самоцвет выпадет)
...
Полагаю, что отдельные цифры искать вообще нет смысла. С точки зрения игрового процесса надо искать не отдельные цифры, а прям числа -2-3 уровня от уровня игрока. Т.е. если цита 15, то желательно искать шахты 12,13,14,15. Следовательно искать надо только эти картинки, а не все цифры. Так ИМХО будет быстрее для скрипта и правильнее для игрока.
1)У меня получается найти шахты почти все. Некоторые правда он распознает как несколько наложенных экземпляров друг на друга и чуть сдвинутых, но это не проблема для последующей обработки.
До сияния я еще не дорос, поэтому сказать не могу, скрин можешь прислать как выглядит?
2)попробовал, скрины не цифр, а чисел распознает тоже очень хреново, постоянно путает между собой, а если увеличить точность - то никак не распознает ((
Атаковать же вообще все шахты без учета их уровня - будут сплошные сливы на высокоуровневых шахтах... Писать "костыль" для отслеживания шахт на которых убиваешься и изымать их из массива, причем только на определенный срок, учитывая миграции шахт - имхо не лучшее решение, но возможно придется по нему пойти...
-
цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.
Извини, похоже опечатался - имел в виду строки 74 и 76
-
цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.
Извини, похоже опечатался - имел в виду строки 74 и 76
А, ну тут все просто. Если один раз нажать, то приз долго крутится на экране, а если сделать двойной клик, то можно сразу идти к следующему шагу.
Поэтому я делаю просто двойной клик.
-
1)У меня получается найти шахты почти все.
можешь тут код выложить с искомыми картинками? хочу понять, что именно ты ищешь и как.
одинаково хорошо ищется и вверху экрана и внизу?
1)
До сияния я еще не дорос, поэтому сказать не могу, скрин можешь прислать как выглядит?
вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
-
а вообще, ведь можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.
Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и кликаем на следующий объект в списке найденных
-
одинаково хорошо ищется и вверху экрана и внизу?
Я делаю поиск по нижней половине экрана. Нарезки пока чуть разные (экспериментирую еще с параметрами самого экрана), но размеры стараюсь делать не более 30-40 pxl. Позже могу в личку кинуть
вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Ссылка в дропбоксе не открывается. Даже если залогиниваюсь. Не сделал ее публичной?
-
а вообще, ведь можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.
Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...
-
одинаково хорошо ищется и вверху экрана и внизу?
Я делаю поиск по нижней половине экрана. Нарезки пока чуть разные (экспериментирую еще с параметрами самого экрана), но размеры стараюсь делать не более 30-40 pxl. Позже могу в личку кинуть
вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Ссылка в дропбоксе не открывается. Даже если залогиниваюсь. Не сделал ее публичной?
а так:?
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
-
а вообще, ведь можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.
Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...
Ну я подход "б" как раз и думал для того, чтобы минимизировать отлов скрипта админами.
"Открывать" объект все-равно надо для атаки, но по крайней мере, при таком анализе "ложных" открытий будет меньше.
Что до мигрирующих замков/лагерей, так это маловолнующий фактор. Новый анализ делается при каждом свайпе карты.
1. проанализировал
2. если есть куда - напал, и гоуту 1
3. сдвинул карту
4. гоуту 1
ну т.е. осуществляется человекоподобная логика поиска жертв.
Тут же можно добавить проверку на наличие ифритов/суккубов с выбором нужного генерала для такой атаки или игнора таких шахт.
алгоритм сдвига можно реализовать псевдо-хаотичный. типа такого:
(https://photos-1.dropbox.com/t/2/AADfASoylasA0pVnUtOhZmB2ncno4fqhXxdgn_2nqVuR0Q/12/131524863/png/32x32/1/_/1/2/%D0%BF%D0%BB%D0%B0%D0%BD%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B9.png/EPuPiGUYjgwgBygH/nvnTvvfm2nw_HFs1qas1svDiOJzDvRxit94ttA2vXq8?size=1280x960&size_mode=3)
высылай свой скрипт на личку
-
Предлагаю скрипт фарма подзмелий игры Gods and glory
https://vk.com/godsandglory (https://vk.com/godsandglory)
Для русскоязычных игроков - группа в фейсбуке https://www.facebook.com/groups/GodsGloryRussia/
А сам код для фарма в подземельях в более универсализированном варианте у меня получился вот такой:
// Скрипт для Gods and Glory, фарм подземелий
// По замечаниям и предложениям - пишите на gsukhado@yandex.ru
#name "Фарм подземелий" - для универсального применения на разных компах
#define xmul(:$x_gr+INT((
#define )xmul:-$x_gr)*$x_peresch)
#define ymul(:$y_gr+INT((
#define )ymul:-$y_gr)*$y_peresch)
// задание изменяемых переменных
$avtopodb=0 // если =1 то авторасстановка ("автоподбор") войск включен
$nout=1 // идентификатор компьютера (для выставления координат)
$stavim_zaderhku=0 // если = 1 то срабатывают задержки, если = 2 то в двукратном размере
$proverk_nalichvoisk=1 // если =1 то проверяется наличие фуллки войск
$avto_naim=1 // если =1 то автоматически нанимаем какие-то войска
$dlia_povtorenij=1 // если =1 то цикл по числу повторений, иначе - по заполнению полоски
$chislo_povtorenij=290 // число повторений, только для цикла по числу а не по цвету
$voevat_v_odinochku=1 // если =1 то при утрате войск гг пудет пытаться воевать в одиночку; иначе - запустится найм войск
$vip_status=0 // =1 если есть VIP статус
$berem_uskorenno=1 // = 1 удобно для быстрых компов
$timer_vnachale=0 // если = 1, то запускается вначале таймер чтобы можно было убрать мышку (например если мешает TeamViewer)
$pereproverka_deistvij=1 // если =1 то все действия перепроверяются; важно для слабых компов
$x_mash_ish=442
$y_mash_ish=856
$x_gr=6 // размер неизменяемой границы слева
$y_gr=46 // размер неизменяемой границы сверху
switch($nout) // задание размера рабочей области
case(0) // вариант для ноута-1
$x_mash_stavim=374
$y_mash_stavim=734
case(1) // вариант для ноута-2
$x_mash_stavim=442
$y_mash_stavim=856
case(2) // вариант для стационара
$x_mash_stavim=518
$y_mash_stavim=990
case(3) // вариант для виртуалки (малое разрешение)
$x_mash_stavim=374
$y_mash_stavim=734
default
print("Значение $nout какое-то странное = ", $nout)
end_switch
$x_peresch=($x_mash_stavim-2*$x_gr)/($x_mash_ish-2*$x_gr)
$y_peresch=($y_mash_stavim-2*$y_gr)/($y_mash_ish-2*$y_gr)
/////////////////////////////////////////////////////////
//процедура задержки для слабого ноута
sub(zaderhka, $how_long)
if($stavim_zaderhku=1)
waitms($how_long+rnd(0,80))
end_if
if($stavim_zaderhku=2)
waitms($how_long+rnd(0,80))
end_if
end_sub
/////////////////////////////////////////////////////////
//процедура клика с рандомным отклонением от точки клика на количество точек от -$rc до +$rc по обеим осям
sub(ggclick2, $var_in_1, $var_in_2, $var_in_3)
$rc2=$var_in_3
$nx2=INT($var_in_1+rnd(0-$rc2,$rc2))
$ny2=INT($var_in_2+rnd(0-$rc2,$rc2))
move($nx2,$ny2)
ldown($nx2,$ny2)
waitms(130+rnd(0,30))
zaderhka(100)
lup($nx2,$ny2)
zaderhka(200)
end_sub
/////////////////////////////////////////////////////////
// координаты атак /////
/////////////////////////////////////////////////////////
sub(koord_attack)
// координаты атак: 300, 387, 473, 560, 647. Итого разница в 87 пикселя
// вариант 1: бьем только верхний конкретный отряд
ggclick2(xmul(370)xmul, ymul(300)ymul, 5)
// вариант 2: бьем только нижние 4 отряда в подземелье - rnd(-1,3)
// ggclick2(xmul(370)xmul, INT(ymul(387)ymul+87*rnd(-1,3))*$y_peresch,5)
waitms(900+rnd(0,150))
end_sub
/////////////////////////////////////////////////////////
// работа с окном ////////////////
sub(move_wind)
$hwnd1=0
$hwnd1 = wndfind("BlueStacks") // получаем HWND окна Блюстака
if ($hwnd1 > 0)
print("нашли окно BlueStack = ", $hwnd1)
else
print("почему-то найти не смогли")
end_if
WNDBUMP ($hwnd1) // Окно на передний план
WNDPOS ($hwnd1, 0, 0) // подвинули окно в левый верхний угол
waitms(1000+rnd(0,200))
WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
print("Было окно размером", $tmp_var1, " ", $tmp_var2, " на ", $tmp_var3, " ", $tmp_var4)
// waitms(500+rnd(0,200))
// WNDSIZE($hwnd1,$x_mash_stavim,$y_mash_stavim)
// print("Изменили")
// waitms(700+rnd(0,200))
end_sub
//////////////////////////////////////////////////////////
// наем войск ///
///////////////
sub(naim_voisk_raboch)
ggclick2(xmul(42)xmul, ymul(774)ymul, 5)
waitms(3000+rnd(0,500))
getscreen(xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
colormode(6,xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
if(pxl(xmul(155)xmul,ymul(95)ymul)=8339263) // Если синий цвет - значит в поле
ggclick2(xmul(42)xmul, ymul(774)ymul, 5) //перешли в город
waitms(3000+rnd(0,500))
getscreen(xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
colormode(6,xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
// SCREENSHOT(["my_analiz_проверка_поле-город_2"])
zaderhka(900)
if(pxl(xmul(144)xmul,ymul(92)ymul)=4145151) // Если красный цвет - то значит в городе
print ("Находимся точно в городе")
else
print ("Находимся НЕПОНЯТНО ГДЕ, ОСТАНОВ")
halt
end_if
end_if
ggclick2(xmul(308)xmul, ymul(690)ymul, 3) //открыли "армия"
waitms(2500+rnd(0,500))
zaderhka(1300)
getscreen(xmul(60)xmul,ymul(595)ymul,xmul(375)xmul,ymul(675)ymul)
colormode(6,xmul(60)xmul,ymul(595)ymul,xmul(375)xmul,ymul(675)ymul)
waitms(2000+rnd(0,500))
zaderhka(1300)
if((pxl(xmul(93)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(123)xmul,ymul(656)ymul)=8339263))
ggclick2(xmul(108)xmul, ymul(635)ymul, 5) // вошли в казарму-1
waitms(2500+rnd(0,500))
// ggclick2(xmul(197)xmul, ymul(518)ymul, 8) // выбрали воин с молотом (4й сверху)
ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
waitms(2500+rnd(0,500))
ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
waitms(2500+rnd(0,500))
ggclick2(xmul(42)xmul, ymul(774)ymul, 5) //перешли в город
waitms(2500+rnd(0,500))
end_if
if((pxl(xmul(205)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(234)xmul,ymul(656)ymul)=8339263))
ggclick2(xmul(216)xmul, ymul(635)ymul, 5) // вошли в казарму-2
waitms(2500+rnd(0,500))
// ggclick2(xmul(210)xmul, ymul(384)ymul, 8) // выбрали ифритов (2й сверху)
// ggclick2(xmul(210)xmul, ymul(455)ymul, 8) // выбрали клериков (3й сверху)
ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
waitms(2500+rnd(0,500))
ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
waitms(2500+rnd(0,500))
ggclick2(xmul(42)xmul, ymul(774)ymul, 5) //перешли в город
waitms(2500+rnd(0,500))
end_if
if((pxl(xmul(314)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(344)xmul,ymul(656)ymul)=8339263))
ggclick2(xmul(327)xmul, ymul(635)ymul, 5) // вошли в казарму-3
waitms(2500+rnd(0,500))
ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
waitms(2500+rnd(0,500))
ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
waitms(2500+rnd(0,500))
ggclick2(xmul(42)xmul, ymul(774)ymul, 5) // открыли город
waitms(2500+rnd(0,500))
end_if
ggclick2(xmul(123)xmul, ymul(774)ymul, 5) // перешли в подземелье
waitms(2500+rnd(0,500))
$time_wait=3
print("поставили войска строиться, ждем ", $time_wait ," минут")
wait(60*$time_wait+rnd(0,40))
end_sub
/////////////////////////////////////////////////////////
// Основная подпрограмма
sub(main_farm)
// ---проверим на наличие войск в армии
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(6,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_проверка_войск_предварит"])
zaderhka(1500)
// $gg_fill_voisk=1
// $gg_fill_voisk=pxl(xmul(235)xmul,ymul(263)ymul)
waitms(900+rnd(0,100))
if($avtopodb=1)
zaderhka(1000)
ggclick2(xmul(330)xmul, ymul(275)ymul, 5) // это "автоподбор"
waitms(400+rnd(0,100))
if($pereproverka_deistvij=1)
zaderhka(500)
ggclick2(xmul(330)xmul, ymul(275)ymul, 5) // для слабого ноута на всякий случай еще раз "автоподбор"
zaderhka(500)
end_if
waitms(900+rnd(0,100))
zaderhka(1000)
end_if
zaderhka(1300)
if($proverk_nalich_voisk=1)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_проверка_войск"])
$gg_fill_voisk=pxl(xmul(235)xmul,ymul(263)ymul)
// if($gg_fill_voisk=4144959) //- это цвет для colormode-6
if($gg_fill_voisk=8355711)
print("войска закончились!!!!")
waitms(3000+rnd(0,500))
if ($avto_naim = 1) // это для автонайма войск
naim_voisk_raboch()
else
print("!!__войск НЕТ и НЕ нанимаем__!!. ОСТАНОВ")
halt
end_if
GOTO(proigrali)
end_if
end_if
// ---Кнопка после настройки войск "Начать бой"
zaderhka(1500)
to_begin_boi_2:
ggclick2(xmul(370)xmul, ymul(663)ymul, 8)
// print("успешно кликнули-2")
waitms(950 + rnd(0,140))
if($pereproverka_deistvij=1) // проверка для слабого ноута - что нажали Начать_бой-2 успешно
zaderhka(800)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(800)
if(pxl(xmul(384)xmul,ymul(270)ymul)=8388479) // это проверили по зелоному в Автоподбор
print("Не получилось, нажмем НАЧАТЬ БОЙ-2 повторно")
GOTO(to_begin_boi_2)
end_if
end_if
zaderhka(1000)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_подберите_войско"])
if((pxl(xmul(86)xmul,ymul(63)ymul)=8388479)&(pxl(xmul(309)xmul,ymul(61)ymul)=16777087)&(pxl(xmul(326)xmul,ymul(446)ymul)=16777087)) // ситуация "наберите войско используя автоподбор...или шанс крайне мал..."
// ресурс лес, ресурс пыль, кнопка назад
if($voevat_v_odinochku=1) // выбор что гг воюет без войск
ggclick2(xmul(150)xmul, ymul(445)ymul, 7)
waitms(2500+rnd(0,500))
else
ggclick2(xmul(296)xmul, ymul(445)ymul, 7)
waitms(2500+rnd(0,500))
naim_voisk()
GOTO(proigrali)
end_if
end_if
// ---Кнопка после появления противника "Начать бой"
to_begin_boi_3:
zaderhka(1000)
ggclick2(xmul(220)xmul, ymul(690)ymul, 6)
// print("успешно кликнули-3 (начали бой)")
zaderhka(1000)
if($pereproverka_deistvij=1) // проверка для слабого ноута - что нажали Начать_бой-2 успешно
zaderhka(500)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(1200)
if(pxl(xmul(278)xmul,ymul(689)ymul)=16744319) // это проверили по синему в кнопке Начать бой
print("Не получилось, нажмем НАЧАТЬ БОЙ-3 повторно")
GOTO(to_begin_boi_3)
end_if
end_if
// ---Ожидание конца боя
waitms(1000+rnd(0,200))
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_начало_боя_7_"])
zaderhka(1000)
print("бой идет", pxl(xmul(360)xmul,ymul(565)ymul))
while(((pxl(xmul(360)xmul,ymul(565)ymul)!8355711)|(pxl(xmul(245)xmul,ymul(565)ymul)!8355711))&(pxl(xmul(295)xmul,ymul(414)ymul)!16744319))
waitms(3000+rnd(0,300))
zaderhka(3000)
// print("бой идет",pxl(xmul(360)xmul,ymul(565)ymul))
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(800)
end_cyc
zaderhka(1000)
if(pxl(xmul(295)xmul,ymul(414)ymul)=16744319) //проверка поражения
print("бой - поражение")
waitms(200+rnd(0,100))
ggclick2(xmul(221)xmul, ymul(406)ymul, 7)
to_povtor_porazhenie:
zaderhka(1000)
if($pereproverka_deistvij=1) // проверка для слабого ноута - что нажали успешно
zaderhka(500)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(800)
if(pxl(xmul(295)xmul,ymul(414)ymul)=16744319) // это проверили наличие поражения
print("Не получилось, нажмем после поражения повторно")
GOTO(to_povtor_porazhenie)
end_if
end_if
goto(proigrali)
end_if
zaderhka(1000)
// ---Выбор сундука; сундуки на 60, 136, 209, 283, 360, т.е. интервал 75
$sund_num=rnd(1,5)
ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
print("Взяли сундук номер ", $sund_num)
waitms(100 + rnd(0,50))
zaderhka(1200)
if ($berem_uskorenno=1)
ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
waitms(400 + rnd(0,50))
else
waitms(3000 + rnd(0,500))
end_if
zaderhka(3000)
if ($vip_status=1)
$sund_num2=rnd(1,5)
waitms(200 + rnd(0,100))
zaderhka(300)
while($sund_num2=$sund_num)
$sund_num2=rnd(1,5)
end_cyc
waitms(200 + rnd(0,100))
ggclick2((xmul(60)xmul+($sund_num2-1)*75*$x_peresch), ymul(502)ymul, 7)
print("Взяли сундук номер ", $sund_num2)
zaderhka(4200)
waitms(150 + rnd(0,50))
if ($berem_uskorenno=1)
ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
waitms(450 + rnd(0,50))
else
waitms(3000 + rnd(0,500))
end_if
end_if
zaderhka(5000)
// ---Кнопка "Закрыть"
to_povtor_sunduki:
waitms(800 + rnd(0,50))
if($pereproverka_deistvij=1) // проверка для слабого ноута - что взяли сундуки
zaderhka(500)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(800)
if((pxl(xmul(154)xmul,ymul(561)ymul)=8388479)&(pxl(xmul(50)xmul,ymul(556)ymul)=8388479)) // это проверили что слева зеленое "Открыть все"
if(pxl(xmul(256)xmul,ymul(564)ymul)=8355711) // это проверили что справа "Закрыть" серое
ggclick2((xmul(60)xmul, ymul(502)ymul, 7)
waitms(1600+rnd(0,100))
ggclick2((xmul(136)xmul, ymul(502)ymul, 7)
waitms(1600+rnd(0,100))
ggclick2((xmul(209)xmul, ymul(502)ymul, 7)
waitms(1600+rnd(0,100))
ggclick2((xmul(283)xmul, ymul(502)ymul, 7)
waitms(1600+rnd(0,100))
ggclick2((xmul(360)xmul, ymul(502)ymul, 7)
waitms(1600+rnd(0,100))
print("Еще раз попробовали открыть сундуки")
GOTO(to_povtor_sunduki)
end_if
end_if
end_if
to_povtor_zakrytie:
zaderhka(1000)
ggclick2(xmul(290)xmul, ymul(560)ymul, 7)
print("Закрыли окно")
if($pereproverka_deistvij=1) // проверка для слабого ноута - что нажали успешно
zaderhka(500)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(800)
if((pxl(xmul(154)xmul,ymul(561)ymul)=8388479)&(pxl(xmul(50)xmul,ymul(556)ymul)=8388479)&(pxl(xmul(245)xmul,ymul(558)ymul)=16744319)) // это проверили что слева "Открыть все" зеленая, а справа "Закрыть" синяя"
print("Не получилось, нажмем на закрытие повторно")
GOTO(to_povtor_zakrytie)
end_if
end_if
proigrali:
waitms(800+rnd(0,100))
end_sub
/////////////////////////////////////////////////////////
// main part основная часть ////////////////
////////////////////////////////////////////////////////
if($timer_vnachale=1)
print("===========================")
print("таймер убрать мышку")
$ubrat_mysh_MAX=15
for($ubrat_mysh=1, $ubrat_mysh<$ubrat_mysh_MAX, 2)
wait(2)
print("таймер убрать мышку, осталось=", $ubrat_mysh_MAX-$ubrat_mysh)
end_cyc
end_if
print("===========================")
print("Начинаем фармить подземелье")
UNDEFINE ($gogs)
DEFINE ($gogs, 1)
move_wind() // подпрограмма чтобы окно сдвинуть в (0,0)
// если надо сделать оперативный скриншот текущего состояния:
// getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
// colormode(6,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_Тест_6_"])
// colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_Тест_7_"])
// waitms(2000+rnd(0,200))
// print("ОСТАНОВ")
// halt
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(1300)
if ($dlia_povtorenij=1)
print("Вариант для конкретного числ повторений")
for ($gogs, $gogs < $chislo_povtorenij, 1)
print("Задали начало цикла, цикл номер= ", $gogs)
waitms(200+rnd(0,50))
zaderhka(1300)
to_koord_attack_povtor:
koord_attack()
waitms(200+rnd(0,50)
if($pereproverka_deistvij=1)
zaderhka(700)
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(700)
if(pxl(xmul(405)xmul,ymul(300)ymul)=8388479)
print("Не получилось, нажмем НАЧАТЬ БОЙ-1 повторно")
GOTO(to_koord_attack_povtor)
end_if
end_if
zaderhka(1300)
main_farm()
zaderhka(1300)
waitms(200+rnd(0,50))
end_cyc
else
print("Вариант для заполнения полоски")
while(pxl(xmul(330)xmul,ymul(212)ymul)=8355711)
$gogs=$gogs+1
print("Задали начало цикла, цикл номер= ", $gogs-1)
waitms(1000+rnd(0,200))
koord_attack()
main_farm()
getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_для_продолжения_цикла"])
print("цвет для продолжение цикла-2 (продолжаем если 8355711)= ", pxl(xmul(330)xmul,ymul(212)ymul))
waitms(2000+rnd(0,200))
end_cyc
end_if
//конец цикла, если очки набрались
print("мы у цели, дальше самостоятельно")
print("!!____!!")
halt
-
А вот это существенно более сложный алгоритм - уже для фарма наземных шахт. Постарался максимально закомментировать, чтобы было понятно какие настройки за что отвечают
...опс, "Сообщение превышает максимально допустимую длину (20000 знаков)", кодом вставить не получается, поэтому вставляю только начало и прилагается файлом
#name "Фарм Наземный - поштучное распознавание"
// Скрипт для Gods and Glory, фарм наземных шахт
// По замечаниям и предложениям - пишите на gsukhado@yandex.ru
#define xmul(:$x_gr_new+INT((
#define )xmul:-$x_gr_ish)*$x_peresch)
#define ymul(:$y_gr+INT((
#define )ymul:-$y_gr)*$y_peresch)
// Изменяемые переменные
$glob_map_SUMMARNO=50000 // общее число повторений работы по карте
//$glob_map_for_centrirovanie_MAX_1=15 // как часто прыгаем в начало, минимальное значение
//$glob_map_for_centrirovanie_MAX_2=20 // как часто прыгаем в начало, максимальное значение
$max_lvl_shaht=15 // максимальный уровень шахт, которые можем атаковать
$verojatn_proverki_voisk=3 // доля вероятности проверки войск, чем выше - тем реже проверяем
$rezhim_obuchenia=-1 // если =1 то дается больше времени на ввод цифры, если =2 то вообще все смотрим без атак, если = -1 то атакуем все без проверок уровня
$zadania_berem=0 // обычно =1 но на случай если надо сутки не брать задания
$verojatn_zadania_berem=4 // доля вероятности брать задания, чем выше - тем реже проверяем
$menshe_etogo_nabirat_voiska=690
$delaem_poisk_monet=1
$podtv_zavershenie_MAX=2 // количество экранов с уже собранными монетами
$tsentriruem_po_citadel_OR_alians=1 // если =1 то центрирование по цитадели, иначе - по альянсу
$nout=1 // номер компа для задания размеров рабочей области (для выставления координат)
$x_mash_ish=442
$y_mash_ish=856
$x_gr_ish=6 // размер неизменяемой границы слева
if($nout=4)
$x_gr_new=36
else
$x_gr_new=6
end_if
$y_gr=46 // размер неизменяемой границы сверху
switch($nout)
case(0) // вариант для ноута-1
$x_mash_stavim=374
$y_mash_stavim=734
case(1) // вариант для ноута-2
$x_mash_stavim=442
$y_mash_stavim=856
case(2) // вариант для стационара
$x_mash_stavim=518
$y_mash_stavim=990
case(3) // вариант для виртуалки для ноута (малое разрешение)
$x_mash_stavim=374
$y_mash_stavim=734
default
print("Значение $nout какое-то странное = ", $nout)
end_switch
$x_peresch=($x_mash_stavim-2*$x_gr_new)/($x_mash_ish-2*$x_gr_ish)
$y_peresch=($y_mash_stavim-2*$y_gr)/($y_mash_ish-2*$y_gr)
//на случай если надо быстро сделать скрин экрана
//print("Тестовый скрин начали")
//waitms(1700+rnd(0,200))
//getscreen()
//colormode(6)
//SCREENSHOT(["my_analiz-Тестовый__6_"])
//colormode(7)
//SCREENSHOT(["my_analiz-Тестовый__7_"])
//print("Тестовый скрин Завершили. ОСТАНОВ")
/halt
////////////////////////////////////////////////////////////////////////////////
////////// описание важных подпрограмм ////
////////////////////////////////////////////////////////////////////////////////
//lines($x1_text,$y1_text,$x2_text,$y2_text) // определяет координаты строк
//ответ - массивы $x1_line_arr,$y1_line_arr,$x2_line_arr,$y2_line_arr
/////////
//pos_size($x1_line,$y1_line,$x2_line,$y2_line) // координаты и количество символов
//ответ - массивы $x1_char_arr,$y1_char_arr,$x2_char_arr,$y2_char_arr
////////
//shape($x1_char,$y1_char,$x2_char,$y2_char) //очертание каждого символа
//ответ - строка очертания вида 01110311112042200240~
////////
//reader($shape) //обучение и распознавание
//если цифра не распознана, то вылезет окно ввода, где нужно вписать нужную цифру, на эту цифру указывает курсор.
//ответ - строка $all_str
////////////////////////////////////////////////////////////////////////////////
//==============================================================================
//процедура клика с рандомным отклонением от точки клика на количество точек от 0 до $rc по обеим осям
//======
sub(ggclick2, $var_in_1, $var_in_2, $var_in_3)
$rc2=$var_in_3
$nx2=INT($var_in_1+2*rnd(0-$rc2,$rc2)) //горизонтально двукратное отклонение
$ny2=INT($var_in_2+rnd(0-$rc2,$rc2))
// print("Задали значения клика: nx2=", $nx2, "(при вход.=", $var_in_1,") ny2=", $ny2,"(при вход.=", $var_in_2,") rc2=", $rc2)
move($nx2,$ny2)
ldown($nx2,$ny2)
waitms(80+rnd(0,60))
lup($nx2,$ny2)
end_sub
sub(ggclick1, $var_in_1, $var_in_2, $var_in_3)
$rc1=$var_in_3
$nx1=INT($var_in_1+rnd(0-$rc1,$rc1)) //горизонтально однократное отклонение
$ny1=INT($var_in_2+rnd(0-$rc1,$rc1))
// print("Задали значения клика: nx2=", $nx2, "(при вход.=", $var_in_1,") ny2=", $ny2,"(при вход.=", $var_in_2,") rc2=", $rc2)
move($nx1,$ny1)
// print("клик на: ", $nx1, " " , $ny1) //проверка что работаем в нужной точке
waitms(400+rnd(0,60))
ldown($nx1,$ny1)
waitms(80+rnd(0,60))
lup($nx1,$ny1)
end_sub
/////////////////////////////////////////////////////////
// работа с окном ////////////////
sub(move_wind)
$hwnd1=0
$hwnd1 = wndfind("BlueStacks") // получаем HWND окна Блюстака
if ($hwnd1 > 0)
print("нашли окно BlueStack = ", $hwnd1)
else
print("почему-то найти не смогли")
end_if
WNDBUMP ($hwnd1) // Окно на передний план
WNDPOS ($hwnd1, 0, 0) // подвинули окно в левый верхний угол
waitms(1000+rnd(0,200))
WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
print("Окно размером", $tmp_var1, " ", $tmp_var2, " на ", $tmp_var3, " ", $tmp_var4)
waitms(600+rnd(0,50))
WNDSIZE($hwnd1,$x_mash_stavim,$y_mash_stavim)
//WNDSIZE($hwnd1,370,734)
print("изменили размер окна")
waitms(200+rnd(0,20))
//WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
//print("окно", $tmp_var1, " ", $tmp_var2)
//print("на ", $tmp_var3, " ", $tmp_var4)
//halt
end_sub
//==============================================================================
////////////////////////////////////////////////////////////////////////////////
/////////разбивает текст на строки//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(lines,$x1_text,$y1_text,$x2_text,$y2_text)
UNDEFINE ($x1_line_arr)
UNDEFINE ($y1_line_arr)
UNDEFINE ($x2_line_arr)
UNDEFINE ($y2_line_arr)
// print("===>подпрогр Lines")
IF(PXLCOUNT($x1_text,$y1_text,$x1_text,$y2_text,$char_color)=($y2_text-$y1_text+1))
print("...(первый столбец забит фоном, НЕ учитывается)")
while(PXLCOUNT($x1_text,$y1_text,$x1_text,$y2_text,$char_color)=($y2_text-$y1_text+1))
inc($x1_text)
// print("увеличиваем $x1_text= ", $x1_text , " при $x2_text= ", $x2_text)
END_CYC
if (($x1_text+3)>$x2_text) //т.е. вообще везде какие-то помехи
$uspeh_raspoznav=0
GOTO(to_end_lines)
end_if
END_IF
IF_PIXEL_IN($x1_text,$y1_text, $x1_text,$y2_text, $char_color)
print("...(текст не влазит в границы распознавания слева)")
$uspeh_raspoznav=0
GOTO(to_end_lines)
END_IF
IF_PIXEL_IN($x2_text,$y1_text, $x2_text,$y2_text, $char_color)
print("...(текст не влазит в границы распознавания справа)")
$uspeh_raspoznav=0
GOTO(to_end_lines)
END_IF
IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<($x2_text-$x1_text+1))
print("...(первая строка обрезана, НЕ учитывается)") // в т.ч. скидывает помехи?
while(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<($x2_text-$x1_text+1))
inc($y1_text)
// print("увеличиваем $y1_text= ", $y1_text , " при $y2_text= ", $y2_text)
END_CYC
if (($y1_text+$h_str-2)>$y2_text) //т.е. вообще везде какие-то помехи
$uspeh_raspoznav=0
GOTO(to_end_lines)
end_if
END_IF
// print("начинаем глючный $y1_text= ", $y1_text , " $y2_text= ", $y2_text)
while($y1_text<$y2_text)
// print("исходное $y1_text= ", $y1_text, " и $y2_text=", $y2_text)
while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))&($y1_text<$y2_text))
inc($y1_text)
// print("увеличиваем $y1_text= ", $y1_text , " при $y2_text= ", $y2_text)
END_CYC
// print("взяли для границ цифр $y1_text= ", $y1_text)
// SCREENSHOTEX($x1_text,$y1_text,$x2_text,$y2_text, ["my_analiz_кол-во войск_- верхняя граница"])
IF($y1_text<$y2_text)
arrpush($x1_line_arr, $x1_text)
arrpush($y1_line_arr, $y1_text)
$h_str_temp=0
while(($h_str_temp<$h_str)&($y1_text<$y2_text))
// print("вошли в цикл $h_str_temp= ", $h_str_temp)
while(((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color))<($x2_text-$x1_text+1))&($y1_text<$y2_text))
inc($y1_text)
inc($h_str_temp)
END_CYC
// print("сюда дошли?_ $h_str_temp=", $h_str_temp, " $h_str=", $h_str, " $y1_text=", $y1_text, " $y2_text=", $y2_text)
IF(($h_str_temp<$h_str)&($y1_text<$y2_text))
while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))&($y1_text<$y2_text))
inc($y1_text)
END_CYC
$h_str_temp = 0
$del_arr = arrpop($x1_line_arr)
$del_arr = arrpop($y1_line_arr)
arrpush($x1_line_arr, $x1_text)
arrpush($y1_line_arr, $y1_text)
END_IF
END_CYC
END_IF
// print("после if ?")
IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))
arrpush($x2_line_arr, $x2_text)
arrpush($y2_line_arr, $y1_text-1)
else
print("...(последняя строка обрезана, НЕ учитывается)")
$del_arr = arrpop($x1_line_arr)
$del_arr = arrpop($y1_line_arr)
END_IF
END_CYC
// print("итог Lines- количество строк = ",arrsize($x1_line_arr))
// координаты в лог и скрины
//FOR($a=0,$a<arrsize($x1_line_arr))
// print($x1_line_arr[$a]," ",$y1_line_arr[$a]," ",$x2_line_arr[$a]," ",$y2_line_arr[$a])
// SCREENSHOTEX($x1_line_arr[$a],$y1_line_arr[$a],$x2_line_arr[$a],$y2_line_arr[$a], ["подпрогр_Lines_скрин_итога_"])
//END_CYC
IF(arrsize($x1_line_arr)=0)
print("...(текста не найдено)")
$uspeh_raspoznav=0
GOTO(to_end_lines)
END_IF
to_end_lines:
END_SUB
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////размер и количество символов в строке//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(pos_size,$x1_line,$y1_line,$x2_line,$y2_line)
// print("===>подпрогр pos_size")
UNDEFINE ($x1_char_arr)
UNDEFINE ($y1_char_arr)
UNDEFINE ($x2_char_arr)
UNDEFINE ($y2_char_arr)
FOR($x1_line_temp=$x1_line,$x1_line_temp<$x2_line+1)
FOR($y1_line_temp=$y1_line,$y1_line_temp<$y2_line+1)
IF(pxl($x1_line_temp,$y1_line_temp)=$char_color)
arrpush($x1_char_arr,$x1_line_temp)
while(PXLCOUNT($x1_line_temp,$y1_line,$x1_line_temp,$y2_line,$back_color)<$y2_line-$y1_line+1)
inc($x1_line_temp)
END_CYC
arrpush($x2_char_arr,$x1_line_temp-1)
END_IF
END_CYC
END_CYC
FOR($i_char=0,$i_char<arrsize($x1_char_arr))
SCANPXL ($pix_temp,$x1_char_arr[$i_char],$y1_line,$x2_char_arr[$i_char],$y2_line,$char_color)
arrpush($y1_char_arr,$pix_temp[1])
arrpush($y2_char_arr,$pix_temp[arrsize($pix_temp)-1])
UNDEFINE ($pix_temp)
END_CYC
// print("количество символов в строке - ",arrsize($x1_char_arr))
//скрины каждого символа
// FOR($a=0,$a<arrsize($x1_char_arr))
// SCREENSHOTEX($x1_char_arr[$a],$y1_char_arr[$a],$x2_char_arr[$a],$y2_char_arr[$a], ["подпр_Pos_size_очертание_символа_"])
// END_CYC
END_SUB
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////очертание символов//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(shape,$x1_char,$y1_char,$x2_char,$y2_char)
// print("===>подпрогр shape")
UNDEFINE($left_1)
UNDEFINE($left_2)
UNDEFINE($left_3)
UNDEFINE($left_4)
UNDEFINE($left_5)
UNDEFINE($right_1)
UNDEFINE($right_2)
UNDEFINE($right_3)
UNDEFINE($right_4)
UNDEFINE($right_5)
UNDEFINE($up_1)
UNDEFINE($up_2)
UNDEFINE($up_3)
UNDEFINE($up_4)
UNDEFINE($up_5)
UNDEFINE($down_1)
UNDEFINE($down_2)
UNDEFINE($down_3)
UNDEFINE($down_4)
UNDEFINE($down_5)
//лево
FOR($temp=$x1_char,(pxl($temp,$y2_char)!$char_color)&($temp<$x2_char))
inc($left_1)
END_CYC
$left_1 = ROUND($left_1/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_1 > 9)
$left_1 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
inc($left_2)
END_CYC
$left_2 = ROUND($left_2/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_2 > 9)
$left_2 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp<$x2_char))
inc($left_3)
END_CYC
$left_3 = ROUND($left_3/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_3 > 9)
$left_3 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
inc($left_4)
END_CYC
$left_4 = ROUND($left_4/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_4 > 9)
$left_4 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y1_char)!$char_color)&($temp<$x2_char))
inc($left_5)
END_CYC
$left_5 = ROUND($left_5/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_5 > 9)
$left_5 = 9
END_IF
//право
FOR($temp=$x2_char,(pxl($temp,$y2_char)!$char_color)&($temp>$x1_char),-1)
inc($right_1)
END_CYC
$right_1 = $right_1 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_1 = ROUND($right_1/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_1 > 9)
$right_1 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
inc($right_2)
END_CYC
$right_2 = $right_2 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_2 = ROUND($right_2/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_2 > 9)
$right_2 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp>$x1_char),-1)
inc($right_3)
END_CYC
$right_3 = $right_3 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_3 = ROUND($right_3/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_3 > 9)
$right_3 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
inc($right_4)
END_CYC
$right_4 = $right_4 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_4 = ROUND($right_4/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_4 > 9)
$right_4 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y1_char)!$char_color)&($temp>$x1_char),-1)
inc($right_5)
END_CYC
$right_5 = $right_5 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_5 = ROUND($right_5/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_5 > 9)
$right_5 = 9
END_IF
//верх
FOR($temp=$y1_char,(pxl($x1_char,$temp)!$char_color)&($temp<$y2_char))
inc($up_1)
END_CYC
$up_1 = ROUND($up_1/($y2_char-$y1_char+1)/$accur,-1)*10
IF($up_1 > 9)
$up_1 = 9
END_IF
FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
inc($up_2)
END_CYC
$up_2 = ROUND($up_2/($y2_char-$y1_char+1)/$accur,-1)*10
IF($up_2 > 9)
$up_2 = 9
END_IF
FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp<$y2_char))
inc($up_3)
END_CYC
$up_3 = ROUND($up_3/($y2_char-$y1_char+1)/$accur,-1)*10
IF($up_3 > 9)
$up_3 = 9
END_IF
FOR($temp=$y1_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
inc($up_4)
END_CYC
$up_4 = ROUND($up_4/($y2_char-$y1_char+1)/$accur,-1)*10
IF($up_4 > 9)
$up_4 = 9
END_IF
FOR($temp=$y1_char,(pxl($x2_char,$temp)!$char_color)&($temp<$y2_char))
inc($up_5)
END_CYC
$up_5 = ROUND($up_5/($y2_char-$y1_char+1)/$accur,-1)*10
IF($up_5 > 9)
$up_5 = 9
END_IF
//низ
FOR($temp=$y2_char,(pxl($x1_char,$temp)!$char_color)&($temp>$y1_char),-1)
inc($down_1)
END_CYC
$down_1 = ROUND($down_1/($y2_char-$y1_char+1)/$accur,-1)*10
IF($down_1 > 9)
$down_1 = 9
END_IF
FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
inc($down_2)
END_CYC
$down_2 = ROUND($down_2/($y2_char-$y1_char+1)/$accur,-1)*10
IF($down_2 > 9)
$down_2 = 9
END_IF
FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp>$y1_char),-1)
inc($down_3)
END_CYC
$down_3 = ROUND($down_3/($y2_char-$y1_char+1)/$accur,-1)*10
IF($down_3 > 9)
$down_3 = 9
END_IF
FOR($temp=$y2_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
inc($down_4)
END_CYC
$down_4 = ROUND($down_4/($y2_char-$y1_char+1)/$accur,-1)*10
IF($down_4 > 9)
$down_4 = 9
END_IF
FOR($temp=$y2_char,(pxl($x2_char,$temp)!$char_color)&($temp>$y1_char),-1)
inc($down_5)
END_CYC
$down_5 = ROUND($down_5/($y2_char-$y1_char+1)/$accur,-1)*10
IF($down_5 > 9)
$down_5 = 9
END_IF
// print($left_1," ",$left_2," ",$left_3," ",$left_4," ",$left_5)
// print($right_1," ",$right_2," ",$right_3," ",$right_4," ",$right_5)
// print($up_1," ",$up_2," ",$up_3," ",$up_4," ",$up_5)
// print($down_1," ",$down_2," ",$down_3," ",$down_4," ",$down_5)
$shape_str=STRCONCAT($left_1,$left_2,$left_3,$left_4,$left_5,$right_1,$right_2,$right_3,$right_4,$right_5,$up_1,$up_2,$up_3,$up_4,$up_5,$down_1,$down_2,$down_3,$down_4,$down_5,"~")
//print($shape_str)
END_SUB
-
Вылезает ошибка !
-
Вылезает ошибка !
1.Алгоритм не рассчитан на одиночного игрока, нужна территория альянса. Которую задать в соответствующих переменных, описанных в примечаниях к коду
2.Нужно взять скриншоты шахт для поиска, и в программе прописать к ним локальный путь
-
Но другая останется. Все версии BlueStacks отображаются несколько по разному и чтоб всё отображалось как у автора вам потребуется использовать его версию эмулятора.
У меня 3.50.50.1647. С твиком на запрет обновления версии и запрет показа рекламы.
Но в общем тот кто захочет применить для себя данный алгоритм - все равно должен будет хотя бы в основах Кликермана разобраться, чтобы что-то под себя обновлять и "допиливать" - например, какие именно войска нанимать для фарма, это полностью индивидуально...
-
Чуть обновил код для фарма в подземельях
-
Чуть обновил код для фарма в подземельях
Привет, как нибудь полегче бы фарм шахт сделал , чисто фарм, без всякого найма войск и тому подобного .
P.S. За подземку отдельное спасибо !
-
Поддерживаю вариант с облегченной версией скрипта- только для фарма наземных шахт без найма юнитов и т.д.
-
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??
-
Не правильно понимаете, от слова совсем.
И? Есть реализация или нет? :)
-
Возвращаясь к программированию бота ддя Gods and Glory:
1) касательно подземелий, лучше делать клик не с паузой времени (хоть и рандомной), а снимок экрана + поиск нужной кнопки. Поясню почему, интернет может забарахлить, из игры может выкинуть (тех работы), ПК может лагануть и пропустить нужный цикл и выйдет бред. А вот с картинками очень да же круто выходит, глаз еще да же картинку не увидел, а кликер уже нажал (это без задержек) и нажал куда нужно ! Добавляя к этому рандомную паузу мы делаем более реалистичными наши действия и приближенными к реалям (когда бьешь одну и ту же шахту час в живую, там практически нет задержки по времени).
2) касательно шахт. После обновления в 2017м году (где то в начале года) фон номера шахты значительно затемнили и это нам большой плюс в распозновании.
Вопрос как понять что у шахты откат это первый вопрос.
Как отсеивать те шахты которые не попадают в наш радиус обзора (территория имеет форму шестиугольника, а у нас угол обзора Квадрат). как вариант сравнивать координаты открытой шахты, но это палевно слишком, так же как и открывать шахту на которую напали и у нее откат.
-
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??
А в чем идея свайпа? для чего в G&G хотите использовать?
-
Приветствую
А наглостью будет просить необходимые скриншоты ?
при запуске выдаёт ошибку по строкам 5,6,7,8 ввиду того что я использую Nox и не совпадают координаты и разрешение ?
(https://image.ibb.co/d546Ve/Error.jpg)
Грызу мат часть чтобы понять, что за что отвечает,но некоторые комментарии вызывают еще больше вопросов
Up
Первая проблема решилась изменением
syntax_check = 0 в config.ini
-
Здравствуйте.
Вопрос трудности использования строчек #define с разным (и неправильным с т.з. программы) количеством открывающих и закрывающих скобок в версии Clickermann v4.13 уже как-то обсуждался.
Для решения проблемы надо поменять настройки конфигурации, убрав проверку синтаксиса (Clickermann v4.13 x32\data\config.ini):
есть такое. варианты обхода:
1) config.ini:
[core]
...
; Проверка синтаксиса
syntax_check = 0
Либо можно использовать чуть более раннюю версию Clickermann v4.12, где нет проверки на скобки.
-
Приветствую
А наглостью будет просить необходимые скриншоты ?
при запуске выдаёт ошибку по строкам 5,6,7,8 ввиду того что я использую Nox и не совпадают координаты и разрешение ?
Пробовал в какой-то момент пересчитывать на Нокс, но оказалось проще подобрать экран Нокса так, чтобы размер видимой части совпал с Блюстаковым, под который все и писалось. Но особо направление "под Нокс" не развивал.
Либо все точки перепроверять. Тем более что все равно разрабы понемногу игру меняют, и изображение сдвигается, т.е. надо все время отслеживать изменения.
-
Здравствуйте.
Сначала попытался разобраться в логике представленного скрипта, забросил... Начал с нуля, столкнулся с проблемой распознавания. Не мог бы автор скрипта выложить пару изображений по которым идет проверка шахт.
Тестовые фрагменты и статичные изображения определяются легко, а как только фон или размер немного меняется, все затык. Дело в том, что размер изображений шахт и вообще любых объектов на карте изменяется, снизу они больше и постепенно уменьшаются в верхней части. Для успешного поиска придется использовать только одну линию, пока я пришел к такому выводу.
-
После запуска такого бота прилетело предупреждение о использовании бота
и удалили мне все материалы в кузне
может поможет кто реализовать как то подругому что бы бан не словить )
// 02.09.2018
COLORMODE(8, 32,365,719,100)
//заход в магазин
GETSCREEN
IF(PXL(295,640) = 65867)
LCLICK(295,640)
WAIT(2)
END_IF
//СБОР
GETSCREEN
IF(PXL(256,214) = 12546118)
LCLICK(256,214)
WAIT(2)
END_IF
//ПЕРЕХОД В ЗАДАНИЯ
GETSCREEN
IF(PXL(250,217) = 8158332)
LCLICK(170,639)
WAIT(2)
END_IF
//ВЫПОЛНЕНИЕ ЗАДАНИЯ
GETSCREEN
IF(PXL(262,241) = 12097129)
LCLICK(262,241)
WAIT(2)
END_IF
//сбор подарка за задания
GETSCREEN
IF(PXL(271,148) = 2269797)
LCLICK(271,148)
WAIT(2)
END_IF
//переход в подземелье ЕСЛИ ЗАДАНИЙ НЕТ
GETSCREEN
IF(PXL(263,243) = 2336103)
LCLICK(105,645)
WAIT(2)
END_IF
//начать бой
GETSCREEN
IF(PXL(277,243) = 2069849)
LCLICK(277,243)
WAIT(2)
END_IF
//начать бой с медведем
GETSCREEN
IF(PXL(325,549) = 2402407)
LCLICK(325,549)
WAIT(2)
END_IF
//синяя кнопка начать бой
GETSCREEN
IF(PXL(98,565) = 8013869)
LCLICK(188,578)
WAIT(2)
END_IF
//снудук 1
GETSCREEN
IF(PXL(180,448) = 1134790)
DBLCLICK(180,448)
WAIT(2)
END_IF
//снудук 2
GETSCREEN
IF(PXL(243,446) = 670455)
DBLCLICK(243,446)
WAIT(2)
END_IF
//закрыть
GETSCREEN
IF(PXL(181,365) = 4747910)
LCLICK(268,511)
WAIT(2)
END_IF
//собрать опыт
GETSCREEN
IF(PXL(220,171) = 2148465)
LCLICK(303,174)
WAIT(2)
END_IF
//переход в магазин если подзем собран
GETSCREEN
IF(PXL(285,169) = 6579300)
LCLICK(36,636)
WAIT(2)
END_IF
//переход в магазин после подзема
GETSCREEN
IF(PXL(296,639) = 723799)
LCLICK(296,639)
WAIT(2)
END_IF
//ТЕХ.РАБОТЫ
GETSCREEN
IF_PIXEL_IN(38,218,184,395,13860944)
LCLICK(90,367)
WAIT(2)
END_IF
-
сделайте рандом по допустимому месту клика и времени после клика.
Если это сделаю то будет ли шанс поражения в бан ?
-
А чем они вообще выслеживают кликера?
-
У меня 3 акк за это бан не прилетал уже пол года сижу да и правилах игры количество акк не оговаривается
-
Баг не давали за этот код ?
-
Я просто всего пару дней изучаю программу
-
код котрый вы переписали не работает
-
после первого действия заход в магазин встает в ступор и всё
-
щас дело пошло лучше но не всегда поподает по нужным кнопкам, надо разобраться как то в вашем коде, просто спеременными не знаком ещё
-
переменные ещё вроде как более мение понятно а вот тег sub не понятен как оно работает
-
а вы знакомы с игрой gods and glory ?
-
вот собственно для чего пишу
-
Кстати там игра не браузерная, она есть только на андроид и ios а на первую установлена через андроид эмулятор
, кроме вебвизора может быть что то ?
-
После запуска такого бота прилетело предупреждение о использовании бота
и удалили мне все материалы в кузне
может поможет кто реализовать как то подругому что бы бан не словить )
1.Количество времени работы бота должно быть аналогично времени фарма человеком. Иначе действительно в кузне все зачищается, вплоть до бож.материалов, не имеющих отношения к подземке...
2.Имхо первичный вариант с равномерным рандомом или кликом в одной и той же области тоже не верен. У людей что-то более близкое к распределению гаусса. Соответственно, изложенные выше скрипты - надо брать за основу, но не как готовый инструмент.
3.Судя по некоторым признакам, представители игры в курсе про Кликерман и данную тему. Поэтому концепты обсуждать можно, но окончательную реализацию я бы тут не выкладывал...
-
Здравствуйте.
Сначала попытался разобраться в логике представленного скрипта, забросил... Начал с нуля, столкнулся с проблемой распознавания. Не мог бы автор скрипта выложить пару изображений по которым идет проверка шахт.
Подбирается похоже индивидуально, под конкретный комп и разрешение. Не факт что заработает на ином компе, поэтому хотя вначале пытался сделать с пересчетом размеров на иные разрешения - потом эту идею забросил
-
У меня 3 акк за это бан не прилетал уже пол года сижу да и правилах игры количество акк не оговаривается
Против твиноводства в GG не возражают, скорее даже поддерживают - чтобы с каждого твина что-то покупали...
-
А вот это существенно более сложный алгоритм - уже для фарма наземных шахт. Постарался максимально закомментировать, чтобы было понятно какие настройки за что отвечают
...
Подскажи пожалуйста, вот такая ошибка лезет, что изменить?
-
Подскажи пожалуйста, вот такая ошибка лезет, что изменить?
Откуда там квадратные скобки?
-
Да они там везде.
-
Да они там везде.
— Алло, дорогая, только что по радио передали, что один псих едет по встречке. Будь осторожнее.
— Один??? Да их тут тысячи!
-
Нужно убрать? Всех со встречки?
-
Нужно. Это кто-то "опытный" тупо переписал синтаксис из справки, где квадратными скобками обозначены НЕОБЯЗАТЕЛЬНЫЕ параметры.
В синтаксисе кликера квадратные скобки пишутся только при указании индекса массива. Там удалять не нужно.
-
Нужно. Это кто-то "опытный" тупо переписал синтаксис из справки, где квадратными скобками обозначены НЕОБЯЗАТЕЛЬНЫЕ параметры.
В синтаксисе кликера квадратные скобки пишутся только при указании индекса массива. Там удалять не нужно.
Камень в мой огород, причем полностью оправданный: моя первая проба пера была, а раз на той версии Кликермана работала и ошибок не выдавала - значит все нормально ))
-
Нужно убрать? Всех со встречки?
И намного удобней для анализа оказался не SCREENSHOT, а примерно вот такое сохранение:
$papka= "d:\_tmp_screens\"
SCREENSHOTFIX(0,0,440,820,STRCONCAT($papka,"\","название_файла_с описанием_что_и_для_чего_",$_date_d,"-",$_time_h , "-", $_time_m, "-", $_time_s ,".bmp"))
-
Камень в мой огород, причем полностью оправданный: моя первая проба пера была, а раз на той версии Кликермана работала и ошибок не выдавала - значит все нормально ))
Да я и не смотрел кто там изначальный автор. Иногда сюда тянут код и из других мест.
Ну раз ты здесь и не потерялся, то можешь ведь поправить старый код, чтоб народ не спотыкался.
А лучше даже выложить более новую версию с исправлениями и доработками.
-
Ну раз ты здесь и не потерялся, то можешь ведь поправить старый код, чтоб народ не спотыкался.
А лучше даже выложить более новую версию с исправлениями и доработками.
Сама игрушка постоянно разрабами меняется, поэтому к ней не получится сделать комфортный "мерседес", которым мог бы пользоваться любой желающих. Приходится использовать "ведро с болтами", и использующий должен уметь самостоятельно допиливать его под себя. Даже примитивно под используемое у себя разрешение экрана и эмулятор. Иначе, увы, не заработает...