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

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

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

> Без описания
Nikanr
Отправлено: 21 Апреля, 2021 - 16:50:34
Post Id



Пользователь
Специалист


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




Иногда нужно проверить сколько времени прошло с момента старта looptime. Можно сделать конечно при помощи gettime и переменной. Что то по типу такого:

CODE:


looptime(5000){

pause(1);

if(timepassed() == 400) break;
}

(Отредактировано автором: 21 Апреля, 2021 - 16:52:12)

 
 Top
Kibor
Отправлено: 21 Апреля, 2021 - 16:58:53
Post Id



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


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




 Nikanr пишет:
Иногда нужно проверить сколько времени прошло с момента старта looptime

Зачем?
looptime сам по себе подразумевает что будет работать указанное время.
 
 Top
Nikanr
Отправлено: 21 Апреля, 2021 - 17:30:50
Post Id



Пользователь
Специалист


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




Пишу бота для 3d игры в nox, для перемещения персонажа используется управление движением как в MOBA (в данном случае посылаем зажатие ПКМ по координатам, и персонаж двигается в определенную сторону). Нужно что бы персонаж двигался в определенную сторону некоторое время и искал при этом некие пиксели на экране. Псевдокод:

CODE:
sendmousedown(послали клик в направлении движения)

looptime(10000){ // двигаемся некоторое время и ищем обьект

if(findheapcolor() == 1){ // как нашли обьект

sendmouseup // отпустить

// некие действия

goto me;
}
}

sendmouseup

me:;


Но может возникнуть проблема: зажатие ПКМ в направлении движения мы послали, а персонаж не сдвинулся с места, хотя управление движением в MOBA показывает что ПКМ зажата. Что бы этого избежать делаю скриншот местности (она всегда статична когда персонаж не перемещается) и через некоторое время проверяю: если местность не изменилась - отпустить клавишу, пауза, нажать клавишу, перезапустить looptime. Псевдокод:


CODE:
int счетчик сканирования = 0

sendmousedown(послали клик в направлении движения)

looptime(10000){ // двигаемся некоторое время и ищем обьект

if(findheapcolor() == 1){ // как нашли обьект

sendmouseup // отпустить

// некие действия

goto me;
}

счетчик сканирования ++

if(счетчик сканирования == 100) скриншот местности

if(счетчик сканирования == 500) поиск местности. Если найдена - отпустить клавишу, пауза, нажать клавишу, перезапустить looptime
}

sendmouseup

me:;


Хотя возможно это действительно лишняя функция т.к частный случай в конкретной игре да и нужно будет не только для looptime
(Добавление)
Хотя вообще можно воспользоваться таймером

(Отредактировано автором: 21 Апреля, 2021 - 17:32:01)

 
 Top
Kibor
Отправлено: 21 Апреля, 2021 - 18:39:59
Post Id



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


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




 Nikanr пишет:
Хотя возможно это действительно лишняя функция т.к частный случай в конкретной игре да и нужно будет не только для looptime


Да. Не для looptime

Одна переменная и if вполне заменяет.

CODE:
A:;
int tim = gettime();
int tim1 = gettime();

sendmousedown(послали клик в направлении движения)

looptime(100000){ // двигаемся некоторое время и ищем обьект

if(findheapcolor() == 1){ // как нашли обьект


// некие действия

break;
}


if(gettime()-tim > 5000) {tim = gettime(); скриншот местности}

if(gettime()-tim1 > 15000)
{
tim1 = gettime();
поиск местности. Если найдена - sendmouseup, пауза, перезапустить goto A;
}
}

sendmouseup // отпустить

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Предложения по программе »


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




Powered by