1.9.9740
Daily-driver build with the safest release cadence.
- Updated
- 4 days ago
- File Size
- 517.97 MB
- Release Notes
- Open notes
Stable is the recommended track for most users. Alpha gets you the newest capabilities first.
Daily-driver build with the safest release cadence.
Fastest release track with the newest features and experiments.
Every release stays linked here so you can inspect what changed before you switch versions.
New major feature entering alpha phase - it is now possible to Export your C# Overlays/Actions (Triggers and Nodes are still not allowing that) into .sln solution.
Modern IDEs provide a lot of QoL features without which it is inconvenient to do any kind of serious development. EA script editor will never be able to close that gap between "text editor with syntax highlighting and autocompletion" and real IDEs. It is a tool for script development, that is it. But at that point set of features that EA SDK provides has gone far beyond what is required for usual scripting - you can create a full-blown program with NuGet packages

You can then open this solution in JetBrains Rider (recommended) or Microsoft Visual Studio.
Solution which you'll get will consist of one or multiple projects (depending on what you've exported). It is build-able and you can add unit-testshttps://www.jetbrains.com/help/rider/Getting_Started_with_Unit_Testing.html).

Export I've already briefly covered, importing changes back is as simple as selecting Solution file you've previously exported. EA will load changes in source code files which you've made in IDE.
As solution can have multiple projects in it (e.g. unit-tests project), EA will try to match projects which you already have in the program (in a form of C# actions) to those in solution and will ignore those which it is not aware of.
Importing changes over and over and over again could be exhausting and is not even close to desired workflow.
That is where another feature comes into play.
Click on Live Import, select .sln and EA will start monitoring for any changes made in that directory where solution resides in. As soon as it will detect those changes, it will import them back to EA. Essentially, this make it so the code in C# action/overlay you're working on becomes live. This is especially noticeable for Overlays, which are inherently recompiled as soon as any changes are made. So as soon as you'll do some changes in Overlay code, it will be almost instantly picked up by EA, recompiled and loaded. Think of it as of ghetto spin-off of Hot Reload feature, but that works.

Git is a golden standard of version control systems. EA internally uses it for many things such as configuration version control. So it was just natural to set exported projects as git repositories during export. Whenever you're exporting/importing changes back to EA, it automatically creates git repository OR commits changes you've made. This makes it easy to rollback the code in case something goes wrong.

For now, you cannot debug or run the project from IDE. This will be one of the improvements I'll be working on in 2025. Eventually, you should be able to use EA as a script runner. But to make it happen I still have to do some changes.
ScriptingAPIs, this would correspondingly lead to disposal of OSD/Windows/etc created by script
Added simple way of randomizing XY. Together with Input Smoothing, this should make inputs appear more humane.

Execute Tree and Execute Macro which could be called from Auras. This is a "glue" which allows to wire together two automation approaches which exist in EAУже несколько месяцев в скриптах доступна возможность подключать 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
Этот способ позволяет подключать сборки, которые:
Assembly.Load или любым другим способом, но уже присутствуют в AssemblyLoadContext/AppDomainИсторически EA подключала по умолчанию ОЧЕНЬ много сборок — больше 300. Это экономит пользователям время на предварительной настройке зависимостей для каждого C#-действия, узла BT и т. д., но в долгосрочной перспективе такой подход не очень хорош. Постепенно я буду убирать всё больше сборок из списка подключаемых по умолчанию и добавлю более удобные механики автодополнения, чтобы нужные библиотеки можно было легко подключать прямо под ваш сценарий. В будущем это упростит обновление программы для всех.
#r "assemblyName: Grpc.Net.Client"
Log.Info("Hello, World!"); //you can use Grpc.Net.Client classes in that script
Pattern scanning is a method used to search for specific byte sequences in memory. It’s useful for finding functions, data, or code that doesn’t always stay at the same location when a program is running.
BytePatternThe BytePattern class has been added to support multiple ways of defining patterns. These updates make it easier to work with different types of patterns commonly used in scanning memory.
Pattern scanning is available on any type implementing IMemory interface, e.g.
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"));
Byte Arrays:
var pattern = BytePattern.FromPattern(new byte[] {0x55, 0x8B, 0xEC});
matches exactly those bytes.
C-Style Patterns:
\xAA\xBB\xCC, like in C-Style patterns.var pattern = BytePattern.FromTemplate("\x55\x8B\xEC");
is equivalent to the byte array [0x55, 0x8B, 0xEC].
Hexadecimal Strings with Wildcards:
?? for wildcards (any byte).var pattern = BytePattern.FromTemplate("55 8B ?? 83");
matches any sequence starting with 55 8B, followed by any byte, and then 83.
Masked Patterns:
x) and which are wildcards (?).var bytes = ;
var mask = ;
var pattern = BytePattern.FromMaskedPattern(new byte[] { 0x55, 0x8B, 0xEC, 0x00, 0x08 }, "xxx??");
Matches any sequence starting with 55 8B EC, followed by any two bytes.Templates with Offsets:
^.var pattern = BytePattern.FromTemplate("55 8B ?? ^ EC 00");
sets the offset right before EC (skipping 3 bytes). That means after the pattern is found, final offset will be Offset + 3
C# Script Action editor (only Action for now, editor in BTs/Triggers/Overlays is still the same) got some love:



Возможно, вы заметили, что за последние 3–4 недели изменений было немного меньше, чем обычно. Основная причина в том, что я сосредоточился на новой функции — live import для C#-скриптов. Она позволит редактировать скрипты в полноценных IDE, таких как Visual Studio и Rider.
Для небольших скриптов это не так критично, но в крупных проектах удобство и возможности IDE трудно переоценить.

В течение одной из ближайших недель функция станет доступна для публичного тестирования — нужно ещё немного времени, чтобы всё отполировать.
Кроме того, в рамках улучшения подсистемы скриптинга были внесены изменения в движок. Теперь можно использовать NuGet-пакеты, которые зависят от native libraries, например ImGui. Многие разработчики уже знакомы с ним, и теперь вы сможете использовать этот опыт для создания ImGui-оверлеев прямо из кода.
Ниже пример интерактивного кликабельного ImGui-оверлея, который может отображать любые нужные вам данные. Он работает внутри EA и может использовать любые возможности системы: computer vision, neural networks, memory read, input emulation — всё что угодно.

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

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

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

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

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

Color picker работал некорректно вместе с ReplayAdded 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.