CS2 Lua API

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)