Кибор » Кибор - Интегрированная среда разработки ботов » Предложения по программе » Функция возвращающая сколько времени прошло с начала looptime

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

1. Nikanr - 21 Апреля, 2021 - 08:50:34 - перейти к сообщению
Иногда нужно проверить сколько времени прошло с момента старта looptime. Можно сделать конечно при помощи gettime и переменной. Что то по типу такого:

CODE:


looptime(5000){

pause(1);

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

2. Kibor - 21 Апреля, 2021 - 08:58:53 - перейти к сообщению
 Nikanr пишет:
Иногда нужно проверить сколько времени прошло с момента старта looptime

Зачем?
looptime сам по себе подразумевает что будет работать указанное время.
3. Nikanr - 21 Апреля, 2021 - 09:30:50 - перейти к сообщению
Пишу бота для 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
(Добавление)
Хотя вообще можно воспользоваться таймером
4. Kibor - 21 Апреля, 2021 - 10:39:59 - перейти к сообщению
 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 // отпустить


Powered by ExBB FM 1.0 Final