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

События

Скрипт живёт на колбэках: клиент зовёт их сам, когда наступает нужный момент — кадр, тик, удар, нажатая клавиша.

Подписка

events.on("attack", function(e)
    client.notify("ударил " .. e.name)
end)

Отписаться можно той же функцией через events.off(name, fn) — для этого её придётся сохранить в переменную.

Кадр и тик

render2dкаждый кадр, 2D поверх игры
render3dкаждый кадр, внутри мира
render_world_postпосле отрисовки мира
tick20 раз в секунду
post_tickпосле движения игрока

Данные копят на tick, рисуют на render2d. Это важно для графиков и таймеров: кадров бывает и 30, и 300 в секунду, а тиков всегда двадцать.

Ввод

keykey, key_name, action, pressed, released, repeated
mousebutton, action, pressed, released, x, y
move_keysforward, backward, left, right, jump, sneak, sprint
move_inputforward, strafe и запись через set_forward / set_strafe
jumpпрыжок, поле pre

События ввода не приходят, пока открыт любой экран — так устроена обработка биндов в клиенте. Если клавиши нужны в своём GUI, опрашивайте client.key_down(code).

Игра

attackудар по сущности: entity, name
spawn_entityпоявилась сущность
totem_popлопнул тотем
chat_sendотправка сообщения: message, command
packet_send / packet_receiveимя класса пакета в packet
world_changeсмена мира
screen_openоткрылся или закрылся экран

Отмена

У объекта события есть cancel() и is_cancelled(). Отменяются те события, которые клиент отправляет дальше — например сообщение в чат.

events.on("chat_send", function(e)
    if e.message == "стоп" then
        e.cancel()
    end
end)

Смена мира

Всё накопленное состояние — счётчики, кэши, сэмплы графиков — чистят на world_change. Иначе после перезахода скрипт покажет данные из прошлой игры.

local combo = 0

events.on("attack", function()
    combo = combo + 1
end)

events.on("world_change", function()
    combo = 0
end)