Lua events
Lua events notify resources about authoritative gameplay, world, networking, and client UI changes. The catalog below is generated from event names and argument lists verified against the current runtime.
Handling an event
addEventHandler("onPlayerJoin", root, function(playerId)
outputChatBox("Welcome!", playerId, 225, 195, 110)
end)
Use root for global runtime events and resourceRoot for events owned by the current resource. Each event page specifies its execution side, exact callback signature, parameters, and delivery rules.
The current reference documents 70 public events.
Resource events
| Event |
Side |
Description
|
| onClientResourceStart |
client-side |
Triggered after the current client resource has started and its client scripts are ready.
|
| onClientResourceStop |
client-side |
Triggered immediately before the current client resource is stopped.
|
| onResourceStart |
server-side |
Triggered after the current server resource has started and its scripts are ready.
|
| onResourceStop |
server-side |
Triggered immediately before the current server resource is stopped.
|
| onServerShutdown |
server-side |
Triggered while the multiplayer server is beginning an orderly shutdown.
|
Player events
| Event |
Side |
Description
|
| onPlayerJoin |
server-side |
Triggered after a client has joined the server and received its authoritative player ID.
|
| onPlayerNameChange |
server-side |
Triggered after an authoritative player name change has been accepted.
|
| onPlayerQuit |
server-side |
Triggered when a player disconnects or is removed from the server.
|
| onPlayerSkinChange |
server-side |
Triggered after a validated authoritative player appearance preset has changed.
|
| onPlayerSpawn |
server-side |
Triggered after the server authoritatively spawns a player in the game world.
|
| onPlayerTeleport |
server-side |
Triggered after the server authoritatively teleports an existing player.
|
Chat events
| Event |
Side |
Description
|
| onPlayerChat |
server-side |
Triggered when a player submits a normal chat message.
|
| onPlayerChatReady |
server-side |
Triggered by the bundled chat resource when a player's client chat UI reports that it is ready.
|
| onPlayerCommand |
server-side |
Triggered when a player submits a slash command that was not consumed before event dispatch.
|
Combat events
| Event |
Side |
Description
|
| onPlayerHit |
server-side |
Triggered after the server validates that one player hit another player.
|
Life State events
| Event |
Side |
Description
|
| onPlayerDamage |
server-side |
Triggered after authoritative damage changes a player's health.
|
| onPlayerDead |
server-side |
Compatibility alias triggered together with onPlayerDeath when health reaches zero.
|
| onPlayerDeath |
server-side |
Triggered when a player's authoritative health reaches zero.
|
| onPlayerDowned |
server-side |
Triggered after a player enters the authoritative downed state.
|
| onPlayerLifeStateChange |
server-side |
Triggered whenever the authoritative life state changes between alive, downed, and dead.
|
| onPlayerRevived |
server-side |
Triggered after a downed or dead player is authoritatively returned to the alive state.
|
Magic events
Ranged events
| Event |
Side |
Description
|
| onPlayerRangedImpact |
server-side |
Triggered when an authoritative arrow or bolt impacts a player or the world.
|
| onPlayerRangedProjectileDestroy |
server-side |
Triggered when an authoritative arrow or bolt projectile is removed.
|
| onPlayerRangedShot |
server-side |
Triggered when the server creates an authoritative arrow or bolt projectile.
|
| onPlayerRangedState |
server-side |
Triggered when the authoritative bow or crossbow action state changes.
|
Interaction events
World events
| Event |
Side |
Description
|
| onMinuteDurationChange |
server-side |
Triggered after the server changes how long one in-game minute lasts.
|
| onTimeChange |
server-side |
Triggered after the server changes the authoritative world clock.
|
| onWeatherChange |
server-side |
Triggered after the server accepts an authoritative weather transition.
|
| onWorldItemPickup |
server-side |
Triggered after the server validates a synchronized world-item pickup.
|
| onWorldItemSpawn |
server-side |
Triggered when the server creates a synchronized pickup item in the world.
|
| onWorldObjectStateChange |
server-side |
Triggered when a synchronized usable world object changes state.
|
Monster events
| Event |
Side |
Description
|
| onMonsterAttack |
server-side |
Triggered when server-owned monster AI begins an authoritative attack against a player.
|
| onMonsterDamage |
server-side |
Triggered after authoritative damage changes a monster's health.
|
| onMonsterDeath |
server-side |
Triggered when a synchronized monster's authoritative health reaches zero.
|
| onMonsterDestroy |
server-side |
Triggered after a synchronized monster is removed from the server world.
|
| onMonsterSpawn |
server-side |
Triggered after the server creates a synchronized monster.
|
| onMonsterTargetChange |
server-side |
Triggered when server-owned monster AI changes its player target.
|
NPC events
| Event |
Side |
Description
|
| onNpcAppearanceChange |
server-side |
Triggered after a scripted NPC's skin or armor changes.
|
| onNpcDestroy |
server-side |
Triggered after a resource-owned scripted NPC is removed.
|
| onNpcEquipmentChange |
server-side |
Triggered after a scripted NPC's equipped weapon changes.
|
| onNpcRouteComplete |
server-side |
Triggered when a non-looping scripted NPC route finishes.
|
| onNpcRoutePoint |
server-side |
Triggered when a scripted NPC reaches a route point.
|
| onNpcRouteStart |
server-side |
Triggered after a complete scripted NPC route has been validated and started.
|
| onNpcSpawn |
server-side |
Triggered after a resource creates a synchronized scripted human NPC.
|
GUI events
| Event |
Side |
Description
|
| onClientChatClose |
client-side |
Triggered when the built-in client chat input is closed.
|
| onClientChatOpen |
client-side |
Triggered when the built-in client chat input becomes active.
|
| onClientGuiChange |
client-side |
Triggered when a supported RmlUi input value changes.
|
| onClientGuiClick |
client-side |
Triggered when a clickable element in a resource-owned RmlUi document is activated.
|
| onClientGuiEscape |
client-side |
Triggered when Escape is pressed while a resource-owned RmlUi document owns UI input.
|
| onClientGuiSubmit |
client-side |
Triggered when a resource-owned RmlUi form or input is submitted.
|