ui: методы
Методы объектов ui_item, ui_group и ui_tab. У всех трёх есть name, visible, disabled, id, icon, export, import; остальные методы — у элементов ui_item.
item:get(...)#
Текущее значение элемента с учётом активного бинда. Переопределение override сюда не входит — его читает get_override().
| Параметр | Тип | Описание |
|---|---|---|
... |
number, string или table |
только для мультивыбора: пункты для проверки (номер с 1, подпись или таблица) |
Возвращает: значение по типу элемента; у мультивыбора с аргументами — boolean: выбраны ли все перечисленные пункты. У label, button и image — ничего. Формы get у цвета — на странице «ui: элементы», у строки Hotkey — в item:key.
local g = ui.tab("Main"):group("General")
local on = g:toggle("Enabled", true)
local parts = g:multicombo("Parts", "Head", "Body", "Legs")
if on:get() and parts:get("Head", "Body") then
print("Включены голова и тело")
end
item:set(v)#
Записывает значение элемента. Работает и для встроенных строк из ui.find. Снимает переопределение override. Колбэки сработают в ближайшем кадре.
| Параметр | Тип | Описание |
|---|---|---|
v |
по типу элемента | boolean; число; номер пункта с 1 или подпись; для мультивыбора — таблица или подписи аргументами; color; string |
Неизвестный пункт списка или номер вне диапазона молча пропускаются.
Возвращает: ui_item.
local g = ui.tab("Main"):group("General")
local mode = g:combo("Mode", "Off", "Soft", "Hard")
local parts = g:multicombo("Parts", "Head", "Body", "Legs")
mode:set("Hard")
mode:set(1) -- первый пункт
parts:set({ "Head", "Legs" })
item:override(v?)#
Временно переопределяет значение. Переопределение сильнее биндов и базового значения и не сохраняется в конфиг. Вызов без аргумента или с nil снимает его.
| Параметр | Тип | Описание |
|---|---|---|
v |
по типу элемента | значение; nil — снять |
- Снимается также через
set()и при выгрузке скрипта. - У текстового поля и элементов без значения ничего не делает.
Возвращает: ui_item.
-- Выключать рейдж, пока зажат Left Alt
local rage = ui.find("Rage", "Rage", "MAIN", "Enabled")
events.pre_render:set(function()
if not rage then return end
if utils.key_state(0xA4) then
rage:override(false)
else
rage:override()
end
end)
item:get_override()#
Возвращает: значение переопределения или nil, если его нет.
local rage = ui.find("Rage", "Rage", "MAIN", "Enabled")
if rage and rage:get_override() ~= nil then
print("Значение временно переопределено скриптом")
end
item:default(v)#
Задаёт новое значение по умолчанию (оно же используется при сбросе) и записывает его в элемент. Только для элементов своего скрипта, иначе ошибка this element is invalid.
| Параметр | Тип | Описание |
|---|---|---|
v |
по типу элемента | новое значение по умолчанию |
Возвращает: ui_item.
local mode = ui.tab("Main"):group("General"):combo("Mode", "Off", "Soft", "Hard")
mode:default("Soft")
item:set_callback(fn: function, call_now?: boolean)#
Добавляет колбэк fn(self) на изменение значения. Колбэков может быть несколько.
| Параметр | Тип | Описание |
|---|---|---|
fn |
function |
колбэк, аргумент — сам элемент |
call_now |
boolean |
true — сразу вызвать fn; по умолчанию false |
- Колбэк вызывается раз в кадр, если значение изменилось: правка в меню, нажатие кнопки,
set,override,default, бинд, загрузка конфига. - Ошибка внутри колбэка выводится в консоль. При
call_now = trueошибка первого вызова уходит в вызывающий код.
Возвращает: ui_item.
local g = ui.tab("Main"):group("General")
local on = g:toggle("Enabled", true)
local amount = g:slider("Amount", 0, 100, 50)
-- ползунок виден, только когда переключатель включён
on:set_callback(function(self)
amount:visible(self:get())
end, true)
item:unset_callback(fn: function)#
Убирает колбэки этого скрипта, равные fn. Безопасно вызывать из самого колбэка.
| Параметр | Тип | Описание |
|---|---|---|
fn |
function |
ранее добавленный колбэк |
Возвращает: ui_item.
local on = ui.tab("Main"):group("General"):toggle("Enabled")
local function once(self)
print("Первое изменение: ", tostring(self:get()))
self:unset_callback(once)
end
on:set_callback(once)
obj:name(s?: string)#
Без аргумента возвращает имя узла. Со строкой меняет подпись; ключ узла в конфиге остаётся прежним.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
новая подпись |
Возвращает: string без аргумента; сам объект — с аргументом. У встроенных строк подпись не меняется.
local on = ui.tab("Main"):group("General"):toggle("Enabled", true)
on:set_callback(function(self)
self:name(self:get() and "\x0700FF00FFEnabled" or "\x07FF0000FFEnabled")
end, true)
obj:visible(b?: boolean)#
Без аргумента — видим ли узел. С boolean — показать или скрыть.
| Параметр | Тип | Описание |
|---|---|---|
b |
boolean |
видимость |
Возвращает: boolean без аргумента; сам объект — с аргументом. У встроенных узлов сеттер ничего не делает.
local g = ui.tab("Main"):group("General")
local mode = g:combo("Mode", "Simple", "Advanced")
local detail = g:slider("Detail", 1, 10, 5)
mode:set_callback(function(self)
detail:visible(self:get() == "Advanced")
end, true)
obj:disabled(b?: boolean)#
Без аргумента — выключен ли узел. С boolean — выключить (серый, нельзя менять) или включить.
| Параметр | Тип | Описание |
|---|---|---|
b |
boolean |
true — выключить |
Возвращает: boolean без аргумента; сам объект — с аргументом. У встроенных узлов сеттер ничего не делает.
local g = ui.tab("Main"):group("General")
local on = g:toggle("Enabled", true)
local col = g:color_picker("Color")
on:set_callback(function(self) col:disabled(not self:get()) end, true)
item:tooltip(s?: string)#
Без аргумента возвращает подсказку. Со строкой задаёт подсказку при наведении. Только для элементов своего скрипта.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
текст подсказки |
Возвращает: string без аргумента; ui_item — с аргументом.
local amount = ui.tab("Main"):group("General"):slider("Amount", 0, 100, 25)
amount:tooltip("Сила эффекта в процентах")
obj:icon(s: string)#
Задаёт иконку строки, страницы или вкладки — символ шрифта иконок в UTF-8. Имена Font Awesome ("gear") здесь не принимаются — их понимает только ui.sidebar.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
символ иконки |
Возвращает: сам объект.
ui.tab("Main"):icon("\xee\x83\x8b")
obj:id()#
Возвращает: number — ключ узла в конфиге. У встроенных узлов из ui.find — 0.
local on = ui.tab("Main"):group("General"):toggle("Enabled")
print(on:id())
item:type()#
Возвращает: string — тип элемента: "switch", "slider", "combo", "multicombo", "list", "multilist", "textbox", "label", "button", "color_picker", "image".
- Встроенные строки из
ui.findдают"switch","slider"(целые и дробные),"combo","multicombo"или"color_picker". - У
ui_tabиui_groupметодаtypeнет.
local el = ui.find("Rage", "Rage", "MAIN", "Enabled")
if el then print(el:type()) end --> switch
item:list()#
Возвращает: table — пункты комбо или списка { "A", "B", ... }; пустая таблица, если пунктов нет.
local mode = ui.tab("Main"):group("General"):combo("Mode", "Off", "Soft", "Hard")
print(table.concat(mode:list(), ", ")) --> Off, Soft, Hard
item:update(...)#
Меняет пункты списков или диапазон ползунка. Только для элементов своего скрипта.
| Параметр | Тип | Описание |
|---|---|---|
... |
table/string или number, number |
для списков — новые пункты; для ползунка — min, max |
- Выбор, вышедший за новые пункты, переносится на последний пункт.
- Текущее значение ползунка зажимается в новый диапазон.
- Те же пункты или тот же диапазон ничего не пересобирают — вызывать можно хоть каждый кадр.
Возвращает: ui_item.
local g = ui.tab("Main"):group("Target")
local who = g:combo("Player", "-")
-- Список игроков обновляется раз в 2 секунды
local function refresh()
local names = {}
for _, ctrl in ipairs(entity.controllers()) do
names[#names + 1] = ctrl:name() or "?"
end
if #names == 0 then names[1] = "-" end
who:update(names)
utils.schedule(2, refresh)
end
refresh()
item:group()#
Дочерняя группа элемента — попап «···». Создаётся при первом вызове.
Ошибка: cannot create a group on an element that is already inside a group — элемент сам лежит в дочерней группе.
Возвращает: ui_group.
local g = ui.tab("Main"):group("ESP")
local box = g:toggle("Box", true)
local opts = box:group()
local thickness = opts:slider("Thickness", 1, 4, 1)
local filled = opts:toggle("Filled")
obj:parent()#
Возвращает: ui_tab, ui_group или nil — родительский узел.
local g = ui.tab("Main"):group("General")
local on = g:toggle("Enabled")
print(on:parent():name()) --> General
item:color_picker(default?: string|color|table|color_category)#
Добавляет выбор цвета прямо в строку элемента.
| Параметр | Тип | Описание |
|---|---|---|
default |
как у group:color_picker |
начальное значение; не передан — белый |
- Формы
default, чтение и запись — как уgroup:color_picker(страница «ui: элементы»). Варианты (color_category) здесь выбираются вкладками в попапе. - Повторный вызов возвращает тот же элемент цвета, но сбрасывает его значение и значение по умолчанию к новому
default, а затем применяет сохранённое в конфиге значение. - Ошибки:
this element does not support color pickers— у текстового поля, кнопки, картинки и самого цвета;script does not own this element— элемент чужой или встроенный;invalid defaults— неверныйdefault.
Возвращает: ui_item — элемент цвета.
local g = ui.tab("Main"):group("ESP")
local names = g:toggle("Names", true)
local names_col = names:color_picker(color(255, 255, 255, 255))
local font = render.load_font("Verdana", 13, "outline")
events.render:set(function()
if not names:get() then return end
for _, pawn in ipairs(entity.pawns(true)) do
local p = render.world_to_screen(pawn:eye_position() + vector(0, 0, 10))
if p then render.text(p, names_col:get(), font, "c", pawn:name() or "?") end
end
end)
item:key(code?: number)#
Клавиша строки Mouse Override › Hotkey (группа ANTI-AIM на странице Rage). Работает только у этой встроенной строки; у любой другой — ошибка option is not a hotkey.
| Параметр | Тип | Описание |
|---|---|---|
code |
number |
виртуальный код клавиши Windows (VK) |
- Без аргумента — действующий код: временное значение скрипта (
override), иначе бинд из конфига, иначе назначенная клавиша;0— клавиша не назначена. - С числом — назначает клавишу, снимает
overrideи бинды строки, как правка вручную. Ничего не возвращает. - После
key(x)вызовkey()возвращает ровноx, пока клавишу не сменили в меню. Если у кода нет пары среди клавиш меню (например, общийVK_SHIFT=0x10), клавиша считается назначенной, но не нажимается; в меню она показывается как-. - Смена клавиши из скрипта или в меню вызывает колбэки строки (
set_callback).
Другие методы у строки Hotkey:
| Вызов | Что делает |
|---|---|
get() |
true, если назначенная клавиша сейчас зажата; nil, пока игра не принимает ввод (меню игры, консоль) |
set(code) |
назначает клавишу, снимает override и бинды |
override(code) |
временная клавиша скрипта, сильнее бинда и назначенной; в конфиг не пишется; override() снимает |
get_override() |
зажата ли временная клавиша; без override — nil |
Возвращает: number без аргумента; ничего — с аргументом.
local hk = ui.find("Rage", "Rage", "ANTI-AIM", "Mouse Override", "Hotkey")
if hk then
print("Клавиша Mouse Override: ", hk:key())
hk:key(0x05) -- VK_XBUTTON1, боковая кнопка мыши
end
-- У любой другой строки key() даёт ошибку
local rage = ui.find("Rage", "Rage", "MAIN", "Enabled")
if rage then
print(pcall(rage.key, rage)) --> false ... option is not a hotkey
end
obj:export()#
Возвращает: string — JSON со значениями узла и его потомков.
local tab = ui.tab("Main")
local saved = tab:export()
print(saved)
obj:import(s: string)#
Применяет JSON, полученный через export, к узлу и его потомкам.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
JSON из export |
Ошибка: invalid json.
Возвращает: сам объект.
local g = ui.tab("Main"):group("Presets")
local tab = ui.tab("Main")
g:button("Save preset", function()
database["my_script.preset"] = tab:export()
end)
g:button("Load preset", function()
local s = database["my_script.preset"]
if s then tab:import(s) end
end)