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

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

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

> Описание: При использовании операторов IF Else перемещение в координаты условия
inre25
Отправлено: 06 Января, 2020 - 13:28:56
Post Id



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


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




Создаю бота для стрельбы по цели. Необходимо перемещение курсора в заданные координаты по оси Х. координаты Y константа.
Работа бота в оконном режиме (sx_KIB sy_KIB) координаты окна и области поиска все есть.
По изображению есть координата цели по оси х. в коде x_цель.

Не понимаю как это прописать в коде

Требуется чтобы, чем больше расстояние до цели по оси х от центра( в моем случае центр это 574 +-24 пикселя и постепенно увеличивается либо уменьшается) тем менее был разбег смещения мыши. То есть если x_цель находится в диапазоне от 550 до 598 то выполняется этот код mousemove(sx_KIB+ex1+x_цель, sy_KIB+400);
Я пишу:

if (x_цель=[550][594])
{
mousemove(sx_KIB+ex1+x_цель, sy_KIB+400);
}
Но походу что-то не правильно, только что?

Далее мне необходимо чем дальше будет разбег от центра тем меньше смещение, то есть если x_цель находится в диапазоне от 526 до 549 или от 595 до 619 то
mousemove(sx_KIB+ex1+x_цель+12, sy_KIB+400)); или mousemove(sx_KIB+ex1+x_цель-12, sy_KIB+400));
пишу:
else
{
if (x_цель=[526][549])
mousemove(sx_KIB+ex1+x_цель+12, sy_KIB+400));
}
else
{
if (x_цель=[595][619])
mousemove(sx_KIB+ex1+x_цель-12, sy_KIB+400));
}

и так пока не дойду по уменьшению до 20, а по увеличению до 1128, но чем выше разбег тем сильнее сглаживание, то есть если if (x_цель=[502][525]) . то
mousemove(sx_KIB+ex1+x_цель+24, sy_KIB+400));

3-й разбег смещаем на x_цель+-24, 4-й разбег смещаем на x_цель+-36, 5-й разбег смещаем на x_цель+-48 и т.д
Надеюсь логика понятна. Осталось понять как это сделать.....
 
 Top
Zireael
Отправлено: 06 Января, 2020 - 15:56:20
Post Id



Пользователь
Эксперт


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




 Цитата:
574 +-24 пикселя
от 595 до 619

Тогда уж от 598 до 622.
 Цитата:
if (x_цель=[550][594])

CODE:
if (x_цель >= 550 && x_цель <= 594) // если x_цель больше или равно 550 и x_цель меньше или равно 594

 Цитата:
3-й разбег смещаем на x_цель+-24, 4-й разбег смещаем на x_цель+-36, 5-й разбег смещаем на x_цель+-48 и т.д

Смещение с фиксированным шагом, можно не заморачиваться с нагромождением if/else.
CODE:
int x_цель = 530;
int delta_x = func(x_цель); // вызов функции, вернёт на сколько нужно сместить
messagebox(delta_x);

// mousemove(sx_KIB+ex1+x_цель + delta_x, sy_KIB+400));


function func(int x)
{
if(x==574)return 0;

int delta;
if(x < 574)delta=ceil((574 - x_цель) / 24 - 1.000001) * 12;
else delta=ceil((574 - x_цель) / 24 + 0.000001) * 12;
return delta;
}

function ceil (double value){int a; if(value>=0)a=value+1; else a=value; return a;}
 
 Top
inre25
Отправлено: 07 Января, 2020 - 08:28:38
Post Id



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


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




if (x_цель >= 550 && x_цель <= 594) // если x_цель больше или равно 550 и x_цель меньше или равно 594
Да больше или равно я понял как.

Но вопрос был Как сделать от и до, без равно.
То есть если x_цель находится в диапазоне от 550 до 598 то есть только в нашем случае от 550 и до 598, то что Вы написали x_цель >= 550 тут и 600 подходит под это условие, а нужно не более 598, и сюда x_цель <= 594 тут и 549 подходит под это условие, а нужно не менее 550. Или я что то не понимаю?
(Добавление)
Смещение с фиксированным шагом, можно не заморачиваться с нагромождением if else.

Я просто еще с эти операторами не до конца разобрался как правильно скобки ставить и else правильно добавить. Ваш код наверно крутой, что Вы написали, но мне он вообще не понятен.

1. int x_цель = 530; - почему тут 530 ?

2. int delta_x = func(x_цель); тут как я понял delta_x равно func(x_цель); но func(x_цель); больше в коде нет, тогда зачем это ?

3. messagebox(delta_x); это зачем ? чтобы на экран вывести координаты и остановить код?

4. mousemove(sx_KIB+ex1+x_цель + delta_x, sy_KIB+400)); тут вроде понятно но сдесь тоько плюсовое значение, почему?

5. function func(int x) непонятно ? это может начало выполнения функции func, но откуда он возьмет x?

6. if(x==574)return 0; это я так понял то что смещение не будет и код пойдет дальше?

7. int delta; объявили переменную delta, разве переменные не должны быть оъявленны в начале кода?

8. ceil - не знаю что это?

9. if(x < 574)delta=ceil((574 - x_цель) / 24 - 1.000001) * 12; Если х меньше 574 то delta равна ceil которая 574 отнимает например x_цель делит на 24 и отнимает 1,000001 и умножает на 12.
как пример x_цель = 570 получится ((574-570)/24-1,000001)*12 = (4/24-1,000001)*12=(-0,83)*12= -10,00001 такая задумка ? минус 10
почему не округлить ? зачем 1,000001

10. else delta=ceil((574 - x_цель) / 24 + 0.000001) * 12; разве тут не нужно перед else эту скобку поставить { ?
и я так понимаю это переход при условии х больше 574 .
как пример x_цель = 580 получится ((574 - 580) / 24 + 0.000001) * 12=((-6) / 24 + 0.000001) * 12=( -0,249999)*12= -2,999988 такая задумка ? минус 3

11. return delta; переходит на delta, но в коде Вашем не пойму это куда и где будет это смещение?

12. function ceil (double value){int a; if(value>=0)a=value+1; else a=value; return a;} эту строку я не могу прочитать вообще, кроме dable это хранение дробного числа в блоке.

Прошу ответить на вопросы которых стало еще больше
 
 Top
Zireael
Отправлено: 07 Января, 2020 - 10:53:37
Post Id



Пользователь
Эксперт


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




 Цитата:
Но вопрос был Как сделать от и до, без равно.

Равно можно убрать.
 Цитата:
1. int x_цель = 530; - почему тут 530 ?

530 это для примера. Поставьте другое число и посмотрите что вернёт функция.
 Цитата:
2. int delta_x = func(x_цель); тут как я понял delta_x равно func(x_цель); но func(x_цель); больше в коде нет, тогда зачем это ?

Чтобы посчитать какое требуется смещение.
 Цитата:
3. messagebox(delta_x); это зачем ? чтобы на экран вывести координаты и остановить код?

Можно убрать, оно для информации. Код и так остановится, он для примера как посчитать смещение.
 Цитата:
4. mousemove(sx_KIB+ex1+x_цель + delta_x, sy_KIB+400)); тут вроде понятно но сдесь тоько плюсовое значение, почему?

Потому что функция может возвращать отрицательные значения.
 Цитата:
5. function func(int x) непонятно ? это может начало выполнения функции func, но откуда он возьмет x?

При вызове функции будет передано значение x_цель и оно запишется в x.
 Цитата:
7. int delta; объявили переменную delta, разве переменные не должны быть оъявленны в начале кода?

Если объявить вначале, то она будет глобальной, т. е. видно в любом месте скрипта, если в функции, то локальной, видна только в этой функции.
 Цитата:
8. ceil - не знаю что это?

Округление x до ближайшего целого, которое больше x.
 Цитата:
-10,00001 такая задумка ? минус 10
-2,999988 такая задумка ? минус 3

Функция возвращает целые значения кратные 12. Если x_цель = 570 или 580, то delta_x будет равна 0, т. к. смещение не требуется.

Может так нагляднее будет:
code (Отобразить)
 
 Top
inre25
Отправлено: 09 Января, 2020 - 03:55:31
Post Id



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


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




Очень круто наглядно сделали спасибо (возьму как шаблон на будущие). Буду тестить разбираться. Если есть возможность, хочу попросить отправить аудио файл рассказав работу кода по каждой строчке как его правильно читать и почему именно так написано.
(Добавление)
1. те есть, если * 12; заменить на 1 то будет более точное значение?
2. для чего 1,000001 и 0.000001 их можно заменить на просто 1 и 0 или будет потом ошибка?
 
 Top
Zireael
Отправлено: 09 Января, 2020 - 06:24:19
Post Id



Пользователь
Эксперт


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




 Цитата:
1. те есть, если * 12; заменить на 1 то будет более точное значение?

Нет, в диапазоне 550-574 вернёт 1, 526-550 вернёт 2 и т.д.
 Цитата:
2. для чего 1,000001 и 0.000001 их можно заменить на просто 1 и 0 или будет потом ошибка?

Чтобы числа, к примеру 550 и 598 входили в диапазон, т. е. int x_цель = 550; функция вернёт 0.
Если заменить 1,000001 на 1, то 550 не будет входить в диапазон и функция вернёт 12.
Если убрать 0.000001, то при int x_цель = 598; вернёт -12, а не 0.
 
 Top
inre25
Отправлено: 09 Января, 2020 - 10:55:26
Post Id



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


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




Спасибо большое за разъяснение.
Я убрал в коде то что было для визуально восприятия, оно очень помогает в настройке и то что как показалось лишнее и без этого работает.
int x_цель = 574;
while(x_цель> 20 && x_цель < 1128)
textbkcolor(0, 65279);
textout(0, 300, 300, "Переменная x_цель равна: "+format(x_цель), 1);
textout(1, 300, 320, "Переменная delta_x равна: "+format(delta_x), 1);


textbkcolor(16777215, 255);
textout(2, 300, 370, "Остановить скрипт Ctrl + SHift + Z", 1);
x_цель--; // или x_цель++;
sleep(300);


первую поскольку у меня же х_цель само присваивается по координатам (я ее в старте прописываю), а вторую так и не понял. но без нее работает.

Гляньте это точно лишнее ?

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

2. я это от Вашего кода оставил

{
int delta_x = func(x_цель); // вызов функции, вернёт на сколько нужно сместить
}
function func(int x)
{
if(x==313)return 0;

int delta;
if(x < 313)delta=ceil((313 - x_цель) / 24 - 1.000001) * 12;
else delta=ceil((313 - x_цель) / 24 + 0.000001) * 12;
return delta;
}

function ceil (double value){int a; if(value>=0)a=value+1; else a=value; return a;}
последнюю строку не понимаю, может тут что то убрать чтобы он после одного раза выполнения переходил в другой блок кода.
(Добавление)
с тем что по кругу крутилось разобрался это я сам не добавил блоки при переходах неправда. но остальные вопросы открыты.
 
 Top
Zireael
Отправлено: 09 Января, 2020 - 16:42:07
Post Id



Пользователь
Эксперт


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




 Цитата:
function ceil (double value){int a; if(value>=0)a=value+1; else a=value; return a;}
последнюю строку не понимаю

Как работают функции понимать не требуется. Вызвали в нужном месте func(x_цель), получили результат.
 Цитата:
код вставил в пустой блок кода

Это должны быть функции, а не просто блоки кода.
 
 Top
inre25
Отправлено: 10 Января, 2020 - 10:05:23
Post Id



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


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




Хорошо. я в блок код добавил почти все супер.
Еще вопрос если не сложно подскажите.

как к этому коду привязать еще чтобы показывал помимо нахождения координат и смещения
он показывал текстовики например букву "X" где он видит x_цель и букву "d" где он видит x со смещением по delta
 
 Top
Zireael
Отправлено: 10 Января, 2020 - 11:27:38
Post Id



Пользователь
Эксперт


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




 Цитата:
чтобы показывал помимо нахождения координат и смещения

code (Отобразить)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by