Первый скрипт
Соберём счётчик FPS: от пустого файла до элемента, который двигается в редакторе HUD и помнит своё место.
1. Нарисовать текст
Всё рисование живёт внутри события render2d — оно приходит каждый кадр. Первая строка проверяет, что игрок в мире: без неё скрипт упадёт в меню.
events.on("render2d", function()
if not player.exists() then return end
render.font_text(client.fps() .. " fps", 20, 20, 0xFFFFFFFF, 7, "medium")
end)2. Добавить фон
Ширину панели считаем от текста, а не задаём числом: тогда элемент не развалится, когда fps станет трёхзначным. Цвета берём из темы клиента, чтобы скрипт совпадал с остальным интерфейсом.
events.on("render2d", function()
if not player.exists() then return end
local theme = render.theme()
local text = client.fps() .. " fps"
local w = render.font_width(text, 7, "medium") + 12
render.rounded_rect(20, 20, w, 15, 4, render.with_alpha(theme.background, theme.alpha))
render.font_text_middle(text, 26, 27.5, theme.text, 7, "medium")
end)font_text_middle центрирует строку по вертикали: вы передаёте середину панели, а не её верх.
3. Сделать его перетаскиваемым
Координаты больше не пишем руками — их даёт ui.draggable. Элемент появляется в общем редакторе HUD, двигается мышью и сохраняется в конфиг. Размер рамки обновляем каждый кадр, иначе прямоугольник захвата разойдётся с картинкой.
local drag = ui.draggable("fps", 20, 20, 60, 15)
events.on("render2d", function()
if not player.exists() then return end
render.push_hud_scale()
local theme = render.theme()
local x, y = drag.pos()
local text = client.fps() .. " fps"
local w = render.font_width(text, 7, "medium") + 12
render.rounded_rect(x, y, w, 15, 4, render.with_alpha(theme.background, theme.alpha))
render.font_text_middle(text, x + 6, y + 7.5, theme.text, 7, "medium")
drag.set_size(w, 15)
render.pop_hud_scale()
end)push_hud_scale и pop_hud_scale обязательны для всего, что стоит на драге: внутри них элемент подчиняется ползунку масштаба HUD и попадает в свою рамку в редакторе.
4. Включить и подвигать
Сохраните скрипт, включите модуль в ClickGUI и откройте чат — в этом режиме элементы HUD перетаскиваются. Позиция запишется в конфиг сама.