Skip to content

Параметры событий

Каждый callback(event) получает общий envelope:

ПолеТипЗначение
namestringТочное имя.
sequenceintegerМонотонный номер доставки.
timestampintegerМонотонное время в мс, не календарное.
sessionIdintegerСвязанная сессия.
playerGenerationintegerСвязанное поколение игрока.

Table действует только во время callback. Изменения немаркированных полей не влияют на host.

Lifecycle, frame и UI

СобытиеДополнительные поля
plugin.loaded, session.started, session.ended, game.ready, server.connected, server.disconnected, player.spawned, player.diedНет.
game.framedeltaSeconds: number.
draw.huddeltaSeconds, screenWidth, screenHeight: number.
ui.menu_opened, ui.menu_closedНет; требуется ui.menu.
ui.control_changedpluginId, pageId, controlId; value: boolean для switch, number для slider, string для choice/text input и "click" для button.

На player.spawned заново получайте Handles и leases.

Игрок

СобытиеРазрешениеPayload
player.health_changedgame.player.readpreviousHealth, health: number.
player.vehicle_entered, player.vehicle_leftgame.vehicle.readvehicleId: integer, passenger: boolean.
player.interior_changedgame.state.readpreviousInterior, interior: integer.

player.damage_before требует game.player.write: damage — изменяемое конечное число 0..100000; 0 подавляет урон. Также доступны weaponType, bodyPart, sourceType="player"|"actor"|"entity" и условные sourcePlayerId/sourceActorId. Обработчики видят результат предыдущих; некорректная замена игнорируется; yield запрещён.

Чат

СобытиеPayload
chat.message_receivedplayerId, playerName, message, localPlayer; требует chat.read.
chat.server_message_receivedmessage, color ARGB; требует chat.read.
chat.bubble_receivedplayerId, message, color, drawDistance, durationMs; требует chat.read.

chat.message_sending (chat.intercept) позволяет менять message и cancelled; строка UTF-8, 1–4096 байт, без NUL/CR/LF и не начинается с /. command.executing (command.intercept) позволяет менять command и cancelled; команда начинается с /, имеет символ после него и те же лимиты. Отмена sticky: true нельзя вернуть в false. Yield запрещён.

Checkpoint и сущности

checkpoint.entered/checkpoint.left требуют game.state.read и содержат kind="normal"|"race", position: Vector3, а также либо size: Vector3, либо radius: number и raceType: integer.

entity.streamed_in/entity.streamed_out требуют game.entity.read и содержат entityType, entityId, streamGeneration. После streamed_out старый Handle недействителен.

Dialog

dialog.shown требует dialog.read: dialogId (0..32767), styleId (0..5), style (message, input, list, password, tablist, tablist_headers), title, message, primaryButton, secondaryButton. Все строки UTF-8; title и каждая кнопка — до 1024 байт, message — до 16 КиБ.

dialog.responding требует dialog.intercept. Изменяемы accepted: boolean, listItem: integer (-1..65534), input: string (UTF-8, до 4096 байт, без NUL/CR/LF) и cancelled; dialogId только для чтения. Отмена sticky, yield запрещён.

TextDraw

Идентичность: textdrawId (0..3071) плюс положительный textdrawGeneration.

СобытиеРазрешениеPayload
textdraw.showntextdraw.readidentity, styleId, text, selectable, x, y.
textdraw.hiddentextdraw.readidentity.
textdraw.text_changedtextdraw.readidentity, text.
textdraw.clickingtextdraw.interceptidentity, изменяемый cancelled.

Text до 4096 байт. Отмена клика sticky, yield запрещён.