1.5.7612
Октябрьский релиз
Новая альтернатива для Auras и Behavior Trees — Macros
Встречайте новый инструмент для создания автоматизации — Macros.
Прежде чем переходить к деталям, коротко разберём, какие инструменты уже есть в EyeAuras и чем они отличаются.
1. Auras
Изначально в системе были только ауры, которые состоят из Triggers и Actions. Идея простая: когда срабатывает триггер, выполняются ваши действия.
Это по-прежнему хороший вариант для простых сценариев вида «событие → реакция», например для отправки уведомлений в Telegram или автоматизации HP/MP-потов. Но как только логика становится сложнее, такой подход быстро становится неудобным в поддержке: приходится учитывать все возможные события и реакции, которые могут происходить одновременно.
2. C# scripts
Чтобы решить эту проблему, были добавлены скрипты, которые дают вам 100% контроль над ботом и его действиями. Их главный минус очевиден: пользователю нужно знать C# и уметь писать код.
Кроме того, в некоторых случаях код — просто не лучший инструмент. Например, если вы пишете ротацию в чистом C#, вам приходится самостоятельно отслеживать кулдауны, приоритеты и множество условий. Для таких задач нужен был более удобный инструмент.
3. Behavior Trees
Behavior Trees предлагают другой способ описания логики и отлично зарекомендовали себя в игровых движках, где их используют для поведения NPC.
BT также решают проблему одновременной обработки нескольких событий: действия выполняются последовательно, а пользователь может задавать приоритеты на основе условий. В ряде случаев — например, при построении ротации — BT дают лучший опыт.
Но у них есть и заметный недостаток: высокий порог входа. В сочетании с порогом входа самого EyeAuras это сделало BT слишком сложными для многих пользователей, особенно для тех, кто не программирует. В итоге таким пользователям чаще всего приходилось оставаться на аурах, несмотря на их ограничения.
Решение — Macros
Представляем четвёртый вариант, который должен стать основным стартовым инструментом для автоматизации.
Концепция простая: у вас есть последовательность команд, которые выполняются одна за другой. Эти команды могут проверять состояние других аур, нажимать кнопки, запускать скрипты и многое другое. Поддерживаются циклы, условия и всё, что обычно ожидаешь от подобного инструмента.
По умолчанию макросы не реактивны — они не запускаются сами по себе, в отличие от Auras, которые всегда что-то делают. Чтобы запустить макрос, нужно либо назначить ему горячую клавишу, либо настроить другое Enabling Condition. Когда условие выполнено, макрос либо отработает один раз, либо будет запускаться периодически.
Главная сила этого подхода — в возможности комбинировать все три способа построения логики. Например, у вас могут быть ауры, которые отслеживают изображения/цвета или выполняют инференс нейросети. Затем через IfThenElse вы проверяете состояние этих аур и, если условия выполнены, передаёте управление в Behavior Tree или запускаете скрипт.
Представим, что вы хотите, чтобы персонаж фармил мобов в определённой точке. Если он умирает — вы воскрешаетесь, пополняете ресурсы в городе и возвращаетесь обратно на спот. Если пытаться собрать всю эту логику только на BT, придётся постоянно учитывать, где вы сейчас находитесь — в городе или на месте фарма. С макросами это решается проще: можно сделать один большой цикл, который работает, пока бот включён. Внутри него легко проверить, находитесь ли вы в городе, чтобы выполнить закупку, или уже стоите на споте, чтобы запустить farming behavior tree. Так вы разбиваете логику бота на небольшие и удобные части и не обязаны постоянно учитывать вообще все возможные состояния сразу.
Узнать больше...
Макросы подходят для самых разных задач: от простых последовательностей нажатий клавиш (как action Send Sequence, только гораздо гибче)

до сложных цепочек действий, в которых вместе используются скрипты, behavior trees и auras

Портативная версия
На основной веб-странице появилась новая кнопка, которая позволяет скачать архив с самой свежей версией. Это полностью портативная сборка с конфигурацией, отделённой от основной установки приложения. Такой механизм уже несколько месяцев тестировался в Packs и должен работать без серьёзных проблем.

Поддержка Yolo 10
Реализована тестовая поддержка моделей машинного обучения на базе Yolo 10. Yolo 10 — это передовая технология для детекции объектов в реальном времени.

SubTree как узел
В Behavior Trees появилась новая возможность: теперь поддеревья можно помечать как shared. После этого из toolbar можно создавать узлы, которые напрямую ссылаются на конкретное поддерево.

Новый узел — Mouse Move
Этот узел теперь доступен в Macros и BTs.
Есть два варианта узла: для абсолютного перемещения мыши и для относительного перемещения, которое учитывает текущую позицию курсора.
Как и в Send Sequence, теперь можно привязывать X и Y, связывать ауры и точно управлять тем, куда именно кликать по найденному изображению или объекту. Есть два режима редактирования: простой и расширенный.

Расширенный режим выглядит так (да, элементов управления тут действительно многовато):

Узел KeyPress теперь поддерживает клики мышью и прокрутку колеса
Теперь узел KeyPress также умеет отправлять ввод, связанный с мышью. Пока я не на 100% уверен, что наличие нескольких input-узлов действительно улучшит UX, но посмотрим, как это покажет себя на практике.

C# scripting — автоматические улучшения кода
Одна из ключевых возможностей EyeAuras — это движок C#-скриптов, который позволяет компилировать, загружать и выполнять ваш код в реальном времени. Он используется в actions, triggers и behavior trees. Поскольку ограничений на код почти нет, пользователи нередко допускают ошибки, которые приводят к крашам, deadlock'ам и другим типичным проблемам программирования. Я уже упоминал это в changelog 7060.
В этой версии я добавил механизм, который расширяет ваш код, чтобы уменьшить последствия распространённых ошибок. Например:
- неперехваченные исключения в
Task - использование
Thread.Sleepвместо методаSleepиз EyeAuras, который заметно точнее и умеет отменяться - бесконечные циклы вроде
while(true){}вместоwhile(!cancellationToken.IsCancellationRequested){}
Этот механизм сможет отловить только часть ошибок, и основная ответственность всё равно остаётся на авторе скрипта. Но в целом такая система должна немного упростить жизнь.
Если заметите что-то необычное — обязательно сообщайте.
Макросы можно использовать просто для отправки последовательностей нажатий клавиш:

А можно строить полноценную логику rebuff/target/farm с условиями, циклами и скриптами:

По сравнению с BT этот инструмент гораздо проще и понятнее. По сути, вы собираете программу из небольших блоков, поэтому он намного доступнее для новых пользователей, которые хотят делать собственную автоматизацию.
Folder Defaults — добавлен выбор Input Smoother
В свойства папки добавлен выбор Input Smoother. Input Smoother определяет, как именно мышь перемещается из точки A в точку B и на сколько шагов разбивается это движение.
Как и другие настройки, этот параметр распространяется на все элементы внутри папки — узлы, actions, triggers и т. д.

Новый редактор ссылок
Выходит новая версия редактора ссылок. Он появляется везде, где вы что-то связываете, например в AuraIsActive или Enabling Conditions.

Новый редактор гораздо гибче и должен упростить внесение изменений. Когда эта версия станет стабильнее, я добавлю “Recent”, “Favourites” и другие улучшения, которые уже запланированы. Если увидите проблемы или захотите предложить улучшения — обязательно сообщайте. Первая реализация может содержать баги, но я надеюсь, что она довольно быстро превзойдёт старый вариант.

Переработка Sleep()
Ожидание чего-либо — критически важная часть автоматизации. EyeAuras занимается этим постоянно: таймауты между нажатиями клавиш, поддержание стабильного FPS захвата, пользовательские таймауты в скриптах. Стандартные методы операционной системы, такие как Thread.Sleep и Task.Delay, недостаточно точны, поэтому я реализовал комбинацию подходов, которая обеспечивала лучшую точность.
Этот механизм позволял делать ожидания с точностью меньше миллисекунды и хорошо работал 5–6 месяцев. Но у высокой точности есть цена, а для большинства операций такая точность просто не нужна.
Поэтому в ближайшие месяцы мы будем тестировать третью версию Sleep(), которая должна найти баланс между точностью и производительностью. В среднем ожидаемая точность — в пределах 0.5 - 5ms.
То есть если вы задаёте ожидание 1ms, фактическое время будет примерно в диапазоне 1 - 1.5ms, чего более чем достаточно для большинства сценариев. Для более длинных таймаутов, например 100ms, диапазон составит 100 - 105ms.
В обмен на небольшую потерю точности вы получите лучшую производительность. Посмотрим, как это покажет себя в реальных условиях.
Переработка редактора Variables
- Теперь редактор одинаковый для Blackboard и Variables.
- Появилась возможность редактировать значения напрямую, хотя пока только для примитивных типов.
- Теперь можно добавлять новые переменные, что упрощает настройку.
- Подготовлен механизм, который будет генерировать boilerplate-код для C#-скриптов и автоматически создавать Properties для чтения/записи значений. Это будет опубликовано позже.

Два новых эффекта изображения
Binary Threshold
Этот эффект очень полезен для анализа: он переводит изображение в чёрно-белый вид, что сильно упрощает дальнейшие проверки. Например, вместо красной полоски HP с разными оттенками можно получить чёрно-белое изображение, где белый цвет обозначает заполненную часть полосы.
Color Quantization
Ещё одна техника упрощения изображения. Color Quantization уменьшает общее количество цветов на изображении. Сам по себе эффект не слишком полезен, но в сочетании с другими эффектами может быть очень кстати.
C# scripting — улучшения TextSearch: добавлена сегментация
Триггер TextSearch теперь отдаёт текстовые сегменты и их расположение. Сейчас эта возможность доступна только через C# scripts и позволяет кликать по конкретным словам.
Пример можно посмотреть здесь: https://wiki.eyeauras.net/ru/scripting/examples/basic/click-on-text
В будущем аналогичная функциональность будет доступна и через UI.
Улучшение ImageSearch — добавлен параметр "Include All Matches"
Для некоторых редких сценариев в скриптах добавлена новая опция — "Include All Matches". По умолчанию ImageSearch находит лучший возможный матч и отслеживает его перемещение, не сканируя всё изображение заново на каждом кадре. Новая опция отключает эти оптимизации, поэтому при каждом tick выполняется полное сканирование изображения. Плюс в том, что вы получаете доступ сразу к нескольким кандидатам и их похожести. Минус — серьёзное влияние на производительность.
Чтобы получить доступ ко всем найденным объектам, используйте TemplateMatches, который возвращается как часть результата ImageSearchTrigger.Refresh:
public interface IImageSearchDetectionResult : ICaptureTriggerDetectionResult
{
...
/// <summary>
/// Contains an array of all successful template matches and their bounds/similarity.
/// Will contain more than one element only if Include All Matches is enabled in ImageSearchTrigger.
/// </summary>
public ImmutableArray<TemplateMatchResult> TemplateMatches { get; init; }
...
}

Это крайне тяжёлая задача для CPU. На 1920x1080 вы, скорее всего, получите максимум 2-3 FPS при полном сканировании. Это огромная разница по сравнению с ML search, который на той же задаче и том же разрешении может дать до 60 FPS. Поэтому если вам действительно нужно детектировать несколько экземпляров одного и того же объекта, я очень рекомендую посмотреть в сторону обучения модели Yolo и использовать её вместо этого.
Исправления/улучшения
- [AuraTree] Элементы больше не выбираются автоматически при нажатии на load/unload/remove
- [MLSearch] Если у модели неверный формат, теперь будет показана понятная ошибка
- [ImageSearch]
Load from preview paneтеперь не копирует debug-данные - [EventLog] Полоса прокрутки event log теперь остаётся внизу даже после очистки лога
- [Capture] Исправлена проблема, из-за которой FPS иногда отображался неверно
- [TetherScript] Добавлена поддержка настоящего относительного перемещения мыши. Предыдущая версия драйвера не поддерживала реальное движение мыши и запрашивала позицию курсора, что совсем не работало в некоторых случаях, например когда игра «притягивает» курсор к центру экрана.
- [UI] Sublicenses теперь отображаются в UI. Пока вместо названия pack показывается только Id
- [UI] Исправлен краш, возникавший, когда EA не могла распарсить модификатор hotkey (происходило в non-latin cultures)
- [UI] Исправлен краш, который происходил при запуске программы без распаковки через WinRAR #EA-585 CreateFile WinRAR v7406
- [UI] Исправлен краш на Windows 10 Home(and N), вызванный отсутствием библиотек OpenCL
- [UI] Исправлен баг, из-за которого webview иногда падал при загрузке (связан с split-container)
- [UI] Исправлен краш
System.InvalidCastException: Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.FrameworkTemplate'by Mintrok #EA-655 - [UI] Улучшена обработка ошибок в диалогах Import/Export — теперь ошибки должны быть понятнее и отображаться аккуратнее
- [UI] Добавлен badge, показывающий количество аур в состоянии Archived. Это та самая почти забытая функция, которая позволяет архивировать (то есть unload и hide) ауры, которыми вы сейчас не пользуетесь — это заметно ускоряет загрузку приложения.
- [UI] Улучшения в Bindings — добавлена поддержка преобразований из
TвNullable of T(например,intвint?) #EA-660 v7569 by Gwyn - [UI] Исправлен баг с клонированием, из-за которого ссылки клонировались некорректно
- [UI] Исправлен баг, из-за которого новые папки не всегда отображались в редакторе Links
- [UI] Небольшие улучшения производительности — убран старый мусор, увеличивавший время загрузки
- [UI] Реализован Install service, который позволяет указать EA установить несколько packs при первом запуске — подробности будут позже
- [UI] Немного усилены меры безопасности — очистка last activities теперь должна работать надёжнее, плюс будут очищаться данные, связанные с родительской папкой, из которой был запущен EyeAuras
- [UI] Если отключён Check for Updates, приложение больше не будет выполнять эту проверку при старте
- [UI] Несколько мелких исправлений в новом селекторе аур
- [UI] Исправлена проблема, из-за которой copy-paste не работал в корневой папке #EA-591 v7458 by
oddessax - [UI] Исправлена проблема, из-за которой UI не загружался, если программе не удавалось получить список логических дисков #EA-588 WMI Logical drives v7349
- [UI] Исправлена проблема с логином — username был чувствителен к регистру
- [UI] Много изменений в коде Import/Export — что-то может сломаться, но теперь EA может поддерживать сколько угодно разных типов элементов (behavior trees, auras, macroses, folders и т. д.)
- [UI] Popup-окно лицензионного соглашения EyeAuras теперь автоматически активируется при запуске. На тех, кто уже когда-то его принял, это не повлияет
- [UI] Переработан механизм import/export — это должно исправить проблемы с заменой behavior trees и ещё несколько других вещей
- [Packs] Улучшена упаковка — packs теперь включают ресурсы, такие как изображения/модели и т. д., как часть zip-архива
- [Packs] По умолчанию compatibility теперь будет выставляться в Current version, а не Latest
- [Scripting] В
ScriptVariableдобавленListen()— теперь можно использовать его вместоWatchCurrentValue - [Scripting] Исправлена проблема, из-за которой папки в некоторых случаях не находились по относительному пути
- [Scripting] Исправлена проблема, из-за которой code rewriter в некоторых случаях генерировал некорректный код, не проходящий компиляцию
- [Scripting] В
ISendInputUnstableScriptingApiдобавленTargetWindow— это позволяет использовать Windows Message API и отправлять ввод в фоновые окна - [Scripting] Исправлен баг в
CancellableMethodStatementRewriter, из-за которого некоторые скрипты не компилировались - [Scripting] Исправлена проблема, из-за которой code rewriters не обрабатывали некоторые комбинации вызовов методов
- [BehaviorTrees] Узел ExecuteScript теперь запоминает, был ли он Maximized
- [BehaviorTrees] Исправлена проблема, из-за которой выбор не всегда корректно сбрасывался в некоторых случаях #EA-589 v7464 by dutiful6005
- [BehaviorTrees] Исправлена проблема, из-за которой содержимое редактора узла в некоторых случаях обновлялось некорректно
- [BehaviorTrees] При ручном запуске узла (из редактора) выполнение теперь автоматически отменяется, когда главное окно выводится на передний план — как и у аур
- [BehaviorTrees] Исправлена проблема с потерей фокуса при переключении между BT — из-за этого операция Paste работала некорректно #EA-592 v7458 by
oddessax - [BehaviorTrees] Немного оптимизирована работа BT с глубоко вложенными структурами, максимальная глубина увеличена с 64 до 1024 #EA-578 Nested tree v7444 by oddessax
- [BehaviorTrees] Исправлена проблема, из-за которой C#-скрипты нельзя было редактировать
- [BehaviorTrees] Исправлена проблема, из-за которой в некоторых случаях добавлялась лишняя ссылка
- [BehaviorTrees] Исправлена проблема, из-за которой BT выполнялись один раз при выполнении enabling conditions, даже если окно программы было активно
- [BehaviorTrees] Исправлена проблема, из-за которой BT не учитывали Enabling Conditions папки, в которой они находятся
- [BehaviorTrees] Изменения в UI — немного перераспределены элементы управления, обновлены стили и т. д. Посмотрим, как покажет себя обновлённая версия
- [BehaviorTrees] Добавлена визуализация ошибок — если какой-то узел сталкивается с ошибкой, это теперь отображается в UI так же, как ошибки в аурах
- [BehaviorTrees] Исправлена проблема с переименованием BT