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

Pages: [1]
1
Биржа труда / Re: бот для Demon slayer
« on: May 22, 2015, 07:18:58 AM »
да, интересная игрушка. Я уже давно ее автоматизацией занимаюсь. скрипт на астралы могу предложить, с сильфами сложнее. Эта функция реализована как часть общего автономного скрипта. Лень вычленять и адаптировать под универсальную работу.

Позже кину ссылку на видео демонстрацию

2
Да, это метро. я бы сказал что все умеет. Это как хобби на логику уже)
Задача максимум - включил и забыл.
Т.е. полностью автономная система, способная выполнять все игровые задачи самостоятельно в течении неск. дней, недель, месяцев.Игра очень статичная, мало обновляется, в отличие от "В окопе2 или "Спарты". поэтому тут все даром.  Функции такие:

1. Автобои с друзьями, с фильтром по фракции и призвольно от указанного уровня по убыванию (например не выше 45-го). пропуск безоружных соперников или отдельных исключений. +бои на арене. После достижения лимита, выполнение прекращается.
2. сбор зарплаты за 8 часовую работу, и установка новой у Начальника станции. Автопроверка после старта новых игровых суток что работа задана а не слетела.
3. Проверка и сбор ежедневного бонуса за вход в игру.
4. Обыск палаток.
5. Выполнение заданий Начальника станции, либо с упором на пульки(внутриигр. валюту)  либо на опыт, или просто на определенных монстров или на задания с репутацией. Реализована система приоритетов в любых сочетаниях, например в приоритете задания на репутацию, а если таковых нет то выбирается задание с упором на пульки.
6. Реализована схема бесплатной игры когда  бесплатные ресурсы за день исчерпаны, выполнение игр. функций прекращается до наступления новых игр. суток.
Также частично платной игры, когда добавлен параметр количества пополнений энергии в сутки за донат(например сколько раз можно сьесть мясо чтобы восстановить) , которые будут отыграны дополнительно а потом выполнение этой конкретной задачи останавливается до новых игр. суток.
И схема полностью донатной игры, когда круглосуточно ведется выполнение задач за донат. Хорошо оттестирована только бесплатная игра, остальное слабо.
7. плавающие координаты, после старта(перезапуска) игры находится опорное изображение, и от него высчитывается "прямоугольник" окна игры.
8. защита от сбоев внутри игры. Это распознавание внутриигровых ошибок которые могут появиться и соответствующая реакция на них. Например если прервана связь с сервером то обновляется, если ошибка требующая перезагрузки - приложение перезагружается через ф5.
9. Защита от внешнеигровых сбоев. Например завис браузер, или вылетел флеш плеер, или просто открылась другая страница. Если что убивается процесс через батник, и запускается заново через execute, ярлык со ссылкой на страницу. + автоматический перезапуск через n-e количество часов или с началом новых игровых суток.
10. С вводом клановых войн: участие в КВ - только бесплатными боями или + указанным кол-вом боев за донат. На время Кл.войны часть других игровых функций откладываются.
11. Анализ изменений топа и генерация отчета в виде таблицы чтобы ловить кланы на бой, или избегать кланы типа СЛ, ФФ и прочих акул-лидеров.
12. работа по ситуации и через распознавание, и максимальный уход от цикличных нажатий через равные промежутки времени по одному и тому же месту.
13. скрининг всех основных действий по игре и автоудаление файлов сверх указанной давности. через батник

из творческих экспериментов:
1. создание самостоятельного игрового клана, живущего своей игровой жизнью, обьявляющего войну, забирающего награду после войны, отыгрывание боев несколькими персами попеременно в каждой войне этого клана. В перерывах между войнами автоперелогинивание между 5-10 персами, набор ими внутриигр. валюты, и наполнение казны клана.
2. Создание плагина на дельфи, для анализа и статистики. Вернее вначале когда не знал, как плагин написать, был просто обмен через буфер обмена. кликер помещает туда строку распознанных данных (ряд чисел) с маркером, другое приложение видит что это ему, получает данные обрабатывает и возвращает в буфер ответ(другой ряд значений) с другим маркером. кликер видит по маркеру что это для него, -  принимает и действует. Да-да, мсье знает толк в извращениях)))

PS Все это было написано еще на версии 4.7, кроме 11 пункта, и без вмешательства в код, память процесса, или обмен данных с сервером.  Сейчас перехожу на 4.11.

3
Спасибо, с тех пор много воды утекло но для меня применение INT все равно стало открытием. С помощью этого доработаю свой скрипт к лучшему.
В итоге процедура распознавания 2-4значных чисел получила такой вид. И как оказалось вполне работоспособна
Code: [Select]

sub(analiz_reita)
//print("Анализируем...")
while($result!100)
// print("Анализируем...")
$result=0
// print($pX,$pY)
IF_picture_in ($pX, $pY, $px+14, $pY+17, "reit.bmp")
  $result=100
// print("рейта")
$px=$px+14 
goto(end_analyz)
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n0.bmp")
  $result=0
  arrpush($arr1, 0)
// print($result)
$px=$px+7
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+6, $pY+17, "n2.bmp",-1,85)
  $result=2
  arrpush($arr1, 2)
// print($result)
$px=$px+7
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n3_1.bmp",-1,90)
  $result=3
  arrpush($arr1, 3)
// print($result)
$px=$px+6
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n3_2.bmp",-1,90)
  $result=3
  arrpush($arr1, 3)
// print($result)
$px=$px+6
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n4.bmp")
  $result=4
  arrpush($arr1, 4)
// print($result)
$px=$px+6
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n5.bmp")
  $result=5
  arrpush($arr1, 5)
// print($result)
$px=$px+7
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n6_1.bmp")
  $result=6
  arrpush($arr1, 6)
// print($result)
$px=$px+7
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+6, $pY+17, "n7_1.bmp",-1,90)
  $result=7
  arrpush($arr1, 7)
// print($result)
$px=$px+8
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+6, $pY+17, "n7_2.bmp",-1,90)
  $result=7
  arrpush($arr1, 7)
// print($result)
$px=$px+8
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n8.bmp",-1,90)
  $result=8
  arrpush($arr1, 8)
// print($result)
$px=$px+6
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+5, $pY+17, "n9.bmp")
  $result=9
  arrpush($arr1, 9)
// print($result)
$px=$px+6
goto(end_analyz) 
end_if
IF_picture_in ($pX, $pY, $px+3, $pY+17, "n1_1.bmp",-1,95)
  $result=1
  arrpush($arr1, 1)
// print($result)
$px=$px+5
goto(end_analyz)  
end_if
IF_picture_in ($pX, $pY, $px+4, $pY+17, "n1_2.bmp",-1,95)
  $result=1
  arrpush($arr1, 1)
// print($result)
$px=$px+5
goto(end_analyz)  
end_if
$pX=$pX+1
//print("пропуск")
end_analyz:
if ( iskeydown(#space)=1 )
  halt
END_IF
end_cyc
$reit=0
$pw=0
while(arrsize($arr1)!0)
$reit=$reit+arrpop($arr1)*pow(10,$pw)
inc($pw)
end_cyc
//print($reit," рейта")
end_sub

Вообще это часть основного скрипта в котором используется 3 способа распознавания. Распознается список из 50 пунктов в котором есть словосочетание, соответствующее ему число-рейтинг, состояние этого пункта в списке, и номер под которым оно стоит в общем списке. В каждый момент времени видно только 6 пунктов списка. см. приложенный файл.

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

Текстовое распознавание названий - ввиду использования кириллицы и латинницы в разных регистрах(суммарно 120 символов) было решено заменить перебором готовых скринов словосочетаний, и если появляются новые или изменяются текущие, то делается автоматом скрин а потом я добавляю его в базу используемых изображений. Если искомое название найдено ему присваивается расшифровка из списка названий в текстовом файле
Code: [Select]
sub(analiz_nazvania)
$result=0
$name="неизв"
for($t=1,$t<54)
if($t<10)
IF_picture_in ($mX+216, $mY+104+60*$j, $mX+335, $mY+122+60*$j, StrConcat("Cl000",$t,".bmp"),-1,99)
$result=1
$name=INIREAD("config2.ini", $t, "Kl_names")
// print($name,$t)
$t=55
goto(end_analyz3)   
end_if
end_if
if($t>9)
IF_picture_in ($mX+216, $mY+104+60*$j, $mX+335, $mY+122+60*$j, StrConcat("Cl00",$t,".bmp"),-1,99)
$result=1
$name=INIREAD("config2.ini", $t, "Kl_names")
// print($name,$t)
$t=55
goto(end_analyz3)  
end_if
end_if
end_cyc
if($result=0)
screenshotex($mX+216, $mY+104+60*$j, $mX+335, $mY+122+60*$j,"Cl",0)
end_if
end_analyz3:
end_sub

Кстати здесь почему-то не работает GOTO пришлось принудительно завершать FOR изменением счетчика

Ну и третий способ разпознавания нумерации в списке реализован через PXLCRC. Это необходимо чтобы после пролистывания 6 раз вниз на следующую шестерку, можно было удостоверится что список успешно пролистан, именно 6 раз, и можно запускать две предыдущие процедуры. В остальных случаях его использование невозможно тк, в зависимости от положения в шестерке, рабочее название выглядит чуть по разному, а параметра currency как  if_picture_in здесь нет.
Code: [Select]
for($i=1,$i<$i_max+1)
print("---------------------")
print("Анализируем места:",$i,"-",$i+5)
getscreen($mX, $mY, $mX+760, $mY+650)
for($j=1,$j<7)
$k=1
again1:
                        $pX=$mX+505
$pY=$mY+119+60*$j
  analiz_reita()   //распознавание рейтинга
  analiz_sostoyania() //распознавание состояния
  analiz_nazvania() //распознавание названия

getscreen($mX, $mY, $mX+760, $mY+650)
if_picture_in($mX, $mY, $mX+760, $mY+650, "scroller3.bmp")
for($t=$i,$t<$i+6)
lclick($_return1,$_return2)
move($mx,$mY)
waitms(rnd(800,1000))
end_cyc
end_if
for($tc=1,$tc<10)
getscreen($mX, $mY, $mX+760, $mY+650)
$p1=PXLCRC ($mX+117, $mY+175, $mX+147, $mY+200)
if(INIREAD("config.ini", $i+6,"numbers")=$p1)
$tc=12
$i=$i+5
waitms(rnd(300,600))
end_if
if($tc=9)
print("Номер клана не распознан.")
print("перезапуск через 3-6 сек...")
waitms(rnd(3000,6000))
restart()
end_if
waitms(rnd(300,600))
end_cyc
end_cyc


Наконец ведется база данных по каждому знакомому изображению.

Code: [Select]

iniwrite("config2.ini","name",$name,$name)
iniwrite("config2.ini","mesto",$i+$j-1,$name)
iniwrite("config2.ini","reit",$reit,$name)
iniwrite("config2.ini","sost",$sost,$name)
iniwrite("config2.ini","last_time",$_ms,$name)
iniwrite("config2.ini","last_hour",$_time_h,$name)
iniwrite("config2.ini","last_min",$_time_m,$name)
iniwrite("config2.ini",$i+$j-1,$name,"top")
И по каждому проходу через некоторое время проверяется сменилось ли место у какого либо пункта  в списке, изменилось ли состояние или рейтинг. Если да, после этого генерируется строка в файл отчета.

Code: [Select]
if(($sost!INIREAD("config2.ini", "sost", $name))&($sost="война"))&($result_n=1))
print("Изменилось",INIREAD("config2.ini", "sost", $name),"-",$sost)
TFWRITE ("otchet.csv", StrConcat($i+$j-1,";",$reit,";",$name,";",int(($reit/iniREAD("config2.ini","reit","Valve"))*10),";",StrConcat(iniREAD("config2.ini","last_hour",$name),":", iniREAD("config2.ini","last_min",$name)),";iniREAD("config2.ini","time_exit",$name),";",int(($_ms-iniread("config2.ini","last_time",$name))/60000),";+60мин.;")) //- записывает строку в файл
end_if
Получается такой текст в файле:
Code: [Select]
39;478;Ночные стражи;5;19:59;5:59;2;+60мин.
15;765;Светлые ангелы;9;20:32;6:32;2;+60мин.
30;542;Бесславные убл.;6;21:34;7:34;1;+60мин.
Файл CSV открытый в экселе становится удобным табличным отчетом в реальном времени по любым изменениям в анализируемом списке:

М.   рейт   Кланы:          награда   в бой   Выходят:   прим. окно выхода   
39   478   Ночные стражи   5   19:59   5:59        2   +60мин.
15   765   Светлые ангелы   9   20:32   6:32        2   +60мин.
30   542   Бесславные убл.   6   21:34   7:34        1   +60мин.

P.S. Скрипт приведен выборочно, не полностью.
P.S.2. Есть одна очень полезная штука к которой я привык в версии 4.7 и никак не мог от нее долго отказаться. это показ номера текущей выполняемой строки в нижней панели состояния. С версии 4.7 SE ее убрали. Но когда что-то не работает или преестало работать в скрипте на 300-500 строк было очень удобно посмотреть на каком месте застряло выполнение. А не замусоривать скрипт множеством print-ов.
Подскажите, есть ли возможность включить ее обратно, может через файл конфигурации как-то.

4
Всем доброго дня. Мне нужен совет
Недавно написал алгоритм для автономной бессрочной игры в одном приложении контакта. Сейчас довожу его до идеала. Возникла проблема с написанием процедуры распознавания. В игре присутствует табличка из трех  заданий и два числа характеризующие каждое из них. Необходимо распознать каждое число состоящее из 1-3 цифр и значка за ним означающего что число кончилось.  Поскольку в кликере нет массивов, то пришлось делать через файл.
В первом файле названия картинок цифр znc1.bmp - цифра "1", и тд. плюс znc11.bmp - маркер стоящий после числа. 
во второй записываются все найденные числа.
процедура не работает, поскольку из файла с результатами числа считываются как текст.
Как считать из файла с результатами значения в виде чисел?

Code: [Select]
$a=670    //$mX-201
$b=420   //$mY+217
sub(recognize)
TFCLEAR("znc_result.txt", 0)
for($j, $j<5)
for ($i, $i<12)
  if_picture_in($a,$b,$a+65,$b+30, strreadln("znc.txt",$i), 90)
$a=$_return1+4
$b=$_return2-2
TFWRITE("znc_result.txt", $i)
if (($i=11)&($j<4))   
$res1= TFRead("znc_result.txt", $j-2)*10+TFRead("znc_result.txt", $j-1)
end_if
if (($i=11)&($j=4))
$res1= TFRead("znc_result.txt", $j-3)*100 + TFRead("znc_result.txt", $j-2)*10+TFRead("znc_result.txt", $j-1)
end_if
                                if (($i=12)&($j<4))   
$res2= TFRead("znc_result.txt", $j-2)*10+TFRead("znc_result.txt", $j-1)
end_if
if (($i=12)&($j=4))
$res2= TFRead("znc_result.txt", $j-3)*100 + TFRead("znc_result.txt", $j-2)*10+TFRead("znc_result.txt", $j-1)
end_if
$i=13
end_if
           end_cyc
end_cyc
end_sub

Pages: [1]