CS2 Lua API

msgpack

Библиотека msgpack (lua-cmsgpack) упаковывает значения Lua в компактную двоичную строку MessagePack и обратно. При ошибке функции возвращают nil и текст ошибки.

Правила упаковки — как у database: вложенность до 16, функции, userdata и cdata становятся nil.

msgpack.pack(...)#

Упаковывает все аргументы подряд в одну строку.

Параметр Тип Описание
... any значения

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

local s = msgpack.pack({ 7, 8 }, "x", true)
print(#s, " байт")

msgpack.unpack(s: string)#

Распаковывает все значения из строки.

Параметр Тип Описание
s string упакованные данные

Возвращает: все распакованные значения.

local s = msgpack.pack({ 7, 8 }, "x")
local t, x = msgpack.unpack(s)
print(t[2], " ", x)   --> 8 x

msgpack.unpack_one(s: string, offset?: number)#

Распаковывает одно значение, начиная со смещения.

Параметр Тип Описание
s string упакованные данные
offset number смещение в байтах, по умолчанию 0

Возвращает: number, any — смещение следующего значения (-1, если данные кончились) и само значение.

local s = msgpack.pack(1, 2, 3)
local off, v = 0, nil
while off ~= -1 do
    off, v = msgpack.unpack_one(s, off)
    print(v)
end

msgpack.unpack_limit(s: string, limit: number, offset?: number)#

Распаковывает не больше limit значений.

Параметр Тип Описание
s string упакованные данные
limit number сколько значений распаковать
offset number смещение в байтах, по умолчанию 0

Возвращает: number, ... — смещение следующего значения (-1, если данные кончились) и распакованные значения.

local s = msgpack.pack("a", "b", "c", "d")
local off, x, y = msgpack.unpack_limit(s, 2)
print(x, y, " дальше с ", off)   --> ab дальше с 4