Blueprint Editor для Lua
На вкладке Lua нажмите Open Blueprint Editor. Редактор откроется отдельным окном: его можно переместить за заголовок, изменить размер за край или угол и оставить открытым при переходе на другую вкладку меню. Событие запускает соединённые действия, а Compile + load сохраняет .lua в облачной библиотеке и сразу загружает его. Поля Script name и Lua file позволяют независимо назвать скрипт в списке и его выходной файл.
Исходник графа хранится в облачном ресурсе main.blueprint.json отдельно от скомпилированного Lua-кода, поэтому можно вернуться к редактированию после перезапуска.
Как работать
- Кликните правой кнопкой на пустом поле и выберите ноду: она появится возле курсора.
- Соедините
Out >одной ноды с> Inдругой. Это последовательность действий. Отдельные бирюзовыеValue-контакты передают число, boolean или текст. У ветвления есть два выхода:True >иFalse >. - Настройте значения прямо внутри нод.
- Нажмите Save, чтобы сохранить только граф, или Compile + load, чтобы сохранить граф и запустить результат.
- Load перечитывает сохранённый граф. Reset запрашивает подтверждение, затем создаёт начальный пример.
Если ноды из старого графа оказались далеко за пределами окна, нажмите Arrange nodes: редактор расставит их сеткой, сохранит граф и покажет всю схему. Новые ноды появляются возле места клика правой кнопкой. Edit overlay positions в верхней строке включает перенос элементов уже на самом оверлее; чтобы увидеть и перетащить текст, закройте или отодвиньте окно редактора.
Имя файла допускает латинские буквы, цифры, _ и -; суффикс .lua добавляется автоматически. Другие символы, включая разделители пути, отбрасываются. При компиляции под новым именем ранее загруженная версия выключается. Старый файл на диске не удаляется.
Связь можно удалить клавишей Delete после выделения. Новая связь с входом заменяет прежнюю: у каждого входа не более одного источника. Из одного выхода допускается несколько последовательных действий. Цикл действий не приводит к бесконечной генерации: компилятор останавливает повторный проход по уже посещаемой ноде. Циклические связи данных редактор отклоняет.
Ноды
| Группа | Нода | Результат в Lua |
|---|---|---|
| Event | Render | events.on("render", ...) — отрисовка оверлея каждый кадр |
| Event | Tick | events.on("tick", ...) — логика каждый кадр |
| Event | Menu | events.on("menu", ...) — элементы на вкладке Lua |
| Flow | Key down branch | Проверка input.is_down(key) и выбор ветки True/False |
| Flow | If / else | Условие с типовым шаблоном или своим Lua boolean-выражением; выходы True/False |
| Render | Text | Текст с позицией, размером, цветом и outline |
| Render | Line | Линия с цветом и толщиной |
| Render | Rectangle | Контур прямоугольника с цветом и толщиной |
| Menu | Text | Текст в меню |
| Menu | Config checkbox | Чекбокс, связанный с булевой настройкой по ключу |
| Menu | Window | Отдельное окно; Inside для его содержимого, After для продолжения вне окна |
| Menu | Button branch | Действие по нажатию кнопки через выход True |
| Menu | Config keybind | Выбор клавиши для встроенного config-бинда |
| Menu | Custom keybind | Свой бинд скрипта с произвольным ID |
| Config | Set value | Установка булевого, числового или текстового значения |
| Client | Log | Запись сообщения в лог |
| Lua | Custom code | Произвольный Lua-код с доступом к публичному API в текущем событии |
| Data | Value | Типизированное значение: поле игрока, schema, config, константа или Lua-выражение |
| Data | Math | Сложение, вычитание, умножение и деление двух чисел |
Ноды Render выполняются только под событием Render, а ноды Menu — только под Menu. Если соединить их с неподходящим событием, это действие будет пропущено; следующие ноды в цепочке продолжат выполняться.
У Render: Text/Line/Rectangle есть Drag on screen и Scale with screen. После Compile + load откройте вкладку Lua, включите Edit overlay positions и перетащите выделенный объект по экрану. Позиция сохранится автоматически. Scale with screen хранит относительное положение для других разрешений. Если снять Drag on screen, будут использованы статические координаты ноды.
У Render: Text нажмите Data source и выберите вариант в списке, раскрытом внутри ноды: статический текст, HP, броня, битовые флаги, on_ground, пинг, скорость, своё Lua-выражение либо integer/number/boolean из schema. Поле Prefix добавляется перед динамическим значением; недоступное значение показывается как -. Для schema укажите класс и поле. Например, HP: + Local health (integer) выводит текущие HP без ручной записи Lua.
Связи данных
Создайте Data / Value правым кликом. Внутри ноды выберите источник: Local health, Local armor, Local flags, Local on ground, Local ping, Local velocity, schema-поле нужного типа, config-путь, константу или своё Lua-выражение с объявленным типом. У выходного контакта подписан тип: number, boolean или text. Цветовые config-значения пока не поддерживаются этой нодой; для них используйте Lua API. Для полей локального игрока недоступный игрок даёт nil, а вывод текста показывает -.
Подключите Value > к > Value у Render: Text, Menu: Text или Client: Log. Текст ноды станет префиксом. Число или boolean также можно подключить к Flow: If / else: редактор автоматически выберет проверку boolean или сравнение числа с Threshold. У Config: Set value тип Value должен совпадать с типом config-ключа; точный путь скопируйте через Developer mode: Lua config keys.
Data / Math принимает два числовых входа A и B и отдаёт число. Если вход не подключён, используется его fallback из ноды. Деление на ноль даёт nil. Не подходящий по типу контакт не соединяется; если позже сменить тип источника, несовместимая связь удалится.
Например, чтобы показать HP плюс 5, создайте Data: Value с Local health, вторую Data: Value с Number literal = 5, подключите их к A и B у Data: Math с Add, а результат — к Value у Render: Text с префиксом HP: . Нужна также обычная цепочка выполнения Event: Render → Render: Text: data-связь сама по себе не запускает отрисовку.
Условия, типы и schema
У Flow: If / else доступны готовые проверки: здоровье локального игрока ниже порога (health: число), стоит ли он на земле (on_ground: boolean), включён ли булев config-ключ, а также чтение integer/number/boolean поля runtime schema. Для schema укажите класс и поле, например C_CSPlayerPawn и m_iHealth: чтение идёт от pawn_address локального игрока; недоступное поле/неудачное чтение даёт ветку False. Предусмотрены также подключённое значение, проверка своего бинда и произвольное Lua-условие, например entity.local_player().valid and entity.local_player().health < 30.
У нод с config-путями редактор показывает тип выбранного ключа. Точный путь можно найти в Developer mode: Lua config keys на вкладке Lua: поиск, текущий тип/значение и Copy. Для поля schema список имён зависит от версии игры; сверяйте класс и поле с актуальной схемой. schema.read_* только читает данные.
Чтобы сделать свой бинд, соедините Event: Menu → Menu: Custom keybind, задайте Custom bind ID и название в меню. В другом событии соедините Event: Render или Event: Tick → Flow: If / else, выберите Custom keybind down и впишите тот же ID. Ветка True срабатывает, пока выбранная клавиша удерживается. Значение собственного бинда живёт до reload; встроенные бинды изменяйте через Menu: Config keybind.
Пример
Начальный граф уже содержит цепочку:
Event: Render ──Out > > In── Render: Text
После Compile + load текст будет рисоваться в заданной позиции. Можно добавить Branch: Key down между событием и текстом и указать код клавиши, чтобы показывать текст только при её удержании.
Чекбокс для aim.enabled строится так:
Event: Menu ──Out > > In── Menu: Config checkbox
Label: Aimbot
Config key: aim.enabled
Произвольная логика и файлы
main.blueprint.jsonв облачном разделе Blueprint — редактируемый граф.имя_скрипта.luaв облачной библиотеке Lua — результат компиляции; ручные правки этого файла будут перезаписаны следующей компиляцией.- Сейчас предусмотрен один редактируемый граф
main. Готовые ноды покрывают частые задачи; для более сложных циклов, таблиц, вычислений, событий и API используйтеLua: Custom codeили отдельный Lua-файл. Код такой ноды имеет те же возможности и ограничения, что обычный доверенный скрипт. Полный Lua API.