Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Прошу помощи в обучении использовать "Кибор"

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

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

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

Там баф проходит раз в 15мин?
2. Kibor - 29 Сентября, 2013 - 10:44:10 - перейти к сообщению
По порядку...

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

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

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

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

Поиск этой картинки осуществлен функцией 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 тый цикл нажимается на баф. Циклы очень частые.
Просто если баф не откатил, он не пройдет и все. То есть баф получится постоянным, как спадет так бафнет.


По поводу логики как лучше реализовать, то тут не помогу, так как этой игры у меня сейчас нет и я точно не помню логику того скрипта. Я пишу много примеров к разным играм в которые сам не играю и естественно что мои скрипты имеют не самое лучшее решение в конкретной игре. Данный скрипт так же является просто демонстративным и может быть улучшен или вообще (лучше) переписан с нуля человеком который достаточно ознакомился с Кибор и хорошо знает нюансы игры.
3. Barabachka - 29 Сентября, 2013 - 13:39:11 - перейти к сообщению
Оказалось все намного проще чем я думал Закатив глазки
Оказывается что программа каждый раз когда всплывает
CODE:
getcolor(P_T_X[0]+18, P_T_Y[0]+22)
она ссылается на изображение этой таблички и относительно её ищет координаты пикселя который мне нужно найти
Сами координаты смотреть через наведение мыши и Ctrl+Shift+S в ячейках клиентской части окна Улыбка
Спасибо Kibor, но я только начал постигать эту программу и буду еще много раз вас беспокоить)
4. Kibor - 29 Сентября, 2013 - 19:51:15 - перейти к сообщению
 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, но я только начал постигать эту программу и буду еще много раз вас беспокоить)

Пожалуйста, беспокойте Улыбка . Всегда рад помочь советом или объяснением.
5. Nikolo12 - 30 Сентября, 2013 - 04:53:51 - перейти к сообщению
Подскажите команду закрытия, завершения работы Kibor, аналог STOP, END или AppTerminate при нажатии key(). На WinXP32 не дает развернуть окно с работающем Kibor, диспетчер задач мелькает.
6. Barabachka - 30 Сентября, 2013 - 04:57:03 - перейти к сообщению
Мда вот про паинт я многого незнал)
А вообще прийду остальное все протесчу.
Если чесно сейчас линейку превратили разрабы в что-то однообразное, а вот когда в киборе чтонить намутиш и поиграешсо (да если все получаетсо) приходит чувство удовлетворения, какое было раньше от игры.
(Добавление)
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу.
(Добавление)
 Цитата:
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу.

Я пользуюсь ей, а вот если приостановить и запустить с места остановки то хз.
7. Nikolo12 - 30 Сентября, 2013 - 05:15:25 - перейти к сообщению
 Barabachka пишет:
Ctrl+Shift+Z---команда стоп в киборе, останавливает программу. Я пользуюсь ей, а вот если приостановить и запустить с места остановки то хз.

Ясно, спс. В правом углу проги и не заметил.
В общих командах Pause/break нет, методом тыка не проходит.
8. Kibor - 30 Сентября, 2013 - 05:21:33 - перейти к сообщению
 Nikolo12 пишет:
Подскажите команду закрытия, завершения работы Kibor, аналог STOP, END или AppTerminate при нажатии key(). На WinXP32 не дает развернуть окно с работающем Kibor, диспетчер задач мелькает.

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

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

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


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


Коды клавиш для getkeystate
9. Barabachka - 30 Сентября, 2013 - 05:24:38 - перейти к сообщению
Да вот еще что забыл если в этот момент в программе
CODE:
sleep(...)
то она не отвечает, просто ждет свой слип.
10. Kibor - 30 Сентября, 2013 - 05:32:43 - перейти к сообщению
И не должна отвечать. sleep команда приостановки программы.
На это время процесс прекращает работу, что способствует разгрузке процессора.

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


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


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

Если sleep использовать для пауз долгих, то лучше так сделать.

Powered by ExBB FM 1.0 Final