Builds

Available downloads

Stable is the recommended track for most users. Alpha gets you the newest capabilities first.

Stable 1.9.9774 Alpha 1.9.9980
Windows 10/11 x64 Administrator rights
Release Notes

Track recent changes

Every release stays linked here so you can inspect what changed before you switch versions.

Release

1.7.8383

Permalink 5 months ago

Переход на .NET 8

.NET — это платформа, на которой построен EyeAuras. Она влияет буквально на всё: запуск, выделение памяти, работу с данными — практически на каждый небольшой внутренний механизм программы.

.NET 8 — не самая новая версия (превью .NET 10 уже существует), но обновление платформы не делают «просто потому что можно» — для этого нужна конкретная причина. Я выбрал именно .NET 8 (а не .NET 9/.NET 10), потому что только для этой версии есть прототип нового механизма управления памятью, который, судя по текущим тестам, буквально превосходит всё, что у нас было в .NET с самого начала его существования.

Вот одна из ключевых характеристик этого нового механизма по сравнению с тем, что используется сейчас (workstation-sustainedlowlatency). По сути, это длительность тех самых «подвисаний», которые иногда случаются и в худших случаях становятся заметны пользователю.

GC time

Память vs CPU

При разработке систем почти всегда приходится искать компромисс: можно тратить меньше CPU, но ценой дополнительной памяти, или экономить память, но увеличивать нагрузку на процессор. EyeAuras почти всегда выбирал первый вариант — память дешёвая, а процессорное время на обычных пользовательских ПК дорогое (это, разумеется, моё личное мнение).

Но у такого подхода есть и обратная сторона: любые улучшения в самой основе системы управления памятью должны особенно сильно влиять на EyeAuras. И этот новый механизм выглядит для нас очень подходящим вариантом. Посмотрим, как всё пойдёт, но в ближайшем будущем я ожидаю заметный прирост производительности.

Исправления и улучшения

  • [Scripting] Добавлен прототип ScriptContainerExtension — позже будет отдельная статья. Пока это alpha-стадия.
Release

1.7.8378

Permalink one year ago

C# Scripts — Advanced — Referencing Scripts from BT/Macros

This feature lets you link another aura from a BT/macro if that aura contains a C# Script action. In programming terms, this is similar to referencing another project.
All classes and types defined in that script then become available for use in the BT.

The reference mechanism has technically existed for several months, but until now it was mostly hidden because it was incomplete and did not work the way I wanted.

References


Why use this?

You can now create a C# class that analyzes the game—through computer vision triggers or by reading memory directly—and provides the data your BehaviorTree needs to make decisions.
Instead of cluttering the tree with dozens of variables and checks, you can create a single class, for example TheGame, that encapsulates all data collection.


Bot example

This bot uses exactly the approach described below. It understands its environment, its own stats and the stats of nearby monsters, can build an action plan, and so on.
So far, the only limitation I’ve run into with this approach is my own ceiling.

Reference


Aura with the script inside

Let’s look at the "Shared" aura and its files.

TheGame.cs

public sealed class TheGame {
    public TheGame(IFluentLog log){
        Log = log;
    }

    public IFluentLog Log {get;}

    public int IntValue { get; private set; }

    public void Refresh()
    {
        IntValue++; // в реальности здесь может быть чтение из памяти или обновление триггеров
        Log.Info($"Refreshed the state, value: {IntValue}");
    }
}

This class prepares everything needed by the logic: trigger initialization, memory reads, OSD creation—whatever is required.
When Refresh is called, the state is updated.


Script.csx

[Inject] IAuraTreeScriptingApi AuraTree {get; init;}

Log.Info("Bot is being started!");

var tree = AuraTree.GetBehaviorTreeByPath("./New tree");
var game = GetService<TheGame>();
tree["TheGame"] = game;

This is how the TheGame object is passed into the BT through variables.
This is the key part that was missing before. Objects passed through variables are now fully available, without restrictions.


Behavior Tree

Example tree structure:
BT


Updating data

var game = Variables.Get<CheatCrescendo.TheGame>("TheGame").Value;
game.Refresh();

In this node, we call Refresh, which updates the game state. By this point, the "TheGame" variable has already been initialized—either by the script or by another node.


Rendering OSD

return Run();

public IEnumerator<NodeStatus> Run(){
    using var osd = GetService<IOnScreenCanvasScriptingApi>().Create();

    var game = Variables.Get<CheatCrescendo.TheGame>("TheGame").Value;

    var textOsd = osd.AddHtmlObject();
    while (!cancellationToken.IsCancellationRequested){
        textOsd.Html = $"{game.IntValue}";
        yield return NodeStatus.Success;
    }
}

This is an example of creating an OSD that displays the current IntValue. It uses the new IEnumerator<NodeStatus> capability, which lets you split a node’s lifecycle into stages. On the first run, the OSD is created; after that, it is simply updated.


Game logic

Under the selector, you can place as many nodes as you want that check the current state.
All you need to do is access TheGame and call its methods.

For example, want to read HP directly from memory? Add a method to TheGame and call it from a BT node.
Need a color check via ColorSearch? Same idea.
Even movement between locations can be moved into a method: open a portal, select an option, click—everything lives in TheGame, and the BT just makes one call.


Performance

A number of performance-related improvements were added. If you notice any issues, please report them.


Fixes / Improvements

  • [Behavior Trees] Prototype of parallel node loading — should speed up loading for large trees
  • [Scripting] The PoeShared.Blazor.Controls namespace, which contains UI controls, is now available in scripts by default
Release

1.7.8356

Permalink one year ago

Bugfixes/Improvements

  • [Behavior Trees] Fixed PopOut crash
  • [Behavior Trees] Fixed Action nodes not invoking linked Childs
  • [Behavior Trees] Fixed "Toggle Nodes" not working properly
  • [UI] Drag/Resize improvement - should feel a bit more "snappy" now
  • [DMA] Changed DLL loading order - should fix a problem with LeechCore not initializing properly on some OSes/PCs
Release

1.7.8353

Permalink 5 months ago

Behavior Trees — у узлов действий появились выходы

Теперь у всех action-узлов (Wait, MouseMove, KeyPres и т. д. — у всех без исключения) тоже есть Outputs.
Логика осталась такой же, как и у других узлов: связанный узел выполняется только в том случае, если текущий узел завершился успешно.

Output

Исправления и улучшения

  • [Behavior Trees] Исправлена ошибка: иногда CTRL+A выбирал больше элементов, чем должен был
Release

1.7.8348

Permalink one year ago

Performance - Macros UI optimizations

Done some major changes in how Macros are rendered, the overall UX should be better. Please, report any inconsistentices you may notice. There will be more changes in the following weeks, trying to address initial (first) rendering performance.

C# Scripting - Razor namespaces declaration

Probably it will be easier to show, lets take, for example a very basic Razor component created via : New Component

That is what we get as a result

UserComponent.razor

@namespace GameGrind
@inherits BlazorReactiveComponent
<!-- your Razor/HTML markup here -->

UserComponent.cs

namespace GameGrind;

public partial class UserComponent : BlazorReactiveComponent {
    //some code here
}

Note that random namespace (GameGrind, in this case) which previously was automatically inserted whenever you added a new Razor Component. This is minor, but very inconvenient technical requirement that the scripting system had. One of such inconveniences would be the fact that such code could not be easily copy-pasted to another EyeAuras script - you either had to change the namespace OR had to deal with the fact that you have multiple different non-related namespaces in your code. None of those are good thing to have. From now on, namespace declaration is not a requirement anymore - you can omit namespace declaration in BOTH .razor and .cs files and EyeAuras will automatically insert them during compilation. Less code = less headache = better life.

Bugfixes/Improvements

  • [Overlays] Changed how overlay is rendered on the screen (Hide/Show order during startup) - should make things appear on the screen a bit faster
  • [UI] Improved responsiveness of drag'n'drop in Macros/BTs
  • [Macros] Fixed a problem with Repeat/IfThenElse - drag'n'drop was not working properly
  • [Macros] Fixed a problem with Cloning - from now, the entire hierarchy will be preserved and not only the selected node
Release

1.7.8335

Permalink one year ago

BTs/Macros - Performance bugfix

In one of the latest changes in 1.6 I've introduced a bug, which made switching between BTs/Macros excruciatingly slow in some cases. Especially if you had multiple macros with a large number of nodes in them.

This patch fixes this. I'll be closely monitoring the situation.

Please report any kind of UI slowness you notice.

C# Scripting in BTs - IEnumerator

Major addition to our library of tools. More details here.

Bugfixes/Improvements

  • [UI] Fixed vertical scrollbar in Macros
  • [BehaviorTrees] Optimized BTs load times
  • [BehaviorTrees] Fixed non-critical(recoverable) crash which happened if you quickly switch between multiple BTs/Macros
  • [Scripting] Optimized dependency resolution - should consume less memory and be overall faster
  • [Packs] Made is so CheckForUpdates is now disabled by default in Packs. You(author) can still enable it if needed.
  • [BehaviorTrees] Added IEnumerator support in BTs
Release

1.7.8326

Permalink 5 months ago

Патч первого дня для 1.7

По вашим отзывам в этом патче исправлена проблема, обнаруженная в системе автообновления: если была включена опция Security Measures, приложение обновлялось некорректно и после перезапуска откатывалось на предыдущую версию.

К сожалению, по очевидным причинам я не могу просто выпустить обновление, которое само это исправит. Есть два варианта решения:

  1. Временно отключить Security Measures в Settings, обновить приложение, а затем включить опцию снова.
  2. Перейти в Downloads, скачать установщик и запустить его. Не переживайте, все ваши настройки сохранятся.

Пожалуйста, продолжайте сообщать о найденных проблемах!

Исправления и улучшения

  • [UI] Исправлено автообновление — теперь оно должно корректно работать во всех 4 режимах: standalone, portable, а также с включёнными и выключенными security measures.
Release

1.7.8305

Permalink one year ago

Новый релиз — 1.7 (RU/EN)

Была проделана большая работа, чтобы сделать Behavior Trees и всю систему скриптов более гибкими — теперь мы наконец можем создавать ботов, используя только Macros и Behavior Trees, без необходимости прибегать к Auras. Сочетание двух сложных систем (Auras и BT) усложняло понимание логики, добавленные ноды должны улучшить ситуацию.
Но, конечно, это ещё не все — в ближайшем будущем будет еще много изменений в новых нодах, особенно в часть предпросмотра.


Захват экрана — BREAKING CHANGE

На протяжении многих лет во всех триггерах типа Capture (Image/Color/Text/ML) требовался параметр Target Window — EyeAuras работала только с окнами.
Начиная с этой версии мы пробуем иной подход:

  • Если Target Window не указан, EA будет захватывать главный (Primary) экран.

Что это означает на практике?

  • Раньше очистка поля Target Window фактически прекращала работу триггеров. Теперь она лишь переключает режим на захват главного экрана. Я настоятельно рекомендую использовать Enabling Conditions, чтобы контролировать захват. Это важно! Проверьте старые триггеры, чтобы убедиться, что нет “тестовых” или “забытых” триггеров — они начнут потреблять CPU.
  • Минус один лишний шаг, если вы настраиваете что-то для личного пользования: во многих играх, запущенных в режиме Borderless Windowed или других, где игра занимает весь экран, указывать Target Window не требуется.
  • Как только мы убираем привязку к окну, работа с координатами мыши упрощается — каждая координата становится абсолютной.
  • Всё, что связано с кликами по объектам на экране, продолжит работать как прежде. Если заметите проблемы — сообщайте.

ВАЖНО! Конфигурации с несколькими мониторами пока не поддерживаются. Захватывается только главный экран. Поддержка будет расширена в будущем.

UI


🧰 Улучшения Behavior Trees & Macros

  • Крупные изменения в Macros: значительно расширена гибкость макросов.

  • Новые узлы на базе CV: узлы компьютерного зрения, являющиеся эквивалентами триггеров. Для простых ботов триггеры больше не нужны!
    -- MLSearch в связке с MLFindClass — работает с ML-моделями и позволяет фильтровать результаты ML-поиска. В сочетании с улучшениями MouseMove можно за минуты собрать point-and-click-бота!
    -- PixelSearch — находит пиксель заданного цвета.
    -- ImageSearch — находит изображение.
    -- ColorCheck — проверяет, соответствует ли цвет пикселя/области ожидаемому.

  • Новые узлы логики: позволяют управлять потоком выполнения
    -- Interrupter — условное прерывание уже запущенных узлов.
    -- Timeout — задаёт максимальное время, в течение которого дочерний узел может оставаться в состоянии Running.
    -- CheckKeyState — проверяет текущее состояние указанной клавиши.
    -- IfThenElseif..then..else в форме узла BT — полезно для тех, кто только знакомится с BT-инфраструктурой.

  • Отмена/повтор в BT: теперь можно отменять/повторять добавление и удаление узлов с помощью Ctrl+Z / Ctrl+Y.

  • Активация по хоткею: BT и Macros можно запускать напрямую горячими клавишами.

  • Login Widget: простой виджет, который можно использовать в мини-приложениях для авторизации на базе EyeAuras.

  • PopOut View: всплывающее окно с BT/Macro в режиме «только чтение» для тестирования/отладки.

  • Поддержка BT-переменных: узлы вроде MouseMove могут использовать CvLastFoundRegion из CV-поисков.


🧠 Система скриптов C#

  • Предкомпиляция и сохранение скриптов: скрипты компилируются заранее, сокращая задержки в рантайме. Можно хранить скомпилированные бинарники, чтобы избежать перекомпиляции после перезапуска.
  • API File Provider: скрипты могут внедрять и загружать дополнительные файлы (.css, .js, .md, .dll) через IScriptFileProvider.
  • Поддержка NuGet-паков: паки автоматически подтягивают и упаковывают необходимые NuGet-пакеты для лучшего офлайн-и стартап-опыта.
  • Атрибуты Keybind: скрипты могут привязывать методы к горячим клавишам через [Keybind].
  • Улучшения Dependency Injection: чище структура скриптов благодаря [Dependency] или init-свойствам для сервисов вроде SendInput.

Улучшения триггеров

  • Lifecycle Events Trigger: добавлены триггеры вроде AppStarted, позволяющие автоматизировать процессы без отображения UI EA.
  • ML Search: теперь некоторые базовые модели можно скачать прямо из UI (в будущем на той же системе будут распространяться «стандартные» модели, например, детекция HP-баров).

🔐 Упаковка и распространение


🧠 API компьютерного зрения (экспериментально)

Программируемый интерфейс для Image Search, Pixel Search, ML Detection, Text OCR с OSD-оверлеем. Подробнее здесь.


🔐 Аутентификация и лицензирование


🏎️ Производительность и оптимизации


Исправления / улучшения

  • [Crash] Исправлен сбой в BT, появившийся после последних изменений («Already cancelled»).
  • [Crash] Исправлен сбой импорта, возникавший, если в буфере обмена была ссылка на неподдерживаемый файл.
  • [BT] Добавлена новая кнопка, позволяющая запускать BT/узел «пока не остановите».
  • [BT] Исправлена ошибка, при которой можно было удалить узел, соединив его вывод с его же входом…
  • [BT] Исправлена ошибка, приводившая к множеству сообщений об ошибке при массовом удалении узлов.
  • [BT] Исправлена проблема, из-за которой узел Debounce не сохранял свойства.
  • [BT] Улучшен UX удаления узлов.
  • [BTs] Макросы теперь корректно останавливаются, когда активируется главное окно программы.
  • [Capture] Исправлена работа селектора FPS — он неправильно работал и показывал Range-селектор даже без значения «Min».
  • [Capture] Исправлена выбор области в окне Preview при применённых эффектах Resize/Rescale.
  • [ColorSearch] Небольшая оптимизация — меньше потребление памяти и примерно на 2–3 % быстрее.
  • [Macros] Повышена отзывчивость drag-and-drop в дереве.
  • [Macros] Повышена отзывчивость drag-and-drop в дереве.
  • [Macros] Узел Comment больше не выбрасывает исключение при выполнении — это сводило на нет его назначение.
  • [OSD] Исправлена неверная раскладка цветов прямоугольников OSD — каналы R и G были перепутаны.
  • [Scripting] В IBlazorWindow появилось новое свойство TitleBarViewType, позволяющее полностью заменить заголовок окна.
  • [Scripting] Добавлен метод Clear() в MiniProfiler.
  • [Scripting] В WindowImageProcessedEventArgs добавлена матрица WorldToWindow, упрощающая вычисление координат в окне после Refresh().
  • [Scripting] Добавлено неявное преобразование из string в WindowMatchExpression.
  • [Scripting] Добавлена структура Percentage для обозначения процентных значений (например, 0.1 = 10 %).
  • [Scripting] Все OSD-объекты теперь имеют Opacity.
  • [Scripting] Номера строк ошибок теперь правильно подсвечиваются/отображаются при ошибках компиляции.
  • [Scripting] (Вроде бы) исправлена проблема с некорректной работой LoginWidget.
  • [Scripting] Немного улучшена производительность первого запуска скриптов (3–5 %).
  • [Scripting] В аурах исправлена ошибка, которая могла помешать выполнению скрипта, если аура была слишком быстро отключена.
  • [Scripting] Чуть оптимизировано использование памяти (утилизация AuraScript).
  • [Scripting] API SendInput переведён из SendInputUnstableScriptingApi в SendInputScriptingApi — за год не менялся, достаточно стабилен.
  • [SendInput] Исправлена проблема, при которой взаимное чередование Delays/SendInputs могло блокировать друг друга (ошибка последней версии).
  • [SendSequence] Исправлена проблема, из-за которой последовательности нажатий клавиш могли прерываться раньше времени; отправлялась лишь часть последовательности. Спасибо @Rowenor за находку!
  • [SendText] Исправлено неверное размер поля ввода текста.
  • [TextSearch] Исправлена ошибка: параметр IncludeTextSegments не сохранялся в конфиге.
  • [UI] Добавлена опция «Move To Parent» в дереве аур.
  • [UI] Исправлен сбой при установке недопустимого имени ауры.
  • [UI] Исправлена серьёзная проблема с аутентификацией — в ряде случаев даже автор паков не мог публиковать обновление («Non-authorized users are not allowed to update shares»).
  • [UI] Исправлена проблема с манифестом приложения, из-за которой требовался перезапуск для получения прав администратора (нужно протестировать на разных версиях ОС).
  • [UI] Исправлено смещение выделения в полноэкранном селекторе областей.
  • [UI] Исправлена чувствительность логина к точности системных часов пользователя.
  • [UI] Исправлена проблема с пакетами — закрытие окна лицензионного соглашения приводило к завершению приложения (только при первом запуске).
  • [UI] Исправлена работа Overlays в предкомпилированных пакетах.
  • [UI] Исправлено дублирование сообщений скрипта в Event Log.
  • [UI] Исправлена работа опции Start Minimized в некоторых условиях.
  • [UI] Исправлено выравнивание CodeEditor в развёрнутом окне.
  • [UI] Исправлена ошибка, из-за которой импорт-ссылки с AuraLibrary могли не работать в некоторых случаях.
  • [UI] Рефактор окна лицензионного соглашения — должно открываться быстрее.
  • [UI] Мелкие исправления PopOut-функционала, добавленного в прошлом релизе.
  • [UI] Доработана поддержка полу-офлайн режима — улучшён алгоритм обновления токена.
  • [UI] Использование точки («.») в именах аур исторически приводило к множеству проблем, так как EA сохраняет ауры на диск под этими именами, а точка обычно разделяет имя и расширение. Теперь EA выдаёт ошибку, если попытаться задать имя с точкой — как и при других недопустимых символах.
  • [Web] Исправлены ссылки на странице Aura Library — отсутствовал hostname.
Release

1.6.8304

Permalink 5 months ago

Деревья поведения — в некоторые узлы добавлена опция Invert

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

По смыслу она очень простая и полностью эквивалентна узлу Inverter, но встроена прямо в сам узел.

Причина в том, что BT обычно разрастаются очень-очень быстро, и уменьшение общего количества узлов помогает сохранять структуру дерева более понятной и аккуратной.

Invert

P.S. Да, последние несколько недель были довольно тихими. Внутри я работаю над новой крупной функцией, которая станет доступна публично позже в этом году. Буду держать вас в курсе.

Исправления и улучшения

  • [BT] Исправлена ошибка, из-за которой при массовом удалении нескольких узлов отображалось множество ошибок
Release

1.6.8297

Permalink 5 months ago

Улучшения производительности — пожалуйста, сообщайте о любых замеченных проблемах

Проделан огромный объём работы над внутренними механизмами программы — слишком большой, чтобы перечислять всё по пунктам. Такие изменения нередко приводят к цепочке мелких багов, поэтому, пожалуйста, обращайте внимание на любые странности в работе и сообщайте о них. Я буду внимательно следить за входящими сообщениями.

Поведенческие деревья — добавлена поддержка Undo (CTRL+Z) / Redo (CTRL+Y)

Писать скрипт в узле ExecuteScript, а потом случайно удалить его — то ещё удовольствие. Знакомая ситуация.

Теперь такие изменения можно быстро откатить прямо на месте. На данный момент Undo/Redo поддерживает только добавление и удаление узлов. Поддержка изменений других типов появится, как только механизм станет достаточно стабильным.

BT

Исправления и улучшения

  • [BT] Исправлена ошибка в BT, из-за которой можно было удалить узел, соединив его выход с его же входом...
  • [UI] Улучшена поддержка Semi-Offline mode — доработан алгоритм обновления токена, теперь всё должно работать плавнее
  • [Scripting] У IBlazorWindow появилось новое свойство TitleBarViewType, которое позволяет полностью заменить заголовок окна на любой вариант по вашему выбору