Protocol reference
Event upload
Gameplay events uploaded over HTTP.
Event upload
event_batch
agent → controller, HTTP POST
The body of an event upload: 1 to 128 frames of the server that allocation_id names, with consecutive seq. Store frames idempotently by allocation_id and seq, because a lost receipt means the same frames arrive again.
This schema checks only each frame's position, so one bad event cannot fail the batch. Parse each frame on its own with EventBatchFrame, and quarantine a frame that fails by listing it in rejected of the EventBatchReceipt.
A server plays the one match of its launch, so the match of a batch is the match that the controller launched allocation_id with. The frames come to at most 2 MiB together.
Rejected unless each frame's seq is one above the seq of the frame before it.
allocation_idAllocationIdThe server that sent every event of the batch.
AllocationIdThe id the controller picks for each server it launches. It identifies that server and its events from then on.
The id is a lowercase UUID, new for every launch. UUIDv7 is recommended, because its time-ordered values keep a database index on it compact as events arrive.
string
framesEventBatchFrame[], 1–128 itemsThe frames, in
seqorder.EventBatchFrameOne frame of an event batch: an event and its position among the events of the server that the batch names. A node runs each allocation once and refuses to launch one it has run before, so the batch's
allocation_idand the frame'sseqidentify the event. Parse each frame of a batch on its own with this schema.seqEventSeqThe event's position among the events of its server.
EventSeqAn event's position among its server's events, from 0.
integer ≥ 0
eventPluginToControllerMessageThe gameplay event, one of
PluginToControllerMessage.PluginToControllerMessageAny gameplay event.
One of
map_start,player_connect,player_disconnect,knife_start,knife_end,side_choice,going_live,round_backup,match_restored,round_start,round_freeze_end,round_buy_end,round_end,round_complete,player_death,player_hurt,player_blind,grenade_throw,grenade_detonate,grenade_end,round_shots,bomb_begin_plant,bomb_abort_plant,bomb_planted,bomb_begin_defuse,bomb_abort_defuse,bomb_defused,bomb_exploded,round_mvp,map_end,log.
Example
{
"allocation_id": "5b1e2c7a-8d4f-4c3b-9a6e-2f1d0c9b8a7e",
"frames": [
{
"seq": 0,
"event": {
"type": "map_start",
"timestamp": 1700000014000,
"tick": 0,
"plugin_version": "1.2.0",
"framework_version": "1.1.4",
"server_version": "1.41.0.3",
"map_name": "de_mirage"
}
}
]
}event_batch_receipt
controller → agent, HTTP 200
The controller's answer to a batch it holds. Every frame of the batch is either canonical history or quarantined under one of the rejected entries, and the agent may delete them all. Resending a quarantined frame would fail the same way.
rejectedobject[]Frames quarantined instead of stored.
seqEventSeqThe quarantined frame.
EventSeqAn event's position among its server's events, from 0.
integer ≥ 0
reasonstring ≥ 1 charsWhy it was quarantined.
Example
{
"rejected": []
}event_batch_rejection
controller → agent, HTTP 409
The body of a 409 answer to an event upload. The controller could not read the identities of the batch, so it refuses the whole batch. The agent retries that server with a backoff of its own, and the node's other servers upload meanwhile.
code"event_integrity_error"Always
event_integrity_error.detailstringWhat made the batch untrustworthy.
Example
{
"code": "event_integrity_error",
"detail": "seq 12 was already stored with different content"
}Match
The map starting, going live and ending, round backups, and plugin log lines.
map_start
Sent when a map has loaded on the server, as the first event of the map's history.
The plugin sends one on every load. A workshop map loads twice, and an admin's changelevel loads another map.
type"map_start"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.plugin_versionstring ≤ 128 charsThe version of the Ankor plugin, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.
framework_versionstring ≤ 128 charsThe version of SwiftlyS2, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.
server_versionstring ≤ 128 charsThe version of the CS2 server, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.
map_namestringThe map that loaded, as the engine names it.
string
Must match
^[A-Za-z0-9_/-]{1,128}$
Example
{
"type": "map_start",
"timestamp": 1700000014000,
"tick": 0,
"plugin_version": "1.2.0",
"framework_version": "1.1.4",
"server_version": "1.41.0.3",
"map_name": "de_mirage"
}going_live
Sent when the match goes live, with the round settings that it plays under.
type"going_live"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.team1_sidePlayingSideTeam 1's side for the first half.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
max_roundsinteger 1–240Rounds in regulation, as
mp_maxrounds, up to 240. MR12 is 24 and MR15 is 30.overtimebooleanWhether a tie after regulation goes to overtime, as
mp_overtime_enable.overtime_max_roundsinteger 1–60Rounds in one overtime, both halves together, as
mp_overtime_maxrounds. The bound is 60, ten times the stock 6.friendly_firebooleanWhether bullets and melee hurt teammates. Grenades always do.
Example
{
"type": "going_live",
"timestamp": 1700000014000,
"tick": 100000,
"team1_side": "ct",
"max_rounds": 24,
"overtime": true,
"overtime_max_rounds": 6,
"friendly_fire": false
}round_backup
Sent as each live round starts. The newest one of a map, with the launch of that map, holds everything that a restore needs on another node.
type"round_backup"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.team1_sidePlayingSideTeam 1's side in that round. On a launch, the plugin seats players by it through warmup, before the load.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
rulesMatchRulesThe rules that the map was played under. A restore plays on under these rules instead of the rules of its launch.
MatchRulesThe rules of a match, as a launch asks for them and as
going_liveandround_backupreport the server playing them.The plugin reads the round settings off the server's cvars.
friendly_firecomes from the launch, and Ankor applies it through the damage reductions instead ofmp_friendlyfire.max_roundsinteger 1–240Rounds in regulation, as
mp_maxrounds, up to 240. MR12 is 24 and MR15 is 30.overtimebooleanWhether a tie after regulation goes to overtime, as
mp_overtime_enable.overtime_max_roundsinteger 1–60Rounds in one overtime, both halves together, as
mp_overtime_maxrounds. The bound is 60, ten times the stock 6.friendly_firebooleanWhether bullets and melee hurt teammates. Grenades always do.
filestring 1–524288 charsThe backup file as the engine wrote it, up to 524288 characters. The file holds the money and equipment of every player, keyed by account, and only
mp_backup_restore_load_filereads it.The file is text with tabs and line breaks, so a file at the length cap stays within the frame limits once JSON escapes it. Rejected when it holds a lone UTF-16 surrogate.
string 1–524288 chars
Must match
^[\t\n\r\P{Cc}]*$roundRoundNumberThe one-based round that the backup starts. The file numbers rounds from zero, one lower.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
team1_scoreinteger 0–1000Team 1's score before that round.
team2_scoreinteger 0–1000Team 2's score before that round.
rosterRosterThe teams and spectators that the map is played with.
RosterThe teams and spectators of a match. Each player holds one place on the server, whichever team or list the player is in.
Rejected when a SteamID appears twice across both teams and
spectators, or when they hold more than 64 together.team1RosterTeamTeam 1, which events number
1.RosterTeamOne team of a
Roster.namestring ≤ 30 charsThe team name that players see, up to 30 characters. Rejected when it is blank, or when it holds a NUL or a lone UTF-16 surrogate.
string ≤ 30 chars
Must match
\SplayersSteamId64[], ≥ 1 itemsThe players of the team, captain first. The captain may use
!forcereadyand picks the side after the knife round. A team has at least one player, so it always has a captain.
team2RosterTeamTeam 2, which events number
2.RosterTeamOne team of a
Roster.namestring ≤ 30 charsThe team name that players see, up to 30 characters. Rejected when it is blank, or when it holds a NUL or a lone UTF-16 surrogate.
string ≤ 30 chars
Must match
\SplayersSteamId64[], ≥ 1 itemsThe players of the team, captain first. The captain may use
!forcereadyand picks the side after the knife round. A team has at least one player, so it always has a captain.
spectatorsSteamId64[], ≤ 2 itemsPlayers allowed in as spectators, who watch with the game's free camera, up to 2. When
ready_modeismanual, they ready up too.
Example
{
"type": "round_backup",
"timestamp": 1700001214000,
"tick": 180000,
"round": 14,
"team1_side": "t",
"team1_score": 7,
"team2_score": 6,
"rules": {
"max_rounds": 24,
"overtime": true,
"overtime_max_rounds": 6,
"friendly_fire": false
},
"file": "\"SaveFile\"\n{\n\t\"round\"\t\t\"13\"\n\t…\n}\n",
"roster": {
"team1": {
"name": "Blue",
"players": [
"76561198000000001",
"76561198000000002"
]
},
"team2": {
"name": "Orange",
"players": [
"76561198000000011",
"76561198000000012"
]
},
"spectators": []
}
}match_restored
Sent when the server has loaded a round backup, from the restore of its launch, from a restore_round, or from an mp_backup_restore_load_file that someone ran by hand.
The round_start that follows plays round again. From that round_start on, the events of the server replace everything that it sent for that round and the rounds after it.
The plugin reads the scores and the side from the engine once the engine has loaded the file. The plugin refuses a load during the knife round, the side choice, the halftime break and after the match has ended.
type"match_restored"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe one-based round that the match plays on from.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
team1_sidePlayingSideTeam 1's side in that round.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
team1_scoreinteger 0–1000Team 1's score before that round.
team2_scoreinteger 0–1000Team 2's score before that round.
Example
{
"type": "match_restored",
"timestamp": 1700001300000,
"tick": 190000,
"round": 14,
"team1_side": "t",
"team1_score": 7,
"team2_score": 6
}map_end
Sent when the map is over. After a played map, the scoreboard stays up for 60 seconds, then the server kicks the players, sends its remaining events and quits. After a ready_timeout, the server kicks the players at once.
Rejected unless winner_team is the team with the higher score of a played map, or null when the scores are equal or the map was not played out. Rejected unless teams is set for a ready_timeout, with both scores 0, and null otherwise.
type"map_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.reasonMapEndReasonWhy the map ended.
MapEndReasonWhy a map ended:
Only a
playedmap has a winner. The controller decides what any other end means for the match.string enum
"played"the map was played out.
"ready_timeout"ready_timeout_secondspassed in warmup, before the match started."abandoned"every rostered player left after the match began, in the knife round, the side choice or live play.
winner_teamTeamNumber| nullThe team with the higher score of a
playedmap. Null for a draw, and for any other end.TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12team1_scoreinteger 0–1000Team 1's score when the map ended.
team2_scoreinteger 0–1000Team 2's score when the map ended.
teamsobject | nullWho was on the server and ready when
ready_timeout_secondspassed. Null for any other end.team1ReadyTeamReadyTeamA team's players when the ready deadline passed.
connectedinteger 0–64Rostered players of the team on the server.
readybooleanWhether the team counted as ready, its captain's force-ready included.
team2ReadyTeamReadyTeamA team's players when the ready deadline passed.
connectedinteger 0–64Rostered players of the team on the server.
readybooleanWhether the team counted as ready, its captain's force-ready included.
spectatorsReadyTeam| nullThe rostered spectators, as one group. Null unless the match has them ready up.
ReadyTeamA team's players when the ready deadline passed.
connectedinteger 0–64Rostered players of the team on the server.
readybooleanWhether the team counted as ready, its captain's force-ready included.
Examples
{
"type": "map_end",
"timestamp": 1700003614000,
"tick": 460000,
"reason": "played",
"winner_team": 1,
"team1_score": 13,
"team2_score": 9,
"teams": null
}{
"type": "map_end",
"timestamp": 1700000310000,
"tick": 19840,
"reason": "ready_timeout",
"winner_team": null,
"team1_score": 0,
"team2_score": 0,
"teams": {
"team1": {
"connected": 5,
"ready": true
},
"team2": {
"connected": 3,
"ready": false
},
"spectators": null
}
}log
Sent when the plugin logs a line worth keeping with the match.
type"log"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.level"debug"|"info"|"warn"|"error"The severity of the line.
messagestring ≤ 8192 charsThe log line, up to 8192 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.
Example
{
"type": "log",
"timestamp": 1700000015000,
"tick": 128,
"level": "warn",
"message": "force ready of team 1 by 76561198000000001 (alpha)"
}Players
Players joining, leaving and changing sides.
player_connect
Sent when a player connects after the match leaves warmup. get_server_status lists who is on the server during warmup.
type"player_connect"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.playerPlayerRefThe player who connected.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
rejectedbooleanWhether the plugin kicked the player because the SteamID is not on any roster.
Example
{
"type": "player_connect",
"timestamp": 1700000014000,
"tick": 64,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "spec",
"team": 1
},
"rejected": false
}player_disconnect
Sent when a player leaves after the match leaves warmup.
type"player_disconnect"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.playerPlayerRefThe player who left.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
reasonstring ≤ 64 charsThe engine's disconnect reason, up to 64 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.
Example
{
"type": "player_disconnect",
"timestamp": 1700000900000,
"tick": 150000,
"player": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2
},
"reason": "Disconnect"
}Knife round
The knife round and side choice.
knife_start
Sent when the knife round begins.
type"knife_start"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.
Example
{
"type": "knife_start",
"timestamp": 1700000030000,
"tick": 2048
}knife_end
Sent when the knife round ends. When both teams survive, the counts in this event decide the winner.
Rejected when a team's health is above 1000 times its players alive.
type"knife_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.winner_teamTeamNumberThe team that won the knife round.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12winner_sidePlayingSideThe side that the winning team won on.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
team1_aliveinteger 0–64Players of team 1 alive at the end.
team2_aliveinteger 0–64Players of team 2 alive at the end.
team1_healthinteger 0–64000Health points left to team 1, summed over its players alive, each at most 1000.
team2_healthinteger 0–64000Health points left to team 2, summed like
team1_health.
Example
{
"type": "knife_end",
"timestamp": 1700000090000,
"tick": 6000,
"winner_team": 2,
"winner_side": "t",
"team1_alive": 0,
"team2_alive": 2,
"team1_health": 0,
"team2_health": 145
}side_choice
Sent when the knife round winners choose a side, or run out of time and stay.
type"side_choice"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.teamTeamNumberThe team that chose.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12choicestring enumWhat the team chose.
string enum
"stay"keep the sides of the knife round.
"swap"exchange the sides.
team1_sidePlayingSideThe side of team 1 for the first half, after the choice.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
Example
{
"type": "side_choice",
"timestamp": 1700000100000,
"tick": 6600,
"team": 2,
"choice": "swap",
"team1_side": "t"
}Rounds
Round boundaries, economy, shots and results.
round_start
Sent when a round begins.
The same round can begin again with no round_end between. The engine restarts a round that a team leaves before it is decided, as when every player on it disconnects or loses their connection. The later round_start replaces the earlier one, and the round is played from it.
type"round_start"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
team1_sidePlayingSideTeam 1's side this round.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
playersRoundPlayer[], ≤ 64 itemsThe players present when the round started, each once. An empty array is authoritative, so the round had no players. Rejected when two entries share a
player.steam_id.RoundPlayerThe state and money of a player when the plugin sampled the round. Money is in dollars.
playerPlayerRefThe player sampled.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
alivebooleanWhether the player was alive when sampled.
equipment_valueinteger 0–65535Dollars of equipment that the player carried, the engine's figure.
cashinteger 0–65535Dollars in hand when sampled.
start_cashinteger 0–65535Dollars in hand at the start of the round.
cash_spentinteger 0–131070Dollars spent this round by the time of the sample.
carryoverobject | nullThe players of the previous round as that round left them, after exit kills and pickups. Null across an equipment reset.
from_roundRoundNumberThe round after which the plugin took the snapshot.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
sampled_ticknumber ≥ 0The server tick when the plugin took the snapshot.
playersobject[], ≤ 64 itemsThe players as that round left them, with what each carried. Rejected when two entries share a
player.steam_id.playerPlayerRefThe player sampled.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
alivebooleanWhether the player was alive when sampled.
equipment_valueinteger 0–65535Dollars of equipment that the player carried, the engine's figure.
cashinteger 0–65535Dollars in hand when sampled.
start_cashinteger 0–65535Dollars in hand at the start of the round.
cash_spentinteger 0–131070Dollars spent this round by the time of the sample.
inventoryPlayerInventory| nullWhat the player carried. Null when the plugin could not read the pawn.
PlayerInventoryWhat a player carries. A null inventory means that the plugin could not read the pawn.
itemsInventoryItem[], ≤ 64 itemsWeapons, grenades and other items held, up to 64.
InventoryItemOne kind of item that a player holds: the engine's item definition index as
weapon, a quantity, and the unit price in this game build.weaponinteger 1–65535The engine's item definition index.
quantityinteger 1–20Items of this kind that the player holds, up to ten times the stock limit of 2 flashbangs.
unit_valueinteger 0–52000Dollars that one item costs, up to ten times the dearest stock item, the M249 at 5,200.
armorinteger 0–1000Armor points, up to 1000, ten times the stock 100.
helmetbooleanWhether the armor includes a helmet.
defuse_kitbooleanWhether the player carries a defuse kit.
Example
{
"type": "round_start",
"timestamp": 1700000200000,
"tick": 110000,
"round": 2,
"round_time": 0,
"team1_side": "ct",
"players": [
{
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"alive": true,
"equipment_value": 1000,
"cash": 2400,
"start_cash": 2400,
"cash_spent": 0
}
],
"carryover": {
"from_round": 1,
"sampled_tick": 109500,
"players": [
{
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"alive": true,
"equipment_value": 1000,
"cash": 2400,
"start_cash": 800,
"cash_spent": 650,
"inventory": {
"items": [
{
"weapon": 32,
"quantity": 1,
"unit_value": 200
}
],
"armor": 100,
"helmet": false,
"defuse_kit": false
}
}
]
}
}round_freeze_end
Sent when freeze time ends, as the authoritative list of the players who take part in the round after reconnects during freeze time.
type"round_freeze_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
team1_sidePlayingSideTeam 1's side this round.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
playersRoundPlayer[], ≤ 64 itemsEveryone who takes part in the round, each once. Rejected when two entries share a
player.steam_id.RoundPlayerThe state and money of a player when the plugin sampled the round. Money is in dollars.
playerPlayerRefThe player sampled.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
alivebooleanWhether the player was alive when sampled.
equipment_valueinteger 0–65535Dollars of equipment that the player carried, the engine's figure.
cashinteger 0–65535Dollars in hand when sampled.
start_cashinteger 0–65535Dollars in hand at the start of the round.
cash_spentinteger 0–131070Dollars spent this round by the time of the sample.
Example
{
"type": "round_freeze_end",
"timestamp": 1700000215000,
"tick": 110960,
"round": 2,
"round_time": 0,
"team1_side": "ct",
"players": [
{
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"alive": true,
"equipment_value": 4100,
"cash": 0,
"start_cash": 2400,
"cash_spent": 2400
}
]
}round_buy_end
Sent when buy time closes, mp_buytime after freeze time ends, with the equipment value that each roster team carried, as the sum of the engine's figure for each pawn.
The plugin reads a player at the last buy-zone exit inside the window, or live at the close while the player is still in a buy zone. Snapshots at a death or disconnect keep a buy that was made before the window closes. An earlier buy-zone exit counts for a player who never returned.
Rejected unless team1_equipment_value and team2_equipment_value are each the sum of equipment_value over the players whose player.team is that team.
type"round_buy_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playersobject[], ≤ 64 itemsThe samples behind the team totals, each player once. Rejected when two entries share a
player.steam_id.playerPlayerRefThe player read.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
equipment_valueinteger 0–65535Dollars of equipment that the player carried.
cashinteger 0–65535Dollars in hand.
start_cashinteger 0–65535Dollars in hand at the start of the round.
cash_spentinteger 0–131070Dollars spent this round.
sampled_ticknumber ≥ 0The server tick when the plugin read the player.
team1_equipment_valueinteger 0–4194240Dollars of equipment that team 1 carried, the sum of
equipment_valueover itsplayers, so the event states the economy of the round on its own.team2_equipment_valueinteger 0–4194240Dollars of equipment that team 2 carried, summed like
team1_equipment_value.
Example
{
"type": "round_buy_end",
"timestamp": 1700000235000,
"tick": 112240,
"round": 2,
"round_time": 20,
"players": [
{
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"equipment_value": 4100,
"cash": 0,
"start_cash": 2400,
"cash_spent": 2400,
"sampled_tick": 111800
},
{
"player": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2
},
"equipment_value": 3700,
"cash": 300,
"start_cash": 3400,
"cash_spent": 3100,
"sampled_tick": 111900
}
],
"team1_equipment_value": 4100,
"team2_equipment_value": 3700
}round_end
Sent when a round is decided. The last gameplay reports of the round may still follow, and round_complete closes it.
type"round_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
winner_sidePlayingSideThe side that won the round.
PlayingSideA playing side, for a field that never holds
spec.string enum
"t"terrorists.
"ct"counter-terrorists.
winner_teamTeamNumberThe roster team that won the round.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12reasonRoundEndReasonWhy the round ended.
RoundEndReasonWhy a round ended, as the engine names it. When the engine gives a reason that this list does not name, the plugin sends
unknown.string enum
"unknown""target_bombed"The bomb exploded.
"terrorists_escaped""cts_prevent_escape""escaping_terrorists_neutralized""bomb_defused"The bomb was defused.
"cts_win"Every T was killed.
"terrorists_win"Every CT was killed.
"round_draw""all_hostages_rescued""target_saved"Time ran out without the bomb planted.
"hostages_not_rescued""terrorists_not_escaped""game_commencing""terrorists_surrender"The Ts voted to surrender. The map ends after this round.
"cts_surrender"The CTs voted to surrender. The map ends after this round.
"terrorists_planted""cts_reached_hostage""survival_win""survival_draw"
team1_scoreinteger 0–1000Team 1's score after this round.
team2_scoreinteger 0–1000Team 2's score after this round.
round_lengthnumber 0–4000Seconds that the round lasted, from the end of freeze time to the end of the round.
Example
{
"type": "round_end",
"timestamp": 1700000300000,
"tick": 116400,
"round": 2,
"round_time": 85.25,
"winner_side": "ct",
"winner_team": 1,
"reason": "cts_win",
"team1_score": 2,
"team2_score": 0,
"round_length": 70.25
}round_complete
Sent after every gameplay report of a scored round, its round_shots included, before the next round or the map end.
type"round_complete"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
Example
{
"type": "round_complete",
"timestamp": 1700000305000,
"tick": 116720,
"round": 2,
"round_time": 90.25
}round_shots
Sent once for each round when it closes, at halftime, the next round_start or the map_end, with the shots that each player fired over the round.
A round that starts again with no round_end, as described on round_start, sends none for the attempt it abandoned. Neither does a round that a restore cut off, which the match_restored replaces.
players lists each player who fired, and is empty when nobody did. The plugin counts shots from the engine's weapon_fire, up to 4096 for each player, and counts no more. Knives and grenades are left out, because they fire no rounds. A throw arrives as grenade_throw instead. Hits are the player_hurt events of the same round, attacker and weapon.
Rejected when a player's shots add up to more than 4096, or when a player or a weapon of a player is listed twice.
type"round_shots"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the shots were fired in.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
playersPlayerShots[], ≤ 64 itemsEach player who fired, once each.
PlayerShotsThe shots that one player fired over a round.
playerPlayerRefThe player.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
weaponsWeaponShots[], 1–4096 itemsEach weapon that the player fired, once each.
WeaponShotsThe shots that a player fired with one weapon over a round. Rejected unless
shotsequals the number ofticks.weaponWeaponThe weapon fired.
WeaponA weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when
idis a number andfallbackis not null.idinteger 1–65535 | nullThe item definition index, a 16-bit unsigned integer. Null when the item has none.
fallbackstring | nullThe engine class name of an item without an index. Null when
idis set, or when the engine named no weapon either.string
Must match
^[A-Za-z0-9_]{1,64}$
shotsinteger 1–4096Shots fired, which equals the number of
ticks.ticksnumber ≥ 0[], 1–4096 itemsThe server tick of each shot.
Example
{
"type": "round_shots",
"timestamp": 1700000300000,
"tick": 116400,
"round": 2,
"players": [
{
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"weapons": [
{
"weapon": {
"id": 16,
"fallback": null
},
"shots": 3,
"ticks": [
113880.25,
113888.5,
113896
]
}
]
}
]
}round_mvp
Sent when the engine names the MVP of a round.
type"round_mvp"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlayerRefThe MVP of the round.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
reasoninteger 0–31The engine's MVP reason code, a small enum.
Example
{
"type": "round_mvp",
"timestamp": 1700000300000,
"tick": 116400,
"round": 2,
"round_time": 85.25,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"reason": 1
}Combat
Kills, damage, flashes and grenades.
player_death
Sent when a player dies. Rejected when the assister has the steam_id of the victim or the attacker.
type"player_death"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
victimPlacedPlayerThe player who died.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
attackerPlayerAt| nullThe player credited with the kill. Null when no player dealt it.
For a grenade kill, the position is where the thrower was at the death. The
grenade_throwgives where they threw from.PlayerAtA
PlayerRefwith the position of the player when the event happened.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPosition| nullWhere the player stood and looked. Null when the player had no body in the world.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
assisterPlayerRef| nullThe player credited with the assist. Null when there is none.
PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
weaponWeaponThe killing weapon.
WeaponA weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when
idis a number andfallbackis not null.idinteger 1–65535 | nullThe item definition index, a 16-bit unsigned integer. Null when the item has none.
fallbackstring | nullThe engine class name of an item without an index. Null when
idis set, or when the engine named no weapon either.string
Must match
^[A-Za-z0-9_]{1,64}$
causeDamageCauseWhat caused the death.
DamageCauseWhat caused damage or a death.
string enum
"player"another player dealt it, with a weapon or a grenade.
"bomb"the planted bomb exploded.
"fall"the victim fell.
"self"the victim's own grenade or fire.
"disconnect"the victim left the server, which kills a living player.
"other"anything else, such as a map's damage trigger or the plugin moving a player to the spectators.
headshotbooleanWhether the killing hit was to the head.
penetratedinteger 0–10Surfaces that the bullet went through. The bound is a margin, not a measured engine limit.
thru_smokebooleanWhether the killing shot passed through smoke.
no_scopebooleanWhether the attacker fired a scoped weapon unscoped.
attacker_blindbooleanWhether the attacker was flashed.
attacker_in_airbooleanWhether the attacker was airborne.
flash_assistbooleanWhether the assist came from a flashbang.
friendly_firebooleanWhether the attacker and the victim are on the same roster team, a team kill.
victim_blind_byPlayerRef| nullThe player who last blinded the victim, through a
player_blindstill running at the death. Null when the victim could see.victim_blind_remaininggives the seconds of that blind left. When the attacker is the blinder, the kill is a self-flash kill. The consumer decides how much blind must remain for that to count.PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
victim_blind_remainingnumber 0–10Seconds left of the blind from
victim_blind_by. Zero when the victim could see.victim_equipment_valueinteger 0–65535Dollars of equipment that the victim carried when the killing blow landed, the engine's figure.
victim_grenades_heldInventoryItem[], ≤ 64 items | nullGrenades still in the victim's inventory when the killing blow landed. The C4 and the knife are not grenades. Two flashbangs show as a
quantityof 2, andunit_valueis the price per grenade.An empty array means that the victim held none. Null when the plugin could not read the inventory from before the damage.
InventoryItemOne kind of item that a player holds: the engine's item definition index as
weapon, a quantity, and the unit price in this game build.weaponinteger 1–65535The engine's item definition index.
quantityinteger 1–20Items of this kind that the player holds, up to ten times the stock limit of 2 flashbangs.
unit_valueinteger 0–52000Dollars that one item costs, up to ten times the dearest stock item, the M249 at 5,200.
Example
{
"type": "player_death",
"timestamp": 1700000260000,
"tick": 113900,
"round": 2,
"round_time": 45.5,
"victim": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -1200.5,
"y": 350,
"z": -160,
"pitch": 2.5,
"yaw": 180
}
},
"attacker": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -400,
"y": 330.25,
"z": -160,
"pitch": 1,
"yaw": 178.5
}
},
"assister": null,
"weapon": {
"id": 16,
"fallback": null
},
"cause": "player",
"headshot": true,
"penetrated": 0,
"thru_smoke": false,
"no_scope": false,
"attacker_blind": false,
"attacker_in_air": false,
"flash_assist": false,
"friendly_fire": false,
"victim_blind_by": null,
"victim_blind_remaining": 0,
"victim_equipment_value": 3700,
"victim_grenades_held": [
{
"weapon": 43,
"quantity": 2,
"unit_value": 200
}
]
}player_hurt
Sent when a player takes damage. Rejected when health_before is a number and health_after is above it.
type"player_hurt"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
victimPlacedPlayerThe player hit.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
attackerPlayerAt| nullThe player who dealt the damage. Null for world damage.
For grenade damage, the position is where the thrower was at the hit. The
grenade_throwgives where they threw from.PlayerAtA
PlayerRefwith the position of the player when the event happened.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPosition| nullWhere the player stood and looked. Null when the player had no body in the world.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
weaponWeaponWhat dealt the damage.
WeaponA weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when
idis a number andfallbackis not null.idinteger 1–65535 | nullThe item definition index, a 16-bit unsigned integer. Null when the item has none.
fallbackstring | nullThe engine class name of an item without an index. Null when
idis set, or when the engine named no weapon either.string
Must match
^[A-Za-z0-9_]{1,64}$
causeDamageCauseWhat caused the damage.
DamageCauseWhat caused damage or a death.
string enum
"player"another player dealt it, with a weapon or a grenade.
"bomb"the planted bomb exploded.
"fall"the victim fell.
"self"the victim's own grenade or fire.
"disconnect"the victim left the server, which kills a living player.
"other"anything else, such as a map's damage trigger or the plugin moving a player to the spectators.
dmg_healthinteger 0–1000Health damage as the engine reports it, overkill included.
health_beforeandhealth_aftergive the health that the victim actually lost.health_beforeinteger 0–1000 | nullThe victim's health before the hit, as the engine reports it. Null when the plugin could not read it.
health_afterinteger 0–1000The victim's health after the hit, at most
health_before.dmg_armorinteger 0–1000Armor damage.
hitgroupinteger 0–15The engine's hit group,
HitGroup_tin the Source 2 SDK. The plugin sends the engine's invalid group as0, and9is unused.0: generic.1: head.2: chest.3: stomach.4: left arm.5: right arm.6: left leg.7: right leg.8: neck.10: gear, the backpack hitbox.
friendly_firebooleanWhether the attacker and the victim are on the same roster team.
projectile_impactbooleanWhether the grenade itself struck the player before it detonated. Such a hit counts as damage and is stored as a hit, but not as utility damage, which matches the in-game scoreboard.
grenade_idGrenadeId| nullThe grenade that dealt the damage, as its
grenade_throwidentifies it. Null for anything else.GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
Example
{
"type": "player_hurt",
"timestamp": 1700000260000,
"tick": 113900,
"round": 2,
"round_time": 45.5,
"victim": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -1200.5,
"y": 350,
"z": -160,
"pitch": 2.5,
"yaw": 180
}
},
"attacker": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -400,
"y": 330.25,
"z": -160,
"pitch": 1,
"yaw": 178.5
}
},
"weapon": {
"id": 16,
"fallback": null
},
"cause": "player",
"dmg_health": 100,
"dmg_armor": 0,
"health_before": 100,
"health_after": 0,
"hitgroup": 1,
"friendly_fire": false,
"projectile_impact": false,
"grenade_id": null
}player_blind
Sent when a flashbang blinds a player.
type"player_blind"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
victimPlacedPlayerThe player blinded.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
attackerPlayerAtThe player who threw the flashbang, placed where they were when it went off. The
grenade_throwgives where they threw from.PlayerAtA
PlayerRefwith the position of the player when the event happened.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPosition| nullWhere the player stood and looked. Null when the player had no body in the world.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
durationnumber 0–10Seconds that the blind lasts.
friendly_firebooleanWhether the thrower and the victim are on the same roster team.
grenade_idGrenadeId| nullThe flashbang, as its
grenade_throwidentifies it. Null when the plugin did not see it thrown.GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
Example
{
"type": "player_blind",
"timestamp": 1700000250000,
"tick": 113260,
"round": 2,
"round_time": 36.1,
"victim": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -1150,
"y": 345.5,
"z": -160,
"pitch": 0,
"yaw": -5
}
},
"attacker": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -380,
"y": 300,
"z": -160,
"pitch": -20,
"yaw": 175
}
},
"duration": 2.4,
"friendly_fire": false,
"grenade_id": 3
}grenade_throw
Sent when a grenade leaves a player's hand. Its grenade_id identifies the grenade in the events that follow: its grenade_detonate and grenade_end, and the player_hurt and player_blind that it causes.
type"grenade_throw"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
grenade_idGrenadeIdThe grenade's id, unique within the server.
GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
playerPlacedPlayerThe player who threw the grenade, placed where they stood when the projectile spawned.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
grenadeGrenadeKindThe kind of grenade thrown.
GrenadeKindThe engine class name of a grenade.
string enum
"flashbang""hegrenade""smokegrenade""molotov""incgrenade""decoy"
Example
{
"type": "grenade_throw",
"timestamp": 1700000248400,
"tick": 113200,
"round": 2,
"round_time": 34.5,
"grenade_id": 3,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -380,
"y": 300,
"z": -160,
"pitch": -20,
"yaw": 175
}
},
"grenade": "flashbang"
}grenade_detonate
Sent when a grenade detonates or a fire grenade lights. A grenade that is removed before then sends none.
type"grenade_detonate"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
grenade_idGrenadeIdThe grenade, as its
grenade_throwidentifies it.GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
playerPlayerRefThe player who threw the grenade, as its
grenade_throwsaw them.PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
detonate_posWorldPos| nullWhere the engine reported the detonation. Null for a fire that lit without reporting one.
WorldPosA point in the world, in engine units.
xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
Example
{
"type": "grenade_detonate",
"timestamp": 1700000250000,
"tick": 113260,
"round": 2,
"round_time": 36.1,
"grenade_id": 3,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"detonate_pos": {
"x": -900,
"y": 340,
"z": -60
}
}grenade_end
Sent when the effect of a grenade is over, because its last entity was removed or the round closed or reset on it. Every grenade that sent a grenade_throw sends one before the round_complete of its round. A grenade whose round a restore cut off sends none; the match_restored replaces that round.
type"grenade_end"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the grenade was thrown in.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
grenade_idGrenadeIdThe grenade, as its
grenade_throwidentifies it.GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
playerPlayerRefThe player who threw the grenade, as its
grenade_throwsaw them.PlayerRefA player as the event saw them.
steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12
end_round_timenumber 0–4000Seconds since the round started, at the moment the effect ended. A fire ends when it goes out. When the round closed on the grenade, the value is the round length plus the restart delay, which is when the engine clears the entities.
fire_endFireEnd| nullHow the fire ended. Null for a grenade that was not a fire, and for a fire projectile removed before it lit.
FireEndHow a fire ended.
string enum
"expired"the fire burned out, or the round closed on it.
"extinguished"a smoke put the fire out.
"smothered"the fire grenade landed inside a smoke.
extinguished_byGrenadeId| nullThe smoke whose cloud put this fire out, credited to the nearest live smoke. Null when no smoke put the fire out.
GrenadeIdThe zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.
integer 0–1000000
Example
{
"type": "grenade_end",
"timestamp": 1700000250000,
"tick": 113260,
"round": 2,
"grenade_id": 3,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1
},
"end_round_time": 36.1,
"fire_end": null,
"extinguished_by": null
}Bomb
Plants, defuses and explosions.
bomb_begin_plant
Sent when a player begins to plant the bomb.
type"bomb_begin_plant"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player planting.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
site"a"|"b"| nullThe bombsite. Null when the engine's target index did not resolve to a
func_bomb_target.
Example
{
"type": "bomb_begin_plant",
"timestamp": 1700000270000,
"tick": 114540,
"round": 3,
"round_time": 55.5,
"player": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -2100,
"y": 820,
"z": -125,
"pitch": 35,
"yaw": 90
}
},
"site": "a"
}bomb_abort_plant
Sent when a player abandons a plant.
type"bomb_abort_plant"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player who stopped planting.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
site"a"|"b"| nullThe bombsite. Null when the engine's target index did not resolve to a
func_bomb_target.
Example
{
"type": "bomb_abort_plant",
"timestamp": 1700000271000,
"tick": 114604,
"round": 3,
"round_time": 56.5,
"player": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -2100,
"y": 820,
"z": -125,
"pitch": 10,
"yaw": 40
}
},
"site": "a"
}bomb_planted
Sent when the bomb is planted.
type"bomb_planted"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player who planted.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
site"a"|"b"| nullThe bombsite. Null when the engine's target index did not resolve to a
func_bomb_target.
Example
{
"type": "bomb_planted",
"timestamp": 1700000276000,
"tick": 114924,
"round": 3,
"round_time": 61.5,
"player": {
"steam_id": "76561198000000002",
"name": "bravo",
"side": "t",
"team": 2,
"position": {
"x": -2100,
"y": 820,
"z": -125,
"pitch": 35,
"yaw": 90
}
},
"site": "a"
}bomb_begin_defuse
Sent when a player begins to defuse the bomb.
type"bomb_begin_defuse"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player defusing.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
has_kitbooleanWhether the defuser has a kit.
Example
{
"type": "bomb_begin_defuse",
"timestamp": 1700000290000,
"tick": 115820,
"round": 3,
"round_time": 75.5,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -2080,
"y": 860,
"z": -125,
"pitch": 40,
"yaw": -90
}
},
"has_kit": true
}bomb_abort_defuse
Sent when a player abandons a defuse.
type"bomb_abort_defuse"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player who stopped defusing.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
Example
{
"type": "bomb_abort_defuse",
"timestamp": 1700000291000,
"tick": 115884,
"round": 3,
"round_time": 76.5,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -2080,
"y": 860,
"z": -125,
"pitch": 40,
"yaw": -90
}
}
}bomb_defused
Sent when the bomb is defused.
type"bomb_defused"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
playerPlacedPlayerThe player who defused.
PlacedPlayerA
PlayerRefwith the position of the player, for a player who acted in the world when the event happened, so the position is always known.steam_idSteamId64The player's SteamID64.
namePlayerNameThe player's name when the event happened.
PlayerNameA player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.
string ≤ 64 chars
Must match
^[^\p{Cc}]*$sideSideThe side that the player was on.
SideThe side a player is on.
string enum
"t"terrorists, a playing side.
"ct"counter-terrorists, a playing side.
"spec"spectators and players on no team.
teamTeamNumber| nullThe roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.
TeamNumberA team of the
Roster, team 1 or team 2, whichever side it plays.One of 2:
12positionPlayerPositionWhere the player stood and looked.
PlayerPositionWhere a player stood, as a
WorldPos, and where the player looked.xnumber -32768–32768Engine units along the map's x axis.
ynumber -32768–32768Engine units along the map's y axis.
znumber -32768–32768Engine units along the map's z axis, the height.
pitchnumber -90–90Degrees of eye pitch. A positive pitch looks down.
yawnumber -360–360Degrees of eye yaw, counter-clockwise from the +x axis.
time_remainingnumber 0–90Seconds left on the bomb, up to 90, the most that
mp_c4timerallows.has_kitbooleanWhether the defuser has a kit.
Example
{
"type": "bomb_defused",
"timestamp": 1700000296000,
"tick": 116204,
"round": 3,
"round_time": 81.5,
"player": {
"steam_id": "76561198000000001",
"name": "alpha",
"side": "ct",
"team": 1,
"position": {
"x": -2080,
"y": 860,
"z": -125,
"pitch": 40,
"yaw": -90
}
},
"time_remaining": 20,
"has_kit": true
}bomb_exploded
Sent when the bomb explodes.
type"bomb_exploded"timestampinteger 1577836800000–4102444800000Unix milliseconds on the server's wall clock.
ticknumber ≥ 0The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.
The plugin sends events as they happen, so
seqfollows the same order.round_shotsis the exception, because the plugin sends it when the round closes, and theticksof each weapon place each shot.roundRoundNumberThe round that the event happened in, even when the event arrives later.
RoundNumberA one-based round number. A map's history holds far fewer than the 1000 it allows.
integer 1–1000
round_timenumber 0–4000Seconds since the round started.
Example
{
"type": "bomb_exploded",
"timestamp": 1700000316000,
"tick": 117484,
"round": 4,
"round_time": 101.5
}