Skip to content

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

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

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

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

Lifecycle, frame и UI ​

СобытиеДополнительные поля
plugin.loaded, plugin.unloading, 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, valueType, value; switch → boolean, slider/number_input → нормализованный number, варианты и list → string, button/confirm_button → action/click, group → action/toggle.

ui.control_changed создаётся только интерактивными control. section, text, divider и progress являются display-only; multi_choice возвращает value переключённого варианта, text_input и color_picker отправляют значение после Apply, а list возвращает value выбранного элемента.

На 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.weapon_changedgame.player.readПредыдущее и текущее оружие.
player.aiming_changedgame.player.readПредыдущее и текущее состояние прицеливания.
player.motion_changedgame.player.readpreviousActivity, activity, previousMoveState, moveState, onGround, inAir.
player.vehicle_collisiongame.vehicle.readvehicleId, otherType (vehicle, player, world), optional otherId, impact, speed, position.
player.skin_changedgame.player.readpreviousSkin, skin.
player.animation_changedgame.player.readpreviousAnimation, animation.
player.task_changedgame.player.readpreviousCategory, category, previousType, previousName, type, name.
world.time_changedgame.state.readpreviousHour, previousMinute, hour, minute.
world.weather_changedgame.state.readpreviousWeather, previousHoldTime, weather, holdTime.
vehicle.health_changedgame.vehicle.readID транспорта и прежнее/новое здоровье.
vehicle.state_changedgame.vehicle.readvehicleId, previousModel, model, optional previousHeading/heading, а также старые и новые engine/lights/siren.

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

Доставка и lifecycle ​

Игра, сеть и Android UI записывают неизменяемые snapshots в bounded-очередь на 256 элементов; доставка происходит в следующем кадре game thread. Наблюдение сети занимает не более 96 элементов, обычные уведомления — не более 224, чтобы сохранить место для lifecycle. При переполнении новые уведомления отбрасываются, сетевой поток не ждёт Lua.

Доступность игрока и generation синхронизируются отдельно и не теряются из-за переполнения очереди. Состояния снимаются не чаще одного раза за кадр после lifecycle и до game.frame/draw.hud. При прямой смене транспорта сначала приходит player.vehicle_left, затем player.vehicle_entered. После spawn, reconnect или включения плагина первая выборка только создаёт baseline; старые изменения не воспроизводятся, поэтому после смены generation Handle нужно получать заново.

Чат ​

Событие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 недействителен.

input.touch требует ui.input и синхронно вызывается до передачи touch игре; payload содержит action (down, move, up, cancel), pointerId, пиксельные x/y, размеры width/height, ограниченные 0..1normalizedX/normalizedY и изменяемый cancelled. cancelled = true или возврат false поглощает текущую последовательность. camera.mode_changed требует game.state.read и содержит previousMode, mode.

network.packet_received, network.rpc_received, network.packet_sending и network.rpc_sending требуют network.inspect; версии *_before_send требуют network.intercept и позволяют менять только sticky cancelled. Payload — ограниченный префикс до 4096 байт с флагом truncated; небезопасный синхронный перехват работает в fail-open режиме.

pickup.collected требует game.entity.read и содержит pickupId, model, type, position; это только уведомление.

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 запрещён.