ui: элементы
Конструкторы элементов — методы группы ui_group. Каждый возвращает ui_item. После создания элемент получает значение по умолчанию, а затем сохранённое значение из конфига, если оно есть.
- Первый аргумент после группы — имя элемента (
string). - Повторное имя внутри одной группы допустимо: создаётся ещё один элемент.
- Во встроенных группах из
ui.findсоздавать элементы нельзя.
group:toggle(name: string, default?: boolean)#
Переключатель.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
default |
boolean |
значение по умолчанию, false |
Возвращает: ui_item; get() возвращает boolean, type() — "switch".
local g = ui.tab("Main"):group("ESP")
local enabled = g:toggle("Show names", true)
events.render:set(function()
if not enabled:get() then return end
-- рисование имён
end)
group:slider(name: string, min: number, max: number, default?: number, scale?: number, fmt?: string|function)#
Ползунок целого числа.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
min |
number |
минимум (округляется до целого) |
max |
number |
максимум (округляется до целого) |
default |
number |
значение по умолчанию; не число — min |
scale |
number |
множитель только для показа: в строке выводится значение × scale; по умолчанию 1 |
fmt |
string или function |
строка — суффикс к числу (до 5 байт); функция fn(v) -> string — свой текст для значения v |
- Значение всегда целое и в пределах
[min, max]. - Позиции аргументов фиксированы: чтобы передать
fmt, передайте иdefault, иscale. - Функция
fmtвызывается для каждого значения диапазона, результаты кешируются доupdate(min, max).
Возвращает: ui_item; get() возвращает number.
local g = ui.tab("Main"):group("Crosshair")
local size = g:slider("Size", 1, 20, 6, 1, "px")
local alpha = g:slider("Opacity", 0, 100, 100, 1, "%")
local fov = g:slider("FOV", 60, 130, 90, 1, function(v) return v .. "°" end)
local zoom = g:slider("Zoom", 10, 30, 10, 0.1) -- показывает 1.0 ... 3.0, get() даёт 10 ... 30
group:combo(name: string, items: table|string, ...)#
Выпадающий список с одним выбором. Пункты — таблицей или строками-аргументами. По умолчанию выбран первый пункт.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
items |
table или string |
пункты: { "A", "B" } или "A", "B", ... |
Возвращает: ui_item; get() возвращает подпись выбранного пункта (string).
local g = ui.tab("Main"):group("ESP")
local style = g:combo("Box style", "Full", "Corners", "Off")
events.render:set(function()
if style:get() == "Off" then return end
-- ...
end)
group:multicombo(name: string, items: table|string, ...)#
Выпадающий список с несколькими выборами. По умолчанию ничего не выбрано. Используются первые 32 пункта.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
items |
table или string |
пункты |
Возвращает: ui_item; get() возвращает таблицу подписей выбранных пунктов; get("Подпись") — boolean.
local g = ui.tab("Main"):group("ESP")
local parts = g:multicombo("Show", { "Name", "Health", "Distance" })
events.render:set(function()
if parts:get("Health") then
-- рисуем здоровье
end
end)
group:list(name: string, items: table|string, ...)#
Список с одним выбором. Значение — как у combo. Сейчас отображается так же, как combo.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
items |
table или string |
пункты |
Возвращает: ui_item; get() — подпись выбранного пункта.
local target = ui.tab("Main"):group("Target"):list("Priority", "Nearest", "Lowest HP", "Crosshair")
print(target:get())
group:multilist(name: string, items: table|string, ...)#
Список с несколькими выборами. Значение — как у multicombo. Сейчас отображается так же, как multicombo.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
items |
table или string |
пункты |
Возвращает: ui_item; get() — таблица подписей выбранных пунктов.
local weapons = ui.tab("Main"):group("Filter"):multilist("Weapons", "Pistols", "Rifles", "Snipers")
for _, name in ipairs(weapons:get()) do print(name) end
group:textbox(name: string, default?: string)#
Поле ввода текста, до 511 символов.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
default |
string |
текст по умолчанию, "" |
Возвращает: ui_item; get() возвращает string.
local g = ui.tab("Main"):group("Watermark")
local title = g:textbox("Title", "RezTOP")
local font = render.load_font("Verdana", 14, "outline")
events.render:set(function()
render.text(vector2(20, 20), color(255, 255, 255, 255), font, nil, title:get())
end)
group:label(name: string)#
Строка текста без значения.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
текст строки |
Возвращает: ui_item.
local g = ui.tab("Main"):group("Info")
g:label("Версия 1.0")
g:label("\x07FF5555FFКрасная строка")
group:button(name: string, callback?: function)#
Кнопка. callback(self) вызывается после нажатия.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
callback |
function |
обработчик нажатия |
Возвращает: ui_item.
local g = ui.tab("Main"):group("Stats")
g:button("Reset counter", function()
database["my_script.counter"] = 0
print("Счётчик сброшен")
end)
group:color_picker(name: string, default?: string|color|table|color_category)#
Выбор цвета. Кроме одного цвета, элемент может хранить градиент (несколько цветов-стопов) и несколько вариантов (ui.color_category), между которыми пользователь переключается в попапе.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись |
default |
см. ниже | начальное значение; не передан — один белый цвет |
Формы default:
default |
Что получится |
|---|---|
| не передан | один белый цвет |
"#RRGGBBAA" |
один цвет из строки; "RR" — серый, "RRAA" — серый с альфой; пробелы и # в начале пропускаются |
color |
один цвет |
{ color, color, ... } |
градиент: стопы по порядку |
{} |
элемент без цветов: строки в меню нет, get() возвращает nil |
color_category |
один вариант |
{ color_category, ... } |
несколько вариантов, выбор — выпадающим списком в попапе |
- Явный
nil, число,booleanи другие значения — ошибкаinvalid defaults. - Таблица, где смешаны
colorиcolor_category, — ошибкаcolor_category expected, got <тип>. - Если у выбранного варианта два стопа и больше, свотч показывает градиент, а под ним — ряд стопов: пикер правит выбранный стоп.
- Выбор варианта меняет только пользователь в меню; из Lua он не меняется.
Возвращает: ui_item; значение get() — ниже.
local g = ui.tab("Main"):group("Colors")
local col = g:color_picker("Enemy color", color(255, 60, 60, 255))
events.render:set(function()
for _, pawn in ipairs(entity.pawns(true)) do
local p = render.world_to_screen(pawn:origin())
if p then render.circle(p, col:get(), 4) end
end
end)
Чтение и запись цвета#
| Вызов | Что делает |
|---|---|
get() |
выбранный вариант: один стоп — color, два и больше — таблица { color, ... }, без стопов — nil |
get(cat) |
вариант по подписи cat (в той же форме); нет такого — nil |
get(cat, stop) |
цвет стопа stop варианта cat; нет такого — nil |
set(c) |
записывает цвет; только если вариант один и в нём один стоп |
set(cat, stop, c) |
записывает цвет стопа stop варианта cat |
override(...) |
те же формы, что у set, но временно и без сохранения в конфиг; override() снимает |
get_override(...) |
те же формы, что у get, по временному значению; без override — nil |
default(...) |
те же формы, что у set; записывает и значение, и значение по умолчанию |
- Подписи сравниваются точно. У безымянного варианта и стопа подпись — пустая строка
"". setиdefaultснимаютoverride. Меню иget()значениеoverrideне видят.- Колбэки
set_callbackвызываются при любой смене цвета, стопа или варианта, а также приset,defaultи загрузке конфига.overrideколбэки не вызывает.
Ошибки set, override и default:
| Текст | Когда |
|---|---|
cannot set color for multiple categories at once |
set(c) при нескольких вариантах |
cannot set color for multiple colors at once |
set(c) при нескольких стопах |
cannot set color for an element without colors |
у элемента нет цветов |
unknown color category |
нет варианта cat |
unknown color |
нет стопа stop |
local g = ui.tab("Main"):group("Colors")
local solid = g:color_picker("Solid", "#FF8000FF")
local gradient = g:color_picker("Gradient", { color(255, 0, 0, 255), color(0, 0, 255, 255) })
local theme = g:color_picker("Theme", {
ui.color_category("Day", "", { Sky = color(120, 180, 255, 255) }),
ui.color_category("Night", "", { Sky = color(10, 10, 40, 255) }),
})
print(solid:get()) -- color
print(#gradient:get()) -- 2
print(theme:get("Night", "Sky")) -- color стопа Sky варианта Night
theme:set("Night", "Sky", color(0, 0, 0, 255))
ui.color_category(name: string, icon: string, items: table)#
Создаёт вариант цвета для color_picker. Объект нужен только как значение default и методов у него нет.
| Параметр | Тип | Описание |
|---|---|---|
name |
string |
подпись варианта (в списке выбора и для get/set) |
icon |
string |
символ иконки Font Awesome в UTF-8 на кнопке варианта; "" — без иконки |
items |
table |
стопы варианта |
Стопы в items задаются в любой из форм:
{ name = "подпись", value = color }— стоп с подписью;["подпись"] = color— стоп с подписью;colorв массиве — стоп без подписи.
Значение не color — ошибка Color expected; items не таблица — table expected.
Возвращает: color_category (tostring — "color_category").
local fire = ui.color_category("Fire", "\xef\x81\xad", {
{ name = "Inner", value = color(255, 200, 0, 255) },
{ name = "Outer", value = color(255, 40, 0, 255) },
})
local ice = ui.color_category("Ice", "", { Inner = color(200, 240, 255, 255), Outer = color(0, 120, 255, 255) })
local fx = ui.tab("Main"):group("Colors"):color_picker("Effect", { fire, ice })
print(fx:get("Fire", "Outer"))
group:image(texture: texture, size?: vector2, rounding?: number, mode?: string, color?: color)#
Картинка в группе меню. Нажатие на картинку вызывает колбэки элемента (set_callback).
| Параметр | Тип | Описание |
|---|---|---|
texture |
texture |
картинка из render.load_image* |
size |
vector2 |
размер; не передан или (0, 0) — размер картинки; ширина 0 — по высоте с сохранением пропорций; высота 0 — по ширине |
rounding |
number |
скругление углов, по умолчанию 0 |
mode |
string |
"r" — повтор плиткой, как у render.image; иначе картинка растягивается |
color |
color |
оттенок, по умолчанию белый; альфа умножается на прозрачность меню |
- Первый аргумент — картинка, а не имя: не
texture— ошибкаtexture expected. - Пустая картинка ничего не рисует.
- У картинки нет значения:
get()ничего не возвращает.type()—"image".
Возвращает: ui_item.
local svg = '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64">' .. '<circle cx="32" cy="32" r="30" fill="#ff8800"/></svg>'
local logo = render.load_image(svg, vector2(64, 64))
local g = ui.tab("Main"):group("About")
local img = g:image(logo, vector2(64, 0), 8)
img:set_callback(function()
print("Нажата картинка")
end)