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

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

1. Anthony - 27 Января, 2025 - 12:26:26 - перейти к сообщению
Коллеги, приветствую.

После нескольких недель эксплуатации кибора возникли следующие вопросы. Если кто знает на них ответы - прошу помочь. А то что-то я совсем в ступоре...

1. Модуль FindImage

Модуль работает в целом понятно (логика ясна) и вроде вопросов не должен вызывать, но... Столкнулся с тем, что несмотря на то, что при явно указанных параметрах поиска (искать 1 объект, с указанием координат отправной точки), поиск всё равно ведётся по всем объектам на экране, подпадающие под картинку (там одноцветная текстура, 2х2 пикселя). Причём алгоритм игнорирует указанные стартовые координаты и ищет как будто-то самую дальнюю цель. Впечатление такое. Это вот как так? Это я не правильно логику понял? Тогда какова она на самом деле?

2. Рандом.

Есть ли возможность создать в визредакторе блок с несколькими true переходами? Чтобы один из них выбирался рандомно?

3. Поиск

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

4. Очерёдность и задержки блоков

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

5. FindImage и True/False

Я использую в некоторых случаях FindImage без действий, просто как обнаружение чего-то на экране и в зависимости от трю/фальш дальше рисую логику. Это же нормальное применение этого модуля?

Спасибо, если кто ответит.
2. Zireael - 27 Января, 2025 - 17:48:34 - перейти к сообщению
1. Возвращаемые координаты считаются от начала зоны поиска.
Например, начало поиска 300, 200, картинка нашлась в координатах 20, 50. Значит картинка находится в координатах 320, 250. Т. е. к найденным координатам нужно прибавить координаты начала зоны поиска.
2. В блоке кода можно выполнить любые действия.
3. В FindImage есть параметр цвет фона, указанный цвет будет игнорироваться при поиске.
4. Нет такого, исключение таймер.
5. Да. Так можно.
3. Anthony - 28 Января, 2025 - 04:07:43 - перейти к сообщению
Большое спасибо за ответ и разъяснения!

 Zireael пишет:
1. Возвращаемые координаты считаются от начала зоны поиска.
Например, начало поиска 300, 200, картинка нашлась в координатах 20, 50. Значит картинка находится в координатах 320, 250. Т. е. к найденным координатам нужно прибавить координаты начала зоны поиска.


Я имел в виду то, что кибор находит и перебирает именно все цели, которые обнаружил. А не только первую же найденную, если указано "1". У меня процедура построена так, что после обнаружения и клика по объекту процесс должен дождаться исчезновения найденного, завершиться и перейти на следующий блок, выполняющий другое действие (сбор лута), но вместо этого кликер сначала пробегается по всем остальным найденным целям и только потом переходит на выход из блока. Это вот чётко видно, как сначала всё что подпадает под картинку обрабатывается и только после того как на экране не остаётся подходящего - происходит переход дальше.

Я вот над этим голову ломаю, почему так оно себя ведёт.

Опять же, при использовании точки отсчёта (по логике - оно же нужно для обнаружения ближайших к бойцу целей, да?), вообще не факт что боец начнёт атаковать ближайшую цель, чаще всего он выбирает какую-то из отдалённых. Не понимаю, почему так... Боец находится в центре экрана. Координаты х659, у385. Оно у меня так и указано. Но он бежит к дальним целям, не начиная с ближних. Выглядит так, как будто кибор сканирует поле и выбирает первого же попавшегося, а не согласно удалению (т.е. ближайшего) от указанной в настройках точки. А затем, вместо того чтобы закончить процедуру (раз указано что ищем только 1), он оббегает всех остальных, кто уже был в зоне видимости или успели набежать пока первого бью.

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


Простите, а не могли бы Вы чуть развить тему? Показать пример реализации, самый простой?

* * *

И ещё, если позволите, вопрос, но тут скорее по документации на Визуальный редактор...

Я так понял, что через Start можно заранее определять константы и переменные для последующего использования в блоках?

Я пытался создать строковую константу, которую можно было бы использовать далее в путях к файлам. Чтобы, при необходимости, изменив только константу можно было одним движением поменять пути во всех блоках.

Типа Путь к файлу: "C:\BOT\AAA\image1.bmp" заменить на "C:\BOT\BBB\image1.bmp" при помощи константы например W_Kib_Location.

Пробовал W_Kib_Location=AAA в Start'е и "C:\BOT\$W_Kib_Location\image1.bmp" в блоках, но оно там не парсится и используется как обычный текст.

Такое вообще возможно? Я понимаю, что везде своя специфика и я 100% попал пальцем в небо. Я вообще не программист, ниразу и других предположений, как использовать переменные, у меня не было. Я пользуюсь исключительно визуальным редактором кода и тем, что смог понять в документации и из роликов.


* * *

Так-то я вполне приемлемо освоился в VR и то что мне нужно - научился делать, но вот такие вот нюансы сильно сбивают с толку...

Ещё раз спасибо за помощь.
4. Zireael - 28 Января, 2025 - 04:31:19 - перейти к сообщению
 Цитата:
после обнаружения и клика по объекту процесс должен дождаться исчезновения найденного

Скорее всего это применяется если в зоне поиска только 1 объект.
Можно паузу после клика указать и не ставить эту галку. Либо записывать в переменную сколько изначально было найдено объектов, после клика снова делать поиск и проверять уменьшилось ли их количество.
 Цитата:
Показать пример реализации, самый простой?

Что именно нужно сделать?
 Цитата:
Я пытался создать строковую константу, которую можно было бы использовать далее в путях к файлам.

CODE:
string Path = "C:\BOT\AAA\image1.bmp";
messagebox(Path);
5. Anthony - 28 Января, 2025 - 06:16:50 - перейти к сообщению
 Zireael пишет:
Что именно нужно сделать?


Есть библиотека из 3 картинок. У каждой из картинок своя собственная обработка (раздельные алгоритмы). Нужно переходить к случайному блоку обработки одной из картинок.

Схематично: (R = рандомизатор):


[Блок 0] -> [дальше]
/
[R] - [Блок 1] -> [дальше]
\
[Блок 2] -> [дальше]


 Zireael пишет:
string Path = "C:\BOT\AAA\image1.bmp";
messagebox(Path);


А как это правильно задать через Start? и как потом вставлять переменную в нужном месте, например в пути? Не подскажете?
6. Zireael - 28 Января, 2025 - 17:49:16 - перейти к сообщению
 Цитата:
Схематично: (R = рандомизатор):

В блоке кода:
CODE:
int random = rand(0, 3);

Переход к блоку if, в котором проверить условие random==0, если истина переход к нужному блоку, если ложь переход к следующему блоку if, в котором проверить условие random==1 и т. д.
 Цитата:
А как это правильно задать через Start?

В блоке Start:
CODE:
string Path = "C:\BOT\AAA\image1.bmp";

Там где нужно указать путь использовать переменную. Например в блоке File, вместо пути можно указать переменную Path.
7. Anthony - 29 Января, 2025 - 07:15:17 - перейти к сообщению
 Zireael пишет:
...


Спасибо большое, буду пробовать!
8. Anthony - 29 Января, 2025 - 10:00:07 - перейти к сообщению
 Zireael пишет:
В блоке Start:
CODE:
string Path = "C:\BOT\AAA\image1.bmp";

Там где нужно указать путь использовать переменную. Например в блоке File, вместо пути можно указать переменную Path.


Если в целом путь в библиотекам изображений (их несколько) меняется только в одном месте, а все остальные структуры под этим местом полностью аналогичны по именам, то можно ли использовать составную конструкцию в "Путь к файлу"?

Например, имеем структуру вложенных каталогов и файлов, у которых путь всегда начинается с C:\BOTS\kraken\img\, но далее он превращается в:

C:\BOTS\kraken\img\dir1\img1.bmp
C:\BOTS\kraken\img\dir2\img1.bmp
...
C:\BOTS\kraken\img\dirN\imgN.bmp

И было бы желательно переменной обозначать не весь путь, а только именно то, чем пути отличаются? Каталог "dir" в данном случае.

Типа:

В блоке Start
string AAA = "garg"

В блоке FindImage
Путь к файлу: C:\BOTS\kraken\img\$AAA\ну\и\всё\что\глубже

Чтобы оно преобразовывалось в C:\BOTS\kraken\img\garg\ну\и\всё\что\глубже

Просто Вы ранее написали, что нужно использовать вызов типа

messagebox(Path);

Но как его вставить в такую конструкцию я если честно не понимаю...
Ну в самом деле, не так же: C:\BOTS\kraken\img\messagebox(Path)\ну\и\всё\что\глубже

Не подскажете, такое вообще возможно? Или путь в "Путь к файлу" не парсится по частям, только целиком?

Спасибо )
9. Zireael - 29 Января, 2025 - 17:46:43 - перейти к сообщению
CODE:
string AAA = "garg";
messagebox("C:\BOTS\kraken\img\" + AAA + "\ну\и\всё\что\глубже");

CODE:
string Path = "dir";
for(int i=1; i<4; i++)
{
messagebox("C:\BOTS\kraken\img\" + Path + format(i) + "\img1.bmp");
}
10. Anthony - 30 Января, 2025 - 00:21:20 - перейти к сообщению
Большое спасибо, пошел пробовать!

Powered by ExBB FM 1.0 Final