| Anthony |
Отправлено: 27 Января, 2025 - 20:26:26
|


Прохожий

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

|
Коллеги, приветствую.
После нескольких недель эксплуатации кибора возникли следующие вопросы. Если кто знает на них ответы - прошу помочь. А то что-то я совсем в ступоре...
1. Модуль FindImage
Модуль работает в целом понятно (логика ясна) и вроде вопросов не должен вызывать, но... Столкнулся с тем, что несмотря на то, что при явно указанных параметрах поиска (искать 1 объект, с указанием координат отправной точки), поиск всё равно ведётся по всем объектам на экране, подпадающие под картинку (там одноцветная текстура, 2х2 пикселя). Причём алгоритм игнорирует указанные стартовые координаты и ищет как будто-то самую дальнюю цель. Впечатление такое. Это вот как так? Это я не правильно логику понял? Тогда какова она на самом деле?
2. Рандом.
Есть ли возможность создать в визредакторе блок с несколькими true переходами? Чтобы один из них выбирался рандомно?
3. Поиск
При выборе зон на картинке, для использования потом при распознавании цели на экране, и именно фрагментов произвольной формы а не квадратом, картинки сохраняются в формате bmp, который не умеет в прозрачность. Как же оно тогда должно работать? Например, выделив по кусочкам условнвй пончик не затрагивая его середину, которая может меняться и быть например черной или белой или не важно какой, как кибор определяет, что центр не черный а любой другой? Ведь в bmp он же всегда черный?
4. Очерёдность и задержки блоков
Складывается впечатление, что в некоторых случаях следующий блок начинает работать когда еще предыдущий не закончил свою работу. Но это не точно. Возможно это следствие пункта 1. Никто такого не замечал?
5. FindImage и True/False
Я использую в некоторых случаях FindImage без действий, просто как обнаружение чего-то на экране и в зависимости от трю/фальш дальше рисую логику. Это же нормальное применение этого модуля?
Спасибо, если кто ответит. |
| |
|
| Anthony |
Отправлено: 28 Января, 2025 - 12:07:43
|


Прохожий

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

|
Большое спасибо за ответ и разъяснения!
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 и то что мне нужно - научился делать, но вот такие вот нюансы сильно сбивают с толку...
Ещё раз спасибо за помощь.(Отредактировано автором: 28 Января, 2025 - 12:17:57) |
| |
|
| Zireael |
Отправлено: 28 Января, 2025 - 12:31:19
|


Эксперт

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

|
Цитата: после обнаружения и клика по объекту процесс должен дождаться исчезновения найденного
Скорее всего это применяется если в зоне поиска только 1 объект.
Можно паузу после клика указать и не ставить эту галку. Либо записывать в переменную сколько изначально было найдено объектов, после клика снова делать поиск и проверять уменьшилось ли их количество.
Цитата: Показать пример реализации, самый простой?
Что именно нужно сделать?
Цитата: Я пытался создать строковую константу, которую можно было бы использовать далее в путях к файлам.
CODE:string Path = "C:\BOT\AAA\image1.bmp";
messagebox(Path); |
| |
|
| Anthony |
Отправлено: 28 Января, 2025 - 14:16:50
|


Прохожий

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

|
Zireael пишет: Что именно нужно сделать?
Есть библиотека из 3 картинок. У каждой из картинок своя собственная обработка (раздельные алгоритмы). Нужно переходить к случайному блоку обработки одной из картинок.
Схематично: (R = рандомизатор):
[Блок 0] -> [дальше]
/
[R] - [Блок 1] -> [дальше]
\
[Блок 2] -> [дальше]
Zireael пишет: string Path = "C:\BOT\AAA\image1.bmp";
messagebox(Path);
А как это правильно задать через Start? и как потом вставлять переменную в нужном месте, например в пути? Не подскажете? |
| |
|
| Zireael |
Отправлено: 29 Января, 2025 - 01:49:16
|


Эксперт

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

|
Цитата: Схематично: (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. |
| |
|
| Anthony |
Отправлено: 29 Января, 2025 - 18:00:07
|


Прохожий

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

|
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)\ну\и\всё\что\глубже
Не подскажете, такое вообще возможно? Или путь в "Путь к файлу" не парсится по частям, только целиком?
Спасибо ) |
| |
|
|