Документация
Скрипты
К скриптам
Интерфейс

HUD-элементы

Драг — это точка на экране, которую клиент двигает вместе с остальными элементами интерфейса и хранит в конфиге. Всё, что рисует скрипт, привязывается к ней.

Создание

local drag = ui.draggable("watermark", 10, 10, 90, 15)

Первый аргумент — идентификатор внутри скрипта, по нему запоминается позиция. Дальше стартовые координаты и размер рамки.

drag.pos()текущие координаты элемента
drag.set_size(w, h)размер рамки, обновляется каждый кадр
drag.anchor()к какому краю прижат: left/right и top/bottom
drag.add_settings(...)настройки в контекстное меню элемента
drag.menu_open()открыто ли это меню

Масштаб

Встроенные элементы клиента рисуются внутри масштаба HUD. Скрипт должен объявить его сам — иначе ползунок масштаба на элемент не действует, а картинка расходится с рамкой захвата, и правый клик по элементу промахивается мимо меню.

events.on("render2d", function()
    if not player.exists() then return end

    render.push_hud_scale()
    -- всё рисование элемента
    render.pop_hud_scale()
end)

Своё меню по правому клику

Настройки элемента удобнее держать в нём самом, а не в общей панели модуля. add_settings кладёт виджеты в контекстное меню драга — оно открывается правым кликом по элементу в редакторе HUD.

local drag = ui.draggable("watermark", 10, 10, 90, 15)

local nick = ui.checkbox("Ник", true)
local fps  = ui.checkbox("FPS", false)

nick.visible(false)
fps.visible(false)

drag.add_settings(nick, fps)

visible(false) убирает виджет из панели модуля, но в меню элемента он остаётся. В панели тогда видно только галочку самого элемента, а его параметры лежат там, где на них смотрят.

Размер по содержимому

Ширину почти всегда считают от текста, а не задают числом. Тогда элемент не разъедется от длинного ника или трёхзначного пинга.

local name = client.user() or "player"
local w = 25 + render.font_width(name, 8, "medium")

render.rect_style(x, y, w, 15, 4)
render.font_text_middle(name, x + 19, y + 7.5, theme.text, 8, "medium")

drag.set_size(w, 15)

Пустое состояние

Список, в котором сейчас нечего показать, исчезает с экрана — и поймать его мышью становится нечем. client.hud_editor() подсказывает, что открыт редактор: в этот момент показывают строку-пример.

if #items == 0 and client.hud_editor() then
    items = { { label = "AttackAura", key = "R" } }
end