Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как можно выполнить данные скрипты?

Страниц (4): « 1 2 3 [4]
 

31. Andrew - 06 Августа, 2013 - 15:32:55 - перейти к сообщению
Здравствуйте Kibor .
В мой мозг взбрела новая идея Хм
Можно ли реализовать такое:
 Цитата:
Данная функция проверяет статичность экрана. Нужна для выжидания паузы. Пока персонаж бежит экран статичен только в некоторых местах-низ, чат, хп, ник (примеры статики), а когда он прибежит-он стоит на месте А?! , и окружающая среда становиться более менее статична.
CODE:

Идем;
Ждем статичность экрана на 1/2;
Идем;

Можно ли выполнить такое?

Можно было брать для каждого места, на которое приходит персонаж, делать скрин и сравнивать с неполным совпадением... но их нужно много. Можно даже не искать статичности всего экрана (игрового окна), а только части (квадрат левого угла, место над ником и др.). Подскажите пожалуйста, возможно ли выполнить данную функцию?
P.S. На слово "Можно" меня просто поперло Радость
32. Kibor - 06 Августа, 2013 - 16:26:10 - перейти к сообщению
Я так понял это для определения того момента когда персонаж уже дошел до точки и стал?

В принципе можно... К примеру мы проверяем статичность части экрана 200 на 100 в нижнем левом углу как на рисунке.
Для этого пишем такой код:

CODE:
//Кликнули мышкой для передвижения перса
int din;
j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);//делаем скрин части экрана в координатах 5, 380, 205, 480 относительно левого верхнего угла окна игры w
sleep(1000);//пауза 1 сек
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w);// сравниваем с скрином и получаем количество очагов динамики. их может поместиться максимум 12 при динамичном экране так как ищутся объемы размерами 50 на 33.
//Объем считается динамичным если все пикселя входящие в желтый крестик размером 45 на 30 содержит все динамичные пикселя
if (din>6) goto j;//Больше половины участка динамика. проверка опять
//Если количество очагов динамики меньше половины - экран статика.
//Идем дальше


Но может так быть что в пределах рамки будет моб или другой перс стоять и там будет более 50 процентов динамики. Лучше проверять разные части экрана. То есть не в одном углу а раскидать эти 12 проверок по разным местам.

33. Andrew - 06 Августа, 2013 - 17:37:33 - перейти к сообщению
Kibor , И в тысячный раз спасибо.
Создал функцию Хорошо
CODE:
win w=window ("Drakensang Online: браузерная онлайн-игра в стиле фэнтези", "QWidget", -1);
sleep(500);
int din; int x[0]; int y[0];
activate(w);
sleep(500);

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

mouse (LEFT, 823, 233); // Идем
sleep(1000);

dynamic(); // Ждем, когда перс придет на место

mouse (RIGHT, 823, 233); // Пришли, стреляем
sleep(700);
mouse (RIGHT, 823, 233);
sleep(7000)

function dynamic()
{
j:
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 380, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 380, w);
if (din>6)
{goto j;}

else
{sleep(500);} // После того как пришли на место, даем пролагаться
}
34. Kibor - 06 Августа, 2013 - 18:02:59 - перейти к сообщению
Пожалуйста. Обращайтесь.

Пару замечаний...

 Andrew пишет:
int din; int x[0]; int y[0];

Надо выделить память минимум для 12 координат:
 Andrew пишет:
din=finddynamic(12,

А тут вообще память выделяется 0...
Получается ошибка и finddynamic вернет не количество объектов а -1

finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 380, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 380, w);

Где область поиска? Координаты Y левого верхнего и правого нижнего углов прямоугольника одинаковы.

Тут можно было обойтись без else. Все равно если условие не выполнено управление попадет на следующую строку:
CODE:
j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w);
if (din>6) goto j;
sleep(500); // После того как пришли на место, даем пролагаться


А можно вообще так:
CODE:
j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);
sleep(5000);
if (finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w)>6) goto j;
sleep(500); // После того как пришли на место, даем пролагаться
35. Andrew - 06 Августа, 2013 - 18:42:55 - перейти к сообщению
Огорчение А у меня все так замечательно работало.. Я еще несколько раз перепроверил перед тем как выложить((
36. Kibor - 06 Августа, 2013 - 18:55:54 - перейти к сообщению
Улыбка
Просто перс успевал добежать за время паузы 5 сек.
Но свое назначение эта функция не выполняла.
Кстати паузу можно поставить меньше. 2 сек вполне должно хватить.
37. Andrew - 06 Августа, 2013 - 19:04:09 - перейти к сообщению
Нет нет нееет Радость
5 секунд я посааил на проверке, посмотреть будет персоонаж стоять или сразу начнеть стрелять. Когда выкладывал забыл убрать «0», что бы было 500 м.сек. Добегал он до места за секунду с небольшим Улыбка
38. Kibor - 06 Августа, 2013 - 19:09:37 - перейти к сообщению
 Andrew пишет:
mouse (LEFT, 823, 233); // Идем
sleep(1000);

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

Powered by ExBB FM 1.0 Final