Events
server.on("playerJoin", (player) => { /* ... */ });
Listeners run synchronously in the network loop. They may be async, but
where an event takes a return value (a veto, a replacement), only what is
returned synchronously counts. If several listeners return values, any
false wins; otherwise the last number does.
Players
| Event |
Arguments |
Return |
playerJoin |
player |
|
playerQuit |
player, reason: "quit" | "timeout" | "kicked" |
|
playerSpawn |
player |
|
playerDeath |
player, killer: Player | Ped | null, weapon |
|
playerPause |
player, paused, focused |
|
playerDamage |
victim, attacker: Player | Ped, hit: Hit |
false cancels, a number replaces the damage |
playerShoot |
player, shot: { weapon, origin, target } |
false cancels the shot |
playerExplosion |
player, explosion: { type, weapon, vehicle, position } |
false: its blast hurts no player |
playerWeaponViolation |
player, reason: "notOwned" | "noAmmo" | "fireRate" | "position", weapon |
|
playerWantedLevel |
player, level, old |
false keeps the old level, a number sets another |
playerEnterVehicle |
player, vehicle |
|
playerExitVehicle |
player, vehicle |
|
Hit
| Field |
|
weapon |
Weapon (0 unarmed). |
bodyPart |
BodyPart: 3 torso, 4 groin, 5/6 arms, 7/8 legs, 9 head. |
damage |
Before armour. |
direction |
Side of the victim hit, 0-3. |
lethal |
A ped headshot that kills outright; a returned number overrides it. |
Vehicles
| Event |
Arguments |
Return |
vehicleDeath |
vehicle, killer: Player | null |
false saves it (repaired instead) |
vehicleRespawn |
vehicle |
|
vehicleRadio |
player, vehicle, station |
false refuses, a number tunes elsewhere |
Peds and population
| Event |
Arguments |
Return |
pedDamage |
ped, attacker: Player | Ped, hit |
false cancels, a number replaces the damage |
pedDeath |
ped, killer: Player | Ped | null, weapon |
|
pedViolation |
player, ped, reason |
|
populationSpawn |
spawn: { vehicle, position, heading, peds }, player |
false refuses it |
Zones
| Event |
Arguments |
zoneEnter |
player, zone |
zoneLeave |
player, zone |
zoneMove |
player, zone (each position update inside, ~20/s) |
Client scripts
| Event |
Arguments |
clientMessage |
player, channel, data (parsed JSON) |
clientScriptError |
player, error: { where, message } |