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

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

 Страниц (13): [1] 2 3 4 5 6 7 8 9 » В конец    

> Описание: Не могу понять как высчитывать координаты точек
Barabachka
Отправлено: 29 Сентября, 2013 - 13:22:07
Post Id



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


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




Прошу у Вас помощи в подробном разьяснении написания Вами вот этого кода
Код с пробного Вашего бота в Ла2-- function Ataka() . Хотел усовершенствовать его добавлением функции проверки последнего пикселя через 2-4 секунды после атаки моба, т.е. если атаки моба не было то он в не досягаемости или находится за стеной. Покопавшись в киборе и прочитав ваше пособие понял что я полный нуб в этой сфере. Я не смог определить даже координяты крестика закрытия таргета в найденом изображении Растерялся
(для просмотра ссылки Вам необходимо авторизоваться)
Прошу помощи в мини гайде нахождения координат
или 5 минут в голосовом чате RC (Отобразить)

Вот еще один не понятный момент
CODE:
if [color=red](baf==15)[/color]{baf=0; Baf();}//Бафаем себя
baf++;

Там баф проходит раз в 15мин?

(Отредактировано автором: 29 Сентября, 2013 - 13:25:58)

 
 Top
Kibor
Отправлено: 29 Сентября, 2013 - 18:44:10
Post Id



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


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




По порядку...

Для идентификации таблички моба применен поиск по такому изображению:

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

Нажмите для увеличения

Красным то что имеет не постоянный цвет из за полу прозрачности.

Поиск этой картинки осуществлен функцией Pozicion_Image()
CODE:
if (findimage(1, #Tab_Vid[0][0], 0, #P_T_X[0], #P_T_Y[0], 0, 0, xe, ye, -1)==0){messagebox("Не найден в игре рисунок таблички выделеного моба. Выделите моба и повторите попытку."); return -1;}
Zak_T_X=P_T_X[0]+160; Zak_T_Y=P_T_Y[0]+8;// Координаты закрытия таблички


Исходя из этой справки нам известно что в P_T_X[0] и P_T_Y[0] запишутся экранные координаты левого верхнего угла рисунка


Теперь зная координаты определенного пикселя (в данном случае левого верхнего угла рисунка который мы искали) не трудно рассчитать координаты центра крестика на нем. для этого к примеру в паинте открыли рисунок и узнали что координаты крестика = (координаты левого верхнего угла рисунка плюс по X 160, по Y 8):


Поэтому координаты крестика равны
CODE:

Zak_T_X=P_T_X[0]+160; Zak_T_Y=P_T_Y[0]+8;// Координаты закрытия таблички


Аналогично можно найти координаты первого и последнего пикселя XP.




 Barabachka пишет:
Вот еще один не понятный момент
CODE:
if (baf==15){baf=0; Baf();}//Бафаем себя
baf++;

Там баф проходит раз в 15мин?


Не. Там просто стоит счетчик и каждый 15 тый цикл нажимается на баф. Циклы очень частые.
Просто если баф не откатил, он не пройдет и все. То есть баф получится постоянным, как спадет так бафнет.


По поводу логики как лучше реализовать, то тут не помогу, так как этой игры у меня сейчас нет и я точно не помню логику того скрипта. Я пишу много примеров к разным играм в которые сам не играю и естественно что мои скрипты имеют не самое лучшее решение в конкретной игре. Данный скрипт так же является просто демонстративным и может быть улучшен или вообще (лучше) переписан с нуля человеком который достаточно ознакомился с Кибор и хорошо знает нюансы игры.
 
 Top
Barabachka
Отправлено: 29 Сентября, 2013 - 21:39:11
Post Id



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


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




Оказалось все намного проще чем я думал Закатив глазки
Оказывается что программа каждый раз когда всплывает
CODE:
getcolor(P_T_X[0]+18, P_T_Y[0]+22)
она ссылается на изображение этой таблички и относительно её ищет координаты пикселя который мне нужно найти
Сами координаты смотреть через наведение мыши и Ctrl+Shift+S в ячейках клиентской части окна Улыбка
Спасибо Kibor, но я только начал постигать эту программу и буду еще много раз вас беспокоить)
 
 Top
Kibor
Отправлено: 30 Сентября, 2013 - 03:51:15
Post Id



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


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




 Barabachka пишет:
Оказывается что программа каждый раз когда всплывает
CODE:
getcolor(P_T_X[0]+18, P_T_Y[0]+22)
она ссылается на изображение этой таблички и относительно её ищет координаты пикселя который мне нужно найти


Ага Подмигивание . В P_T_X[0], P_T_Y[0] находятся координаты определенного пикселя таблички (верхнего левого угла рисунка)


и прибавив 18 и 22 мы узнаем координаты первого на XP пикселя. Так же узнается последний пиксель.


 Barabachka пишет:
Сами координаты смотреть через наведение мыши и Ctrl+Shift+S в ячейках клиентской части окна

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

По поводу цвета... В паинте мы узнаем цвет в RGB, нам надо в int одним числом. Поэтому когда узнали смещение можно при отладке программы просто узнать цвет по координатам которые мы нашли:
CODE:
messagebox(getcolor(P_T_X[0]+смещен_X, P_T_Y[0]+смещен_y));

Потом этот цвет записать в скрипт.

 Barabachka пишет:
Спасибо Kibor, но я только начал постигать эту программу и буду еще много раз вас беспокоить)

Пожалуйста, беспокойте Улыбка . Всегда рад помочь советом или объяснением.
 
 Top
Nikolo12
Отправлено: 30 Сентября, 2013 - 12:53:51
Post Id



Пользователь
Прохожий


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




Подскажите команду закрытия, завершения работы Kibor, аналог STOP, END или AppTerminate при нажатии key(). На WinXP32 не дает развернуть окно с работающем Kibor, диспетчер задач мелькает.
 
 Top
Barabachka
Отправлено: 30 Сентября, 2013 - 12:57:03
Post Id



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


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




Мда вот про паинт я многого незнал)
А вообще прийду остальное все протесчу.
Если чесно сейчас линейку превратили разрабы в что-то однообразное, а вот когда в киборе чтонить намутиш и поиграешсо (да если все получаетсо) приходит чувство удовлетворения, какое было раньше от игры.
(Добавление)
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу.
(Добавление)
 Цитата:
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу.

Я пользуюсь ей, а вот если приостановить и запустить с места остановки то хз.
 
 Top
Nikolo12
Отправлено: 30 Сентября, 2013 - 13:15:25
Post Id



Пользователь
Прохожий


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




 Barabachka пишет:
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу. Я пользуюсь ей, а вот если приостановить и запустить с места остановки то хз.

Ясно, спс. В правом углу проги и не заметил.
В общих командах Pause/break нет, методом тыка не проходит.
 
 Top
Kibor
Отправлено: 30 Сентября, 2013 - 13:21:33
Post Id



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


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




 Nikolo12 пишет:
Подскажите команду закрытия, завершения работы Kibor, аналог STOP, END или AppTerminate при нажатии key(). На WinXP32 не дает развернуть окно с работающем Kibor, диспетчер задач мелькает.

Во время работы скрипта Кибор нельзя разворачивать. Надо сначала остановить скрипт как сказал Barabachka , Ctrl+Shift+Z. Потом можно закрыть Кибор.

Barabachka , Мне больше нравится кодить под игры, чем играть. Хороший способ слезть с задродства в игре Радость

 Barabachka пишет:
если приостановить и запустить с места остановки то хз


Для этого в нужное место, где ожидается приостановка по требованию можно вставить такой код:
CODE:
a:
//Скрипт
if (getkeystate(192)==1)messagebox("Пауза.");//Если нажали ~
//Скрипт
goto a;


Коды клавиш для getkeystate
 
 Top
Barabachka
Отправлено: 30 Сентября, 2013 - 13:24:38
Post Id



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


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




Да вот еще что забыл если в этот момент в программе
CODE:
sleep(...)
то она не отвечает, просто ждет свой слип.
 
 Top
Kibor
Отправлено: 30 Сентября, 2013 - 13:32:43
Post Id



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


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




И не должна отвечать. sleep команда приостановки программы.
На это время процесс прекращает работу, что способствует разгрузке процессора.

В замкнутых циклах очень помогает без ущерба для производительности.
Вот например такой цикл загрузит процессор:
CODE:
a:
goto a;


Ну а такой:
CODE:
a:
sleep(10);
goto a;


Выполнит тот же цикл без нагрузки.

Если sleep использовать для пауз долгих, то лучше так сделать.
 
 Top
Страниц (13): [1] 2 3 4 5 6 7 8 9 » В конец
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by