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.5.7644

Permalink 5 months ago

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

  • [Sync] Исправлена ошибка в механизме слияния аур v7612 #EA-735 от Steamy: Index is equal to or greater than Count
  • [Scripting] Исправлен краш, возникавший из-за освобождения BehaviorSubject
  • [Scripting] Исправлена проблема в Loop rewriter — вложенные классы обрабатывались некорректно
  • [Bindings] Исправлена проблема в Bindings Editor — в некоторых случаях биндинги создавались для ранее выбранного элемента, а не для текущего
Release

1.5.7639

Permalink one year ago

C# Scripting Engine V3 - added Blazor/Razor support

Major upgrade in the scripting engine - it can now compile Razor components. Blazor (Razor components are part of Blazor infrastructure) is one of the best (my opinion - for desktop apps just the best) UI technology which allows to have full power of C# and at the same time great performance/convenience of Web (HTML/CSS/JS) world.

EyeAuras is also using it under the hood since 2023 and is gradually being rewritten from WPF to Blazor. At some point in the future is expected to become full Blazor-driven app. Parts which are using it - BT editor, Macro editor, EventLog, Bindings, AuraTree. If some part of the program feels snappy you can bet it is using Blazor.


Previously, if you wanted to develop your own user interface for your bot, the only viable option was to use WebUI Overlay which at this point is using very dated text editor and, more importantly, uses older version of the scripting engine (V2) back from April 2023(!). Of course, you could load up the project in your IDE of choice (like Visual Studio or Rider), but that was definitely not very convenient and took some extra steps.

At the same time, BTs, Macros and C# Action/Trigger have been using the newer iteration of scripting engine since Jan 2024, but they newer really had Razor support as it was technically challenging task to add it there without preparing some other systems first. And, finally, today we're getting the first prototype. This is not just new feature - allowing users to create windows straight from the code makes it possible to develop full-blown standalone bots.

What it already can do:

  • you can create custom UI components right there in that same text editor
  • full auto-completion for C# part of Razor component and partial - for Razor part
  • API which allows to create windows and manage with your components right from your code
  • thread-safety - in contrast with WPF/WinForms and even official MS Blazor integration, EA API is thread-safe, meaning you can update properties of the window from any thread and it is expected to be able to properly process those. No longer you have to worry about deadlocks and UI marshalling using Invoke/BeginInvoke.
  • API mimics native WPF API to make it easier to code something using ChatGPT

What it cannot do (yet):

  • custom CSS/JS - in November
  • No integration with IDE like in V2 - in December
  • no hot-reload like in WebUI - there will be a next iteration of WebUI which will be using this new script engine somewhere in Dec/Jan or maybe even earlier

Example

Bugfixes/Improvements

  • [SendInput] Improved performance of Windows Message API in multi-window scenarios
  • [UI] Fixed crash which happened when Offset+Anchor were used at the same time
  • [UI] Added SendText node, available in both BTs and Macros
  • [Scripting] Improved Log.Info/Debug/Warn formatting - now UI properly renders line breakes
  • [SendInput] Improved how keypresses/mousemove logs look like

Some UI examples which are created in EA

GTA

Release

1.5.7612

Permalink 5 months ago

Новая альтернатива для 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, только гораздо гибче) Macro1

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

Портативная версия

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

Download portable

Поддержка Yolo 10

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

Yolo results

SubTree как узел

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

Subtree

Новый узел — Mouse Move

Этот узел теперь доступен в Macros и BTs.

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

Как и в Send Sequence, теперь можно привязывать X и Y, связывать ауры и точно управлять тем, куда именно кликать по найденному изображению или объекту. Есть два режима редактирования: простой и расширенный.

MouseMove simple mode

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

MouseMove advanced

Узел KeyPress теперь поддерживает клики мышью и прокрутку колеса

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

Key Press

C# scripting — автоматические улучшения кода

Одна из ключевых возможностей EyeAuras — это движок C#-скриптов, который позволяет компилировать, загружать и выполнять ваш код в реальном времени. Он используется в actions, triggers и behavior trees. Поскольку ограничений на код почти нет, пользователи нередко допускают ошибки, которые приводят к крашам, deadlock'ам и другим типичным проблемам программирования. Я уже упоминал это в changelog 7060.

В этой версии я добавил механизм, который расширяет ваш код, чтобы уменьшить последствия распространённых ошибок. Например:

  • неперехваченные исключения в Task
  • использование Thread.Sleep вместо метода Sleep из EyeAuras, который заметно точнее и умеет отменяться
  • бесконечные циклы вроде while(true){} вместо while(!cancellationToken.IsCancellationRequested){}

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

Если заметите что-то необычное — обязательно сообщайте.

Макросы можно использовать просто для отправки последовательностей нажатий клавиш: Send sequence

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

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

Folder Defaults — добавлен выбор Input Smoother

В свойства папки добавлен выбор Input Smoother. Input Smoother определяет, как именно мышь перемещается из точки A в точку B и на сколько шагов разбивается это движение.

Как и другие настройки, этот параметр распространяется на все элементы внутри папки — узлы, actions, triggers и т. д.

Input Smoother

Новый редактор ссылок

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

Old version

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

New version

Переработка 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 для чтения/записи значений. Это будет опубликовано позже.

Blackboard Variables

Два новых эффекта изображения

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; }

    ...
}

Include all matches

Это крайне тяжёлая задача для 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
Release

1.5.7607

Permalink 5 months ago

Поддержка Yolo 11

YOLO11 — это последняя версия серии Ultralytics YOLO для детектирования объектов в реальном времени.

Yolo 11

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

  • [UI] Исправлен сбой Cannot access a disposed object. #EA-687 v7598 by ganya
  • [UI] Исправлен сбой в функциональности Replay #EA-679 v7527 by linqse
Release

1.4.7598

Permalink one year ago

Server-side improvements

Worked on stability - should solve those problems which crashed server under peak load. Now it should just slow down :D Thanks everyone who became part of that pleasant problem, welcome aboard :)

Portable version

Added new button to main web page which allow to download archive with the most recent version. It will be fully portable with a config that is separate from the main app. This mechanism has already been tested for a few months in Packs, so should work without major issues.

p.s. Please note that portable version is not available for Stable yet, it will be available right after I will push alpha to stable in the next few days.

Download portable

Bugfixes/Improvements

  • [Scripting] Added TargetWindow to ISendInputUnstableScriptingApi - this allows to use Windows Message API and send inputs to background windows.
  • [UI] Improved Import/Export dialogs error handling - errors should be more meaningful now and shown in a more presentable way
  • [UI] Added badge which shows how many auras are there in Archived state. This is god-forbidden functionality which allows to Archive(aka unload and hide) auras which you currently do not use - this speeds up app load process quite a lot.
Release

1.4.7584

Permalink 5 months ago

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

  • Добавлена возможность скачивать portable-версии — пока что через портал хостинга, позже появится и на сайте.
  • [UI] Исправлен сбой System.InvalidCastException: Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.FrameworkTemplate' by Mintrok #EA-655
  • [UI] Улучшены Bindings — добавлена поддержка преобразования из T в Nullable of T (например, int в int?) #EA-660 v7569 by Gwyn
Release

1.4.7577

Permalink one year ago

Bugfixes/Improvements

  • [UI] Fixed a bug which could sometimes crashed webview during load (split-container related)
Release

1.4.7560

Permalink one year ago

Bugfixes/Improvements

  • [UI] Fixed bug with cloning and links not being cloned properly
  • [UI] Fixed crash which occurred when EA could not parse hotkey modifier (happened in non-latin cultures)
  • [UI] Fixed bug with new folders not always being shown in Links editor
  • [UI] Minor performance improvements - removed some old garbage which increased load time
  • [UI] Implemented Install service which allows to instruct EA to install multiple packs on first launch - will provide more details later on this
Release

1.4.7550

Permalink one year ago

Two new image effects

Binary Threshold

Very useful for analysis as it allows to split image to black and white which makes further checks much more simple. E.g. instead of having red HP bar with a lot of shades, you can convert it to black/white image where white is filled area of the bar.

Color Quantization

Another image simplification technique, allows to reduce total number of colors in the image. By itself it is mostly useless, but can help in combination with other effects.

Bugfixes/Improvements

Made is to IsMaximized in ExecuteScriptNode is stored in the node itself

  • [MLSearch] If model has invalid format - meaningful error will be shown
  • [UI] If Check for Updates is disabled, app will not do it during startup anymore
  • [ImageSearch] Made it so Load from preview pane avoids copying debug data
Release

1.4.7533

Permalink 5 months ago

Переработка Sleep()

Ожидание чего-либо — обязательная часть любой автоматизации. EyeAuras постоянно с этим работает: задержки между нажатиями клавиш, поддержание стабильного FPS захвата, пользовательские таймауты в скриптах. Стандартные инструменты операционной системы и базовые методы вроде Thread.Sleep, Task.Delay и некоторых других недостаточно точны, поэтому в какой-то момент пришлось реализовать комбинацию подходов, которая обеспечивала лучшую точность.

Этот механизм позволял делать ожидания с точностью до долей миллисекунды и использовался последние 5–6 месяцев. К сожалению, такая точность имеет свою цену, и для большинства операций она попросту не нужна.

Поэтому в ближайшие несколько месяцев мы будем тестировать 3-ю версию Sleep(), которая должна стать компромиссом между точностью и затратами по производительности. В среднем ожидаемая точность — до 0.5 - 5ms.

Это значит, что если вы задаёте ожидание 1ms, фактическая задержка будет примерно в диапазоне 1 - 1.5ms, чего более чем достаточно для большинства сценариев. Для более длинных таймаутов, например 100ms, фактическое время может быть в диапазоне 100 - 105ms.

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

В рамках разработки этой функции я также добавил интеграционный слой, который позволит использовать тот механизм Sleep(), который лучше подходит именно под ваш сценарий. Подробнее об этом расскажу позже.

Переработка редактора Variables

  • Теперь используется единый редактор для Blackboard и Variables
  • Появилась возможность редактировать значения напрямую (пока не все, для начала — только примитивные типы)
  • Теперь можно добавлять новые переменные — это должно немного упростить настройку
  • Подготовлен механизм, который будет генерировать boilerplate-код для C#-скриптов и автоматически создавать Properties для получения и установки значений. Это будет опубликовано немного позже.

Blackboard Variables

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

  • В ExecuteScriptNode свойство IsMaximized теперь сохраняется в самом узле
  • [BehaviorTrees] Узел ExecuteScript теперь запоминает, был ли он развернут (Maximized) или нет
  • [Scripting] В ScriptVariable добавлен Listen() — теперь его можно использовать вместо WatchCurrentValue
  • [Scripting] Исправлена проблема, из-за которой в некоторых случаях папки не находились по относительному пути
  • [Scripting] Исправлена проблема, при которой code rewriter в некоторых случаях генерировал некорректный код, не проходящий компиляцию