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.10036
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.5.7895

Permalink 6 months ago

C# Scripting — добавлена возможность подключать сборки по пути и имени

Уже несколько месяцев в скриптах доступна возможность подключать NuGet-пакеты:

#r "nuget: Coroutine, 2.1.5"

Log.Info("Hello, World!"); //you can use Coroutine classes in that script

Теперь эта возможность расширена: сборки можно подключать еще двумя способами.
Важно: эти способы подключения доступны только внутри Script.csx, который является аналогом вашего Program.cs в «обычном» C#.

По пути к сборке — из файла

Синтаксис очень похож:

#r "assemblyPath: D:\Work\EAExile\EAExileAgent.Shared.dll"

Log.Info("Hello, World!"); //you can use EAExileAgent classes in that script

По имени сборки

Этот способ позволяет подключать сборки, которые:

  • уже загружены EyeAuras, но не входят в список сборок, подключаемых по умолчанию
  • были загружены через Assembly.Load или любым другим способом, но уже присутствуют в AssemblyLoadContext/AppDomain
  • находятся в GAC

Исторически EA подключала по умолчанию ОЧЕНЬ много сборок — больше 300. Это экономит пользователям время на предварительной настройке зависимостей для каждого C#-действия, узла BT и т. д., но в долгосрочной перспективе такой подход не очень хорош. Постепенно я буду убирать всё больше сборок из списка подключаемых по умолчанию и добавлю более удобные механики автодополнения, чтобы нужные библиотеки можно было легко подключать прямо под ваш сценарий. В будущем это упростит обновление программы для всех.

#r "assemblyName: Grpc.Net.Client"

Log.Info("Hello, World!"); //you can use Grpc.Net.Client classes in that script

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

  • [Scripting] Исправлена проблема в rewriter для CancellationToken — в некоторых случаях он некорректно обрабатывал необязательные аргументы
Release

1.5.7881

Permalink 6 months ago

C# Scripting — добавлено сканирование по сигнатурам

Что такое Pattern Scanning?

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

Зачем это нужно?

  1. Динамические адреса: программы часто загружают код и данные в разные места памяти при каждом запуске. Pattern scanning позволяет находить нужное независимо от того, где именно это оказалось.
  2. Уникальные совпадения: сигнатуры работают как отпечатки пальцев — они помогают распознавать конкретные области памяти по уникальным последовательностям байтов.

BytePattern

Добавлен класс BytePattern, который поддерживает несколько способов описания сигнатур. Это упрощает работу с разными типами шаблонов, которые обычно используются при сканировании памяти.

Сканирование по сигнатурам доступно для любого типа, реализующего интерфейс IMemory, например:

using var process = LocalProcess.ByProcessName("pathofexile"); //uses naive RPM under the hood
Log.Info($"Process: {process}");
var modules = process.GetProcessModules(); //enumerate all loaded modules

using var memory = process.MemoryOfModule("pathofexile.exe"); //memory implements IMemory
Log.Info($"Process memory: {memory}, base: {memory.BaseAddress.ToHexadecimal()}");

// will find a singular offset pointing at 4th byte in the sequence
var offset = memory.FindOffset(BytePattern.FromTemplate("55 8B ?? ^ EC 00")); 

// will return dictionary with all found offsets for all given patterns
var playerPattern = BytePattern.FromTemplate("55 8B ?? ^ EC 00");
var targetPattern = BytePattern.FromTemplate("BB AA ??");
var offsetsByPattern = memory.FindOffset(playerPattern, targetPattern);

// by using Get* instead of Find* the code will throw an exception in case pattern is not found
var criticalOffset = memory.GetOffset(BytePattern.FromTemplate("55 8B ?? ^ EC 00")); 

Поддерживаемые типы сигнатур

  1. Массивы байтов

    • Позволяют задавать сигнатуру точными значениями байтов.
    • Пример:
    var pattern = BytePattern.FromPattern(new byte[] {0x55, 0x8B, 0xEC});
    

    Точно совпадает с этими байтами.

  2. Сигнатуры в C-стиле

    • Используют escape-последовательности вида \xAA\xBB\xCC, как в шаблонах C-style.
    • Пример:
    var pattern = BytePattern.FromTemplate("\x55\x8B\xEC");
    

    Эквивалентно массиву байтов [0x55, 0x8B, 0xEC].

  3. Шестнадцатеричные строки с wildcards

    • Сигнатура задаётся как hex-строка, где ?? означает wildcard (любой байт).
    • Пример:
    var pattern = BytePattern.FromTemplate("55 8B ?? 83");
    

    Совпадает с любой последовательностью, начинающейся с 55 8B, затем с любым байтом и потом 83.

  4. Маскированные сигнатуры

    • Сочетают массив байтов и маску, где фиксированные байты помечаются как x, а wildcard — как ?.
    • Пример:
      var bytes = ;
      var mask = ;
      var pattern = BytePattern.FromMaskedPattern(new byte[] { 0x55, 0x8B, 0xEC, 0x00, 0x08 }, "xxx??");
      
      Совпадает с любой последовательностью, начинающейся с 55 8B EC, после чего идут любые два байта.
  5. Шаблоны со смещением

    • Позволяют задать сигнатуру через шаблон и отметить позицию итогового смещения символом ^.
    • Пример:
    var pattern = BytePattern.FromTemplate("55 8B ?? ^ EC 00");
    

    В этом случае смещение ставится прямо перед EC (то есть после пропуска 3 байтов). Это означает, что после нахождения сигнатуры итоговый offset будет Offset + 3.


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

  • [UI] Небольшое исправление layout в вынесенном C# editor
Release

1.5.7874

Permalink 6 months ago

Улучшения редактора скриптов

Редактор C# Script Action стал заметно удобнее. Пока изменения касаются только Action — редактор в BTs/Triggers/Overlays пока остался прежним.

  • Всплывающее окно редактора теперь должно открываться гораздо быстрее — обычно примерно за ~1 секунду. PopOut

  • Добавлена кнопка Topmost. С её помощью можно закрепить редактор кода поверх остальных окон — особенно полезно, если вы редактируете что-то в реальном времени. TopMost

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

  • Также исправлено несколько мелких ошибок.

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

  • [UI] Исправлена проблема, из-за которой C# Action в некоторых случаях отменялся, даже если включён Ignore Cancellation.
Release

1.5.7870

Permalink one year ago

Bugfixes/Improvements

  • [Scripting] Fixed a problem with new/removed files not always being displayed in UI
  • [BehaviorTrees] BT improvements - made it so empty BT does not throw
  • [BehaviorTrees] Added new bindings to KeyPress and MouseMoveRel nodes
  • [Scripting] Fixed a problem with INotifyPropertyChanged implementation in scripting
  • [UI] Improvement in Bindings Editor - if binding fails, error will be shown
  • [UI] Fixed a problem with bindings BT-to-BT not working properly
Release

1.5.7859

Permalink one year ago

C# Scripting - sneak peek into live import

You may have noticed that for the last 3-4 weeks number of changes has been lower than usual. The primary reason is me focusing on a new feature - live import in C# scripts, which will allow you to use full-blown IDEs such as Visual Studio and Rider for editing scripts. For smaller scripts this is not that important, but for larger projects it is hard to overestimate quality of life that IDEs bring to the table.

Demo

In one of the following weeks this will be available for public testing, need some time to polish things. Also, as a part of scripting subsystem improvements, there were some changes done in the engine, which now allow you to use NuGets which rely on native libraries, such as ImGui - a lot of programmers out there have experience with it an now you can leverage that knowledge and create ImGui overlays straight from the code.

This is an example of a live clickable ImGui overlay, which can contain any kind of data you want, running inside EA and being able to leverage any functionality - computer vision, neural networks, memory read, input emulation - anything.

Bugfixes/Improvements

  • [UI] Fixed a problem with items in AuraTree sometimes not reacting to selection
Release

1.5.7849

Permalink 6 months ago

Обновления: диапазон Similarity в Color Search и Replay в Capture-триггерах

Color Search: добавлен выбор диапазона Similarity

Появилась новая возможность: теперь можно задать диапазон Similarity, в котором триггер будет считаться Active.

По умолчанию триггер активен только в том случае, если значение Similarity выше заданного порога, например:

MinSimilarity

Теперь можно указать диапазон значений Min/Max для Similarity, например:

MinMaxSimilarity

В таком случае, даже если Similarity достигнет 100%, триггер все равно будет Inactive, потому что ожидаемое значение должно находиться в диапазоне от 55.95 до 62.94 включительно.

Напоминание: Replay в Capture-триггерах

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

Нажмите Replay — программа начнет сохранять запись во временный видеофайл.

Replay

Когда закончите, просто нажмите Stop.

Stop

После этого окно предпросмотра переключится в режим, где данные изображения загружаются из видеофайла. С этой записью можно работать так же, как и с обычным захваченным изображением: выбирать пиксели, копировать области в буфер обмена и т. д.

Когда режим больше не нужен, переключитесь обратно на стандартную опцию Image as is в правом нижнем углу.

from file

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

  • [Capture] В эффектах и в Color Search исправлена проблема, из-за которой Color picker работал некорректно вместе с Replay
Release

1.5.7802

Permalink one year ago

Early-early prototype - C# Overlay v3

Added new type of Overlay, which uses the latest version of EyeAuras scripting engine - same one, that is used in C# Actions/Triggers and BehaviorTrees. For the next few weeks old C# overlay and new one wil co-exist. As soon as I will releat Export/Import functionality, old one will go away as it is worse in everything - performance, flexibility, etc.

Aside from scripting engine changes, this new overlay is using recently added Blazor Windows, which should make overlays more responsive and just in general more pleasant to work/interact with.

IMPORTANT! The overlay is far from being completed - there are still a lot of rough edges which I will work on in the following weeks.

Bugfixes/Improvements

  • [UI] Fixed minor bug in authentication
Release

1.5.7786

Permalink one year ago

Bugfixes/Improvements

  • [Scripting] Fixed a problem with nuget packages in scripts - they were stripped by rewriters under some circumstances
Release

1.5.7730

Permalink one year ago

Bugfixes/Improvements

  • [Scripting] Console.WriteLine now prints output to EventLog. Done this to improve usability of ChatGPT-generated scripts.
  • [UI] Changed how internal app channels are handled - should prevent one rare type of crashes
Release

1.5.7706

Permalink 6 months ago

Крупные изменения в аутентификации — подготовка к офлайн-режиму

Почти полностью переработана часть программы, которая отвечает за получение данных аутентификации с сервера.

Цель этих изменений — в будущем позволить пользоваться программой без подключения к серверу. Это многоэтапная работа, и первым этапом стала внутренняя переработка соответствующих механизмов.

Улучшения Window Selector — добавлены свойства-фильтры

Window Selector — это элемент управления, с помощью которого можно выбрать или указать Target Window. В течение многих лет он автоматически исключал из поиска все окна, которые находились под управлением EyeAuras.

Теперь это поведение стало опциональным. Его можно отключить, добавив [ownedBy=any] в выражение, например:

My Window [ownedBy=any]

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

Также был добавлен похожий фильтр, позволяющий захватывать так называемые Tool windows. К этому типу, например, обычно относятся Overlays.

По умолчанию такие окна игнорируются. Чтобы добавить их в список возможных кандидатов, допишите [type=any] в конец выражения сопоставления, например:

My Overlay [ownedBy=any][type=any]

Такое выражение позволит находить любое окно/overlay с заголовком My Overlay.

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

  • [Capture] Исправлена проблема, из-за которой WGCS пытался захватить изображение до того, как окно становилось видимым (Argument out of range)
  • [Scripting] Улучшен CodeEditor: изменён способ подсветки ошибок, добавлен single-file Razor template и обновлён сам шаблон
  • [UI] Исправлен счётчик эффектов #EA-753 Effects counter v7668 by Headway9016
  • [UI] Исправлена проблема с Export/Activation на стороне сервера