CS2 Lua API

utils

Модуль utils — время, случайные числа, клавиши, задачи с задержкой, консоль, звук, поиск интерфейсов и сигнатур в модулях игры.

utils.key_state(vk: number)#

Зажата ли клавиша.

Параметр Тип Описание
vk number виртуальный код клавиши Windows, 0–255

Общие коды модификаторов 0x10 (Shift), 0x11 (Ctrl), 0x12 (Alt) всегда дают false. Спрашивайте левую и правую клавиши отдельно: 0xA0/0xA1, 0xA2/0xA3, 0xA4/0xA5.

Возвращает: boolean.

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

events.render:set(function()
    if utils.key_state(0x06) then   -- боковая кнопка мыши 2
        render.text(vector2(20, 120), color(255, 255, 0, 255), font, nil, "Кнопка зажата")
    end
end)

utils.random_seed(seed: number)#

Задаёт зерно генератора случайных чисел игры.

Параметр Тип Описание
seed number зерно

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

utils.random_seed(42)
print(utils.random_int(1, 100))   -- одинаковое число при одинаковом зерне

utils.random_int(a: number, b: number)#

Случайное целое от a до b включительно. Порядок аргументов не важен.

Параметр Тип Описание
a number граница
b number граница

Возвращает: number.

local phrases = { "gg", "nice", "wp" }
print(phrases[utils.random_int(1, #phrases)])

utils.random_float(a: number, b: number)#

Случайное дробное число от a до b. Порядок аргументов не важен.

Параметр Тип Описание
a number граница
b number граница

Возвращает: number.

local c = color(utils.random_int(0, 255), utils.random_int(0, 255), utils.random_int(0, 255), 255)
print(c, " ", utils.random_float(0, 1))

utils.timestamp()#

Текущее время в миллисекундах (unix).

Возвращает: 64-битное целое (cdata). Для арифметики с обычными числами используйте tonumber.

local t0 = utils.timestamp()
for i = 1, 100000 do local _ = math.sqrt(i) end
print("Заняло ", tonumber(utils.timestamp() - t0), " мс")

utils.unix_time()#

Текущее время в секундах (unix).

Возвращает: 64-битное целое (cdata).

print("Сейчас ", tonumber(utils.unix_time()), " секунд от 1970 года")

utils.strftime(fmt: string, time?: number)#

Форматирует локальное время по спецификаторам strftime (%Y, %m, %d, %H, %M, %S и т. д.).

Параметр Тип Описание
fmt string формат
time number или 64-битное целое время в секундах unix; по умолчанию — текущее

Возвращает: string или nil, если в формате неизвестный спецификатор.

print(utils.strftime("%Y-%m-%d %H:%M:%S"))
print(utils.strftime("%d.%m", utils.unix_time()))

utils.system_time()#

Локальное время по частям.

Возвращает: number, number, number, number — часы, минуты, секунды, миллисекунды.

local h, m, s = utils.system_time()
print(string.format("%02d:%02d:%02d", h, m, s))

utils.interface(module: string, name: string)#

Находит интерфейс игры через CreateInterface модуля. Имя сравнивается точно.

Параметр Тип Описание
module string имя модуля, например "engine2.dll" или "engine2" (без расширения добавляется .dll)
name string имя интерфейса с версией

Возвращает: lightuserdata или nil, если модуль или интерфейс не найдены.

local engine = utils.interface("engine2.dll", "Source2EngineToClient001")
print(engine)

utils.pattern(module: string, signature: string)#

Ищет в модуле последовательность байтов.

Параметр Тип Описание
module string имя модуля
signature string байты в шестнадцатеричном виде через пробел; ? или ?? — любой байт

Возвращает: lightuserdata — адрес первого совпадения, или nil.

local addr = utils.pattern("client.dll", "48 89 5C 24 08 ? 8B")
print(addr or "не найдено")

utils.username()#

Возвращает: string — имя пользователя RezTOP.

print("Привет, ", utils.username(), "!")

utils.user()#

Данные пользователя RezTOP.

Возвращает: table с полями:

Поле Тип Описание
name string имя пользователя, то же, что utils.username()
avatar texture аватар; рисуется через render.image
license number время окончания подписки, Unix-время в секундах; 0 — бессрочная подписка или данных нет
  • avatar есть всегда. Если аватара нет или он ещё не загружен, это пустая картинка: tostring даёт "texture(0x0)", а обращение к avatar.size — ошибку invalid texture.
local u = utils.user()
local font = render.load_font("Verdana", 14, "outline")

local left = "бессрочно"
if u.license > 0 then
    left = string.format("%d дн.", math.floor((u.license - tonumber(utils.unix_time())) / 86400))
end

events.render:set(function()
    render.image(u.avatar, vector2(20, 200), vector2(32, 32), color(255, 255, 255, 255), nil, 16)
    render.text(vector2(60, 208), color(255, 255, 255, 255), font, nil, u.name, " | ", left)
end)

utils.schedule(delay: number, fn: function, ...)#

Вызывает fn(...) через delay секунд.

Параметр Тип Описание
delay number задержка, секунды
fn function функция
... any аргументы для fn
  • Задачи проверяются раз в кадр; за кадр выполняется не больше одной задачи.
  • Ошибка внутри fn выводится в консоль.
  • Задача снимается при выгрузке скрипта.

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

-- Повтор раз в 10 секунд
local function tick()
    print("Прошло ещё 10 секунд, тик ", globals.tickcount)
    utils.schedule(10, tick)
end

utils.schedule(10, tick)

utils.console(...)#

Выполняет консольную команду игры. Аргументы приводятся к строкам и соединяются пробелом.

Параметр Тип Описание
... any части команды

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

utils.console("echo", "[script]", "загружен")   -- выполнит: echo [script] загружен

utils.playsound(path: string, volume?: number)#

Проигрывает звук игры.

Параметр Тип Описание
path string путь к звуку игры
volume number громкость, по умолчанию 1.0

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

events.player_death:set(function(e)
    if e.attacker == entity.local_controller() then
        utils.playsound("buttons/arena_switch_press_02", 0.5)
    end
end)