CS2 Lua API

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)