CS2 Lua API

render

Модуль render рисует фигуры поверх игры и переводит координаты мира в координаты экрана. Здесь — фигуры и экран; стеки состояний, шрифты и картинки описаны на отдельных страницах.

Общие правила#

  • Только внутри события render. Функции рисования работают только во время раздачи события render. Вне его — ошибка this function may only be called inside the 'render' event. Без события работают screen_size, world_to_screen, offscreen, camera_angles, а также загрузка шрифтов и картинок и measure_text.
  • Прямоугольник задаётся как (pos, size): второй vector2 — это размер, правый нижний угол = pos + size.
  • Скругление rounding — число (один радиус на все углы) или таблица {tl, tr, br, bl} (левый верхний, правый верхний, правый нижний, левый нижний). Если не передано — углы прямые.
  • Углы дуг. start — начальный угол в градусах (по умолчанию 0), pct — доля полного круга (1 — весь круг, 0.5 — половина; по умолчанию 1).
  • Необязательные аргументы засчитываются только при точном типе: вместо числа нельзя передать строку с числом. nil означает «не передан».

color(255, 0, 0) без альфы невидим: альфа по умолчанию 0. Пишите color(255, 0, 0, 255).

render.screen_size()#

Размер экрана в пикселях. Работает и вне события render.

Возвращает: vector2 — ширина и высота.

local font = render.load_font("Verdana", 14, "outline")

events.render:set(function()
    local center = render.screen_size() / 2
    render.text(center, color(255, 255, 255, 255), font, "c", "+")
end)

render.world_to_screen(pos: vector)#

Переводит точку мира в точку экрана. Результат округляется до целых пикселей.

Параметр Тип Описание
pos vector точка в мире

Возвращает: vector2 или nil, если точку нельзя спроецировать (например, она позади камеры).

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, color(255, 60, 60, 255), 4)   -- точка у ног врага
        end
    end
end)

render.offscreen(pos: vector, t?: number)#

Проецирует точку мира для стрелки-указателя у края экрана. Если точка видна на экране, возвращается её экранная позиция. Если точка за краем экрана или позади камеры, возвращается точка на окружности вокруг центра экрана в направлении на неё.

Параметр Тип Описание
pos vector точка в мире
t number радиус окружности в долях половины меньшей стороны экрана: 0 — центр, 1 — край. Зажимается в [0, 1]; по умолчанию 1

Пример: на экране 3440×1440 половина меньшей стороны — 720 px, при t = 0.25 точка ставится в 180 px от центра.

Возвращает: vector, number, boolean:

  • точку на экране (vector, z всегда 0);
  • угол направления на точку в градусах (0, если точка видна);
  • true, если точка за краем экрана; false, если она видна.

Работает и вне события render. Если размер экрана не получен, ошибка offscreen: screen size unavailable.

-- Точка-указатель на каждого врага за краем экрана
events.render:set(function()
    for _, pawn in ipairs(entity.pawns(true)) do
        local p, ang, off = render.offscreen(pawn:origin(), 0.8)
        if off then
            render.circle(vector2(p.x, p.y), color(255, 60, 60, 255), 5)
        end
    end
end)

render.camera_angles()#

Углы основной камеры игры.

Возвращает: angle — копия углов камеры.

local font = render.load_font("Verdana", 14, "outline")

events.render:set(function()
    local a = render.camera_angles()
    render.text(vector2(20, 60), color(255, 255, 255, 255), font, nil, string.format("pitch %.1f  yaw %.1f", a.x, a.y))
end)

render.line(a: vector2, b: vector2, col: color, thickness?: number)#

Рисует отрезок.

Параметр Тип Описание
a vector2 начало
b vector2 конец
col color цвет
thickness number толщина, по умолчанию 1

Возвращает: ничего.

-- Линия от центра низа экрана к каждому врагу
events.render:set(function()
    local s = render.screen_size()
    local from = vector2(s.x / 2, s.y)
    for _, pawn in ipairs(entity.pawns(true)) do
        local p = render.world_to_screen(pawn:origin())
        if p then
            render.line(from, p, color(255, 200, 0, 180), 1)
        end
    end
end)

render.bezier(p1: vector2, p2: vector2, p3: vector2, p4: vector2, col: color, thickness: number, segments?: number)#

Рисует кубическую кривую Безье от p1 к p4 с контрольными точками p2 и p3.

Параметр Тип Описание
p1 … p4 vector2 начало, две контрольные точки, конец
col color цвет; при альфе 0 ничего не рисуется
thickness number толщина (обязательна)
segments number число отрезков; по умолчанию 0 — подбирается автоматически

Возвращает: ничего.

events.render:set(function()
    render.bezier(vector2(40, 300), vector2(90, 240), vector2(140, 360), vector2(190, 300), color(0, 200, 255, 255), 2)
end)

render.rect(pos: vector2, size: vector2, col: color, rounding?: number|table)#

Рисует залитый прямоугольник.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
col color цвет заливки
rounding number или table скругление углов

Возвращает: ничего.

events.render:set(function()
    render.rect(vector2(20, 100), vector2(160, 40), color(20, 20, 20, 200), 6)
end)

render.rect_outline(pos: vector2, size: vector2, col: color, thickness?: number, rounding?: number|table)#

Рисует контур прямоугольника.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
col color цвет
thickness number толщина, по умолчанию 1
rounding number или table скругление углов

Возвращает: ничего.

events.render:set(function()
    -- скруглены только верхние углы
    render.rect_outline(vector2(20, 100), vector2(160, 40), color(255, 255, 255, 255), 1, { 6, 6, 0, 0 })
end)

render.rect_shadow(pos: vector2, size: vector2, col: color, rounding?: number|table, blur?: number, offset?: vector2)#

Рисует мягкую тень прямоугольника.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
col color цвет тени
rounding number или table скругление углов
blur number размытие, по умолчанию 0
offset vector2 смещение тени, по умолчанию (0, 0)

Возвращает: ничего.

events.render:set(function()
    local pos, size = vector2(20, 160), vector2(160, 40)
    render.rect_shadow(pos, size, color(0, 0, 0, 200), 6, 12, vector2(0, 2))
    render.rect(pos, size, color(30, 30, 30, 255), 6)
end)

render.rect_gradient(pos: vector2, size: vector2, c1: color, c2: color, c3: color, c4: color, rounding?: number|table)#

Рисует прямоугольник с градиентом по углам.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
c1 color левый верхний угол
c2 color правый верхний угол
c3 color левый нижний угол
c4 color правый нижний угол
rounding number или table скругление углов

Возвращает: ничего.

events.render:set(function()
    local a, b = color(255, 80, 80, 255), color(80, 80, 255, 255)
    -- горизонтальный градиент: слева красный, справа синий
    render.rect_gradient(vector2(20, 220), vector2(160, 8), a, b, a, b, 4)
end)

render.rect_glow(pos: vector2, size: vector2, col: color, rounding?: number|table)#

Рисует светящуюся полосу-акцент. Из скругления берётся только радиус левого верхнего угла.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
col color цвет свечения
rounding number или table скругление

Возвращает: ничего.

events.render:set(function()
    render.rect_glow(vector2(20, 240), vector2(4, 40), color(120, 160, 255, 255), 8)
end)

render.rect_window(pos: vector2, size: vector2, rounding?: number|table)#

Рисует фон окна в стиле меню (с размытием фона и тенью). Из скругления берётся радиус левого верхнего угла.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
rounding number или table скругление

Возвращает: ничего.

  • Вызов снимает действующий render.push_blur.
local font = render.load_font("Verdana", 14)

events.render:set(function()
    render.rect_window(vector2(20, 300), vector2(180, 50), 10)
    render.text(vector2(110, 325), color(255, 255, 255, 255), font, "c", "Окно скрипта")
end)

render.rect_window_shadow(pos: vector2, size: vector2, rounding?: number|table)#

Рисует только тень окна в стиле меню. Радиус левого верхнего угла применяется ко всем углам.

Параметр Тип Описание
pos vector2 левый верхний угол
size vector2 размер
rounding number или table скругление

Возвращает: ничего.

events.render:set(function()
    render.rect_window_shadow(vector2(220, 300), vector2(120, 50), 8)
    render.rect(vector2(220, 300), vector2(120, 50), color(25, 25, 25, 255), 8)
end)

render.circle(center: vector2, col: color, radius: number, start?: number, pct?: number)#

Рисует залитый круг или сектор. При альфе 0 или radius <= 0 ничего не рисуется.

Параметр Тип Описание
center vector2 центр
col color цвет
radius number радиус
start number начальный угол, градусы; по умолчанию 0
pct number доля круга; по умолчанию 1

Возвращает: ничего.

events.render:set(function()
    render.circle(vector2(60, 400), color(255, 0, 255, 255), 16, 0, 0.75)   -- три четверти круга
end)

render.circle_outline(center: vector2, col: color, radius: number, start?: number, pct?: number, thickness?: number)#

Рисует окружность или дугу контуром.

Параметр Тип Описание
center vector2 центр
col color цвет
radius number радиус
start number начальный угол, градусы; по умолчанию 0
pct number доля круга; по умолчанию 1
thickness number толщина, по умолчанию 1

Возвращает: ничего.

-- Индикатор здоровья дугой вокруг прицела
events.render:set(function()
    local me = entity.local_pawn()
    if not me or not me:is_alive() then return end
    local center = render.screen_size() / 2
    render.circle_outline(center, color(80, 255, 120, 255), 24, -90, me:health() / 100, 2)
end)

render.circle_gradient(center: vector2, edge: color, inner: color, radius: number, softness?: number, start?: number, pct?: number)#

Рисует круг с радиальным градиентом от центра к краю.

Параметр Тип Описание
center vector2 центр
edge color цвет края
inner color цвет центра
radius number радиус
softness number доля радиуса, занятая переходом от цвета края к цвету центра; по умолчанию 1 — плавный градиент
start number начальный угол, градусы; по умолчанию 0
pct number доля круга; по умолчанию 1
  • Малые значения softness (например, 0.1) дают сплошной круг цвета inner с тонким переходом к edge у края.
  • Значения от 0.5 и выше дают плавный градиент. Значения больше 1 работают как 1.

Возвращает: ничего.

events.render:set(function()
    -- плавный градиент
    render.circle_gradient(vector2(120, 400), color(255, 0, 0, 0), color(255, 0, 0, 255), 20)
    -- сплошной круг с мягким краем
    render.circle_gradient(vector2(180, 400), color(255, 0, 0, 0), color(255, 0, 0, 255), 20, 0.1)
end)

render.circle_shadow(center: vector2, col: color, radius: number, blur: number, start?: number, pct?: number, offset?: vector2)#

Рисует мягкую тень круга.

Параметр Тип Описание
center vector2 центр
col color цвет тени
radius number радиус
blur number размытие (обязательно)
start number начальный угол, градусы; по умолчанию 0
pct number доля круга; по умолчанию 1
offset vector2 смещение, по умолчанию (0, 0)

Возвращает: ничего.

events.render:set(function()
    local c = vector2(180, 400)
    render.circle_shadow(c, color(0, 0, 0, 255), 14, 10)
    render.circle(c, color(240, 240, 240, 255), 14)
end)

render.circle_blur(center: vector2, alpha: number, radius: number, start?: number, pct?: number)#

Рисует круг размытого фона.

Параметр Тип Описание
center vector2 центр
alpha number прозрачность размытия, 0–1
radius number радиус
start number начальный угол, градусы; по умолчанию 0
pct number доля круга; по умолчанию 1

Возвращает: ничего.

events.render:set(function()
    render.circle_blur(vector2(240, 400), 1, 28)
end)

render.triangle(a: vector2, b: vector2, c: vector2, col: color)#

Рисует залитый треугольник.

Параметр Тип Описание
a, b, c vector2 вершины
col color цвет

Возвращает: ничего.

-- Стрелка-указатель над центром экрана
events.render:set(function()
    local c = render.screen_size() / 2
    render.triangle(vector2(c.x, c.y - 40), vector2(c.x + 8, c.y - 52), vector2(c.x - 8, c.y - 52), color(255, 255, 255, 255))
end)

render.triangle_outline(a: vector2, b: vector2, c: vector2, col: color, thickness?: number)#

Рисует контур треугольника.

Параметр Тип Описание
a, b, c vector2 вершины
col color цвет
thickness number толщина, по умолчанию 1

Возвращает: ничего.

events.render:set(function()
    render.triangle_outline(vector2(300, 380), vector2(320, 410), vector2(280, 410), color(255, 255, 255, 255), 1.5)
end)

render.poly(points: table, col: color)#

Рисует выпуклый залитый многоугольник.

Параметр Тип Описание
points table массив вершин {vector2, ...}
col color цвет

Возвращает: ничего.

events.render:set(function()
    render.poly({ vector2(340, 380), vector2(360, 390), vector2(350, 410), vector2(330, 400) }, color(0, 128, 255, 255))
end)

render.polyline(points: table, col: color, closed: boolean, thickness: number)#

Рисует ломаную линию.

Параметр Тип Описание
points table массив точек {vector2, ...}
col color цвет
closed boolean замкнуть ломаную (обязательно)
thickness number толщина (обязательно)

Возвращает: ничего.

-- График FPS за последние 60 кадров
local history = {}

events.render:set(function()
    table.insert(history, 1 / math.max(globals.absoluteframetime, 0.001))
    if #history > 60 then table.remove(history, 1) end

    local pts = {}
    for i, fps in ipairs(history) do
        pts[i] = vector2(20 + i * 3, 500 - math.min(fps, 300) / 3)
    end
    if #pts > 1 then
        render.polyline(pts, color(0, 255, 120, 255), false, 1)
    end
end)

render.poly_gradient(anchor: vector2|nil, points: table, edge: color, center: color, extent?: number)#

Рисует многоугольник с градиентом от края к центру.

Параметр Тип Описание
anchor vector2 или nil точка-центр градиента; nil — центром считается среднее всех вершин
points table массив вершин {vector2, ...}
edge color цвет края
center color цвет центра
extent number протяжённость градиента, по умолчанию 1

Возвращает: ничего.

events.render:set(function()
    local pts = { vector2(400, 380), vector2(480, 380), vector2(480, 440), vector2(400, 440) }
    render.poly_gradient(vector2(440, 410), pts, color(0, 255, 0, 0), color(0, 255, 0, 255), 0.6)
end)

render.poly_shadow(points: table, col: color, thickness: number, offset: vector2)#

Рисует тень многоугольника. Все аргументы обязательны.

Параметр Тип Описание
points table массив вершин {vector2, ...}
col color цвет тени
thickness number ширина тени
offset vector2 смещение тени

Возвращает: ничего.

events.render:set(function()
    local pts = { vector2(500, 380), vector2(580, 380), vector2(540, 440) }
    render.poly_shadow(pts, color(0, 0, 0, 255), 20, vector2(4, 4))
    render.poly(pts, color(200, 200, 200, 255))
end)