Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Без описания
HACMOPK
Отправлено: 19 Августа, 2013 - 15:22:08
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013  
Репутация: 4




Здравствуйте. Хотел написать скрипт для игры Клац, но как всегда не хватает знаний.
В игре вообще незадействованна мышь, наведение на цель происходит с помощью кнопок Z X.
понимаю что здесь нужно работать с углами но как передать время нажатия ума не приложу.
 
 Top
Andrew
Отправлено: 19 Августа, 2013 - 16:51:52
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013  
Откуда: Россия
Репутация: 9




HACMOPK , Так я посмотрел, сейчас скрипт набросаю, пока могу сказать, что экран надо разделить на несколько частей и искать противника по частям экрана а не сразу. Ну думаю так. Сейчас подробней рассмотрю игру.
(Добавление)
Сыграл пару боев, что об игре:
  • Карта динамическая почти везде, некоторые пиксили только не динамичны, статического экрана почти нет.
  • Если даже искать противника, стоя на одном месте, то при попадании экран трясется и опять же экран полностью динамичен.
  • Можно конечно находить союзников, только у союзников полоска хп, как я понял, расцветки танков у всех разные-предугадать невозможно.
    Сейчас ещё в другие бои по захожу, посмотрю.
  •  
     Top
    HACMOPK
    Отправлено: 19 Августа, 2013 - 17:27:17
    Post Id



    Пользователь
    Участник


    Покинул форум
    Сообщений всего: 84
    Дата рег-ции: Май 2013  
    Репутация: 4




    из того к чему можно прицепится только ник игрока не меняет цвет
     
     Top
    Andrew
    Отправлено: 19 Августа, 2013 - 17:34:54
    Post Id



    Пользователь
    Участник


    Покинул форум
    Сообщений всего: 118
    Дата рег-ции: Июнь 2013  
    Откуда: Россия
    Репутация: 9




    HACMOPK , Нет, для меня такая игра слишком тяжелая, зацепится не за что, по крайней мере для меня, может быть Кибор сможет Вам помочь, извините.
     
     Top
    HACMOPK
    Отправлено: 19 Августа, 2013 - 17:45:22
    Post Id



    Пользователь
    Участник


    Покинул форум
    Сообщений всего: 84
    Дата рег-ции: Май 2013  
    Репутация: 4




     Andrew пишет:
    HACMOPK , Нет, для меня такая игра слишком тяжелая, зацепится не за что, по крайней мере для меня, может быть Кибор сможет Вам помочь, извините.

    Все равно спасибо.
    Нашел на Clickermann вот такой скрипт работает немного кривовато.
     
     Top
    Kibor
    Отправлено: 19 Августа, 2013 - 19:11:06
    Post Id



    Администратор
    Эксперт


    Покинул форум
    Сообщений всего: 8217
    Дата рег-ции: Март 2013  
    Откуда: Одесса
    Репутация: 357




     HACMOPK пишет:
    вот такой скрипт

    Какой принцип работы того скрипта?
    Если просто крутить башней и искать определенные цветные пикселя перед собой то по моему это ерунда, но к сожалению мне ничего не приходит лучшего в голову.
    Можно ли его переложить на скрипт Кибор и посмотреть как его улучшать?

     HACMOPK пишет:
    как передать время нажатия ума не приложу

    Если можно идентифицировать врага по цвету пикселя то примерно такой код (псевдо)
    Время нажатия передавать не надо. Надо просто в цикле проверять положение искомого пикселя и нажимать на кнопку поворота.

    CODE:
    a: if (есть на экране искомый пиксель)
    {
    найти положение искомого цвета пикселя;
    if (пиксель_искомый_не по центру)
    {
    посчитать какую кнопку надо нажать;
    нажать на кнопку поворота;
    goto a;
    }
    жать пробел;
    }
    goto a;
     
     Top
    HACMOPK
    Отправлено: 19 Августа, 2013 - 20:30:19
    Post Id



    Пользователь
    Участник


    Покинул форум
    Сообщений всего: 84
    Дата рег-ции: Май 2013  
    Репутация: 4




     Kibor пишет:
    Если просто крутить башней и искать определенные цветные пикселя перед собой то по моему это ерунда, но к сожалению мне ничего не приходит лучшего в голову.

    немного не так в скрипте задано время в миллисекундах (W-это время поворота башни на 90°) далее все что слева имеет отрицательное значение, все что справа положительное. Центр экрана принимается за начальную точку отсчета или за 0°, далее идет поиск цвета ±5°и так далее т.е получается 18 зон и в зависимости от того где был найден цвет будет нажата та или иная клавиша определенное время. Потом снова происходит поиск цвета.
     Kibor пишет:

    Время нажатия передавать не надо. Надо просто в цикле проверять положение искомого пикселя и нажимать на кнопку поворота.

    Думал о таком варианте, но думаю будет большая нагрузка на процессор и при обнаружении нескольких цветов в разных частях экрана ... в общем ничего хорошего.
     
     Top
    Kibor
    Отправлено: 20 Августа, 2013 - 13:03:16
    Post Id



    Администратор
    Эксперт


    Покинул форум
    Сообщений всего: 8217
    Дата рег-ции: Март 2013  
    Откуда: Одесса
    Репутация: 357




     HACMOPK пишет:
    будет большая нагрузка на процессор

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



     HACMOPK пишет:
    при обнаружении нескольких цветов в разных частях экрана

    Надо сортировать найденные цвета по расстоянию с помощью sort... Тогда будет учитываться ближний к центру...


    Вот примерный код самонаведения если враг в области видимости (его ник). Не учитывается область экрана справа где идут данные боя. Чат и все отключено.
    Этот код очень не оптимален можно еще дорабатывать для улучшения результатов.
    В основе предложенный мной алгоритм.

    Главная проблема инерция картинки при повороте...

    Для боев красные и синие.
    В коде надо выбирать строки:
    color_vrag[0][0]=13597755;//я красн
    //color_vrag[0][0]=1389551;//я синий

    CODE:
    int col, ex, ey;
    getdisplay(col, ex, ey);
    int C_ex=ex/2, C_ey=ey/2;
    int v_X[5000], v_Y[5000];
    int k;
    int rast;
    int color_vrag[1][1];
    int min_max=15;
    color_vrag[0][0]=13597755;//я красн
    //color_vrag[0][0]=1389551;//я синий
    int rrt=100;
    int rrt1=50;
    int rast1;
    int pr;
    int bx, bz, bp;



    sleep(1000);

    key('z');
    key('x');
    key(SPACE);


    lo:;
    key('c');

    if (bz==1) {bz=0; keyup('z');}
    if (bx==1) {bx=0; keyup('x');}
    if (bp==1) {bp=0; keyup(SPACE);}
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);


    if (k>0)
    {


    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    rast1=rast;
    if (rast1<0)rast1=-rast1;
    ///////////////////////////////////////////////////
    if (rast1<=rrt)
    {
    bp=1; keydown(SPACE);
    bit();
    bp=0; keyup(SPACE);
    goto lo;
    }

    if (rast>rrt)
    {
    bz=1; keydown('z');
    r: k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    if (rast>rrt)goto r;
    bz=0; keyup('z');
    bp=1; keydown(SPACE);
    keydown('x');
    sleep(200);
    keyup('x');
    bit();
    bp=0; keyup(SPACE);
    }
    goto lo;
    }


    if (rast<-rrt)
    {
    bx=1; keydown('x');
    r1: k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    if (rast<-rrt)goto r1;
    bx=0; keyup('x');
    bp=1; keydown(SPACE);
    keydown('z');
    sleep(200);
    keyup('z');
    bit();
    bp=0; keyup(SPACE);
    }
    goto lo;
    }
    ////////////////////////////////////////////////
    }
    goto lo;


    function bit()
    {
    pr=0;
    q: k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    rast1=rast;
    if (rast1<0)rast1=-rast1;
    if (rast1<=rrt1)
    {
    pr=0;
    sleep(20);
    goto q;
    }


    }
    if (pr<10)
    {
    pr++;
    sleep(5);
    goto q;
    }
    }
     
     Top
    Kibor
    Отправлено: 22 Августа, 2013 - 18:41:47
    Post Id



    Администратор
    Эксперт


    Покинул форум
    Сообщений всего: 8217
    Дата рег-ции: Март 2013  
    Откуда: Одесса
    Репутация: 357




    Вот доработанный скрипт для Танки Онлайн ( tankionline com )
    Видео работы: автонаводки и боя в Танки онлайн
    довольно неплохо наводит прицел на цели и бьет в области видимости экрана.
    Можно использовать как в игре управляя танком, так и поставив танк где то в углу и наблюдать со стороны..

    Настроен на бои красные синие...
    В скрипте надо настроить область поиска так , что бы не попал чат боя (тот что справа)в поиск. Чат сообщений отключить. Все отключить...

    Область поиска настраивается так:
    findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150......
    0-так оставить
    118 - координата у верхнего левого угла. указать ниже панелей в игре
    ex-280 - 280 это ширина чата боя..
    ey-150 - 150 это высота на которую надо поднять нижнюю часть области поиска (что б не попала панель задач и браузер)

    Область правого чата боя слепая... там не видит...

    Может позже выложу полноценного бота, который будет сам крутить башкой...
    Пока ищется только в пределах видимости..
    Красным что можно подстраивать
    Настроен на экран 1366 768
     Цитата:
    int col, ex, ey;
    getdisplay(col, ex, ey);
    int C_ex=ex/2, C_ey=ey/2;
    int v_X[5000], v_Y[5000];
    int k;
    int rast;
    int color_vrag[1][1];

    color_vrag[0][0]=13597755;//я красн //Можно подобрать цвет синего ника оптимальнее с помощью редактора Кибор
    //color_vrag[0][0]=1389551;//я синий//Можно подобрать цвет красного ника оптимальнее с помощью редактора Кибор

    int коэфициент_поворота=2;//От этого зависит скорость наводки, но так же и инерция проскакивания.
    int точность_чистовой_наводки=10;//Эту точность держит при стрельбе
    int точность_наводки=50;//Это точность при наводке
    int точность_наводки_бить=100;//Это точность при которой начинает бить.
    int задействовать_при_наводке_корпус=0;//0-не задействовать 1-задействовать с башней
    int min_max=15;//Разбежность цвета. Точность определения (уменьшать пока нормально наводит на врага)


    int razn;


    int rast1;
    int pr;
    int bp=0;



    sleep(1000);

    key('z');
    key('x');
    key(SPACE);


    lo:;
    key('c');


    if (bp==1) {bp=0; keyup(SPACE);}
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);


    if (k>0)
    {
    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    if (rast>точность_наводки)Pov_z();
    if (rast<-точность_наводки)Pov_x();

    rast1=rast;
    if (rast1<0)rast1=-rast1;
    if (rast1<точность_наводки_бить)
    {
    bp=1; keydown(SPACE);
    if (rast>точность_чистовой_наводки){keydown('z');sleep(100);keyup('z');}
    if (rast<-точность_чистовой_наводки){keydown('x');sleep(100);keyup('x');}
    bit();
    }
    if (bp==1) {bp=0; keyup(SPACE);}

    }
    goto lo;

    /////////////////////////////////////////

    function Pov_z()
    {
    r: rast1=rast;
    if (rast1<0)rast1=-rast1;
    razn=rast1*коэфициент_поворота;

    keydown('z');
    if (задействовать_при_наводке_корпус==1)keydown(LEFT);
    sleep(razn);
    if (задействовать_при_наводке_корпус==1)keyup(LEFT);
    keyup('z');
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, C_ex, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(C_ex, C_ey-188, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];

    if (rast>razn/2)goto r;
    if (rast1<точность_наводки_бить){bp=1; keydown(SPACE);}
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, C_ex, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0){sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);rast=C_ex-v_X[0];}
    return;
    }
    if (rast1<точность_наводки_бить){bp=1; keydown(SPACE);}
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, C_ex, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0){sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);rast=C_ex-v_X[0];}
    }

    function Pov_x()
    {
    r: rast1=rast;
    if (rast1<0)rast1=-rast1;
    razn=rast1*коэфициент_поворота;

    keydown('x');
    if (задействовать_при_наводке_корпус==1)keydown(RIGHT);
    sleep(razn);
    if (задействовать_при_наводке_корпус==1)keyup(RIGHT);
    keyup('x');
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], C_ex, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(0, C_ey, #v_X[0], #v_Y[0], k);
    rast=v_X[0];

    if (rast<-(razn/2))goto r;
    if (rast1<точность_наводки_бить){bp=1; keydown(SPACE);}
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], C_ex, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0){sort(0, C_ey, #v_X[0], #v_Y[0], k);rast=v_X[0];}
    return;
    }
    if (rast1<точность_наводки_бить){bp=1; keydown(SPACE);}
    sleep(100);
    k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], C_ex, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0){sort(0, C_ey, #v_X[0], #v_Y[0], k);rast=v_X[0];}
    }



    function bit()
    {
    pr=0;
    q: k=findimage(-1, #color_vrag[0][0], 0, #v_X[0], #v_Y[0], 0, 118, ex-280, ey-150, min_max, min_max, min_max, min_max, min_max, min_max, 100, 1, -1);
    if (k>0)
    {
    sort(C_ex, C_ey, #v_X[0], #v_Y[0], k);
    rast=C_ex-v_X[0];
    if (rast>точность_наводки)Pov_z();
    if (rast<-точность_наводки)Pov_x();
    if (rast>точность_чистовой_наводки){keydown('z');sleep(100);keyup('z');}
    if (rast<-точность_чистовой_наводки){keydown('x');sleep(100);keyup('x');}
    rast1=rast;
    if (rast1<0)rast1=-rast1;
    if (rast1<точность_наводки_бить)
    {
    pr=0;
    sleep(20);
    goto q;
    }

    }
    if (pr<20)
    {
    pr++;
    sleep(5);
    goto q;
    }
    }



    Тема закрыта!
     
     Top
    Страниц (1): [1]
    Сейчас эту тему просматривают: 6 (гостей: 6, зарегистрированных: 0)
    « Вопросы и решение проблем »


    Все гости форума могут просматривать этот раздел.
    Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
    Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
     




    Powered by