GameEvent
Game events the client receives — hook them with callbacks.FireGameEvent.
GameEvent
ev:IsValid():boolean
Whether the event is valid.
ev:GetName():string
Event name string.
ev:GetInt(key:string):number
Read an int field.
ev:GetFloat(key:string):number
Read a float field.
ev:GetString(key:string):string
Read a string field.
ev:GetBool(key:string):boolean
Read a bool field.
ev:SetInt(key:string, value:number)
Write an int field.
ev:SetFloat(key:string, value:number)
Write a float field.
ev:SetString(key:string, value:string)
Write a string field.
ev:SetBool(key:string, value:boolean)
Write a bool field.
Receivable game events
Every event the client's event manager is registered for — delivered to callbacks.Register("FireGameEvent", fn). Filter with ev:GetName().
Combat & damage
player_hurtplayer_deathnpc_hurtdamage_resistedplayer_healonhitplayer_healedmedic_deathplayer_chargedeployedkilled_ball_carrierteam_leader_killedbuilding_healedarrow_impactrocket_jumprocket_jump_landedsticky_jumpsticky_jump_landed
Round / game flow
round_startteamplay_round_startteamplay_round_activeteamplay_round_stalemateteamplay_round_winteamplay_game_overtf_game_overteamplay_win_panelarena_round_startarena_win_panelarena_match_maxstreakarena_player_notificationpve_win_panelcompetitive_victorycompetitive_state_changedcompetitive_stats_updatetournament_stateupdateplayer_abandoned_matchrematch_failed_to_createshow_match_summaryrestart_timer_timeovertime_nagwinlimit_changedteams_changedteamplay_setup_finishedteamplay_waiting_beginsteamplay_waiting_endsteamplay_waiting_abouttoendteamplay_timer_time_addedteamplay_update_timerteamplay_alertteamplay_broadcast_audioteamplay_teambalanced_playerbegin_xp_lerpexperience_changedduck_xp_level_upspecial_scoreplayer_bonuspointsplayer_escort_scoreplayer_score_changedplayer_account_changed
Control points & payload
teamplay_point_capturedteamplay_point_unlockedteamplay_capture_blockedcontrolpoint_endtouchcontrolpoint_starttouchcontrolpoint_fake_capturecontrolpoint_fake_capture_multcontrolpoint_initializedcontrolpoint_pulse_elementcontrolpoint_updatecappingcontrolpoint_updateimagescontrolpoint_updatelayoutcontrolpoint_updateownercart_updatedescort_progressescort_recedeescort_speed
Flags (CTF)
ctf_flag_capturedteamplay_flag_eventflagstatus_update
Buildings & objects
object_destroyedobject_detonatedobject_removedplayer_builtobjectlocalplayer_builtobjectplayer_carryobjectplayer_dropobjectplayer_sapped_objectbuilding_info_changedbreak_breakablebreak_propspy_pda_reset
Player lifecycle
player_spawnplayer_initial_spawnplayer_connectplayer_connect_clientplayer_disconnectplayer_activateplayer_teamplayer_changeclassplayer_changenamelocalplayer_respawnlocalplayer_changeclasslocalplayer_changeteamlocalplayer_changedisguiseplayer_teleportedbase_player_teleportedplayer_used_powerup_bottlerevive_player_notifyrevive_player_stoppedplayer_hintmessageplayer_buybackplaying_commentary
Movement / jumps / rocket pack
rocketpack_launchrocketpack_landedplayer_highfive_startplayer_highfive_cancelplayer_highfive_success
Items / inventory / economy
item_foundinventory_updatedpost_inventory_applicationlocalplayer_pickup_weaponplayer_upgradedplayer_currency_changedecon_inventory_connectedstore_pricesheet_updateditem_schema_initializedschema_updatedupgrades_file_changedquest_objective_completedachievement_earnedachievement_event
MvM (Mann vs Machine)
mvm_begin_wavemvm_wave_completemvm_mission_updatemvm_reset_statsmvm_sentrybuster_detonate
Bosses & special events
merasmus_summonedmerasmus_escapedmerasmus_escape_warningmerasmus_killedeyeball_boss_summonedeyeball_boss_killedeyeball_boss_killereyeball_boss_escapedeyeball_boss_escape_imminenteyeball_boss_stunnedpumpkin_lord_summonedpumpkin_lord_killedfish_noticefish_notice__armslap_noticeentered_performance_modeintro_finishintro_nextcamera
Pass / Robot destruction (tc/rd modes)
pass_getpass_freepass_pass_caughtpass_ball_stolenpass_ball_blockedpass_scorerd_robot_killedrd_rules_state_changedrd_team_points_changed
Party / matchmaking / voting
party_updatedparty_chatparty_criteria_changedparty_invites_changedparty_queue_state_changedlobby_updatedmatch_invites_updatedgc_new_sessionplayer_next_map_vote_changevote_castvote_changedvote_maps_changedvote_optionsrecalculate_holidaysrecalculate_trucestop_watch_changed
HUD / UI / camera / freezecam
gameui_activategameui_activatedgameui_hidegameui_hiddenfreezecam_startedshow_freezepanelhide_freezepanelshow_annotationhide_annotationshow_class_layoutshow_vs_panelwinpanel_show_scoresspec_target_updatedcl_drawlinemainmenu_stabilizedds_screenshotds_stop
Replay / HLTV
browse_replaysreplay_startrecordreplay_endrecordreplay_savedreplay_replaysavailablereplay_servererrorreplay_youtube_statshltv_chathltv_messagehltv_statushltv_titlehltv_chasehltv_fixedhltv_cameramanhltv_changed_modehltv_changed_target
Server / connection / misc
game_newmapclient_beginconnectclient_disconnectserver_spawnserver_messageserver_cvarserver_addbanserver_removebanserver_shutdownserver_changelevel_failedworld_status_changedscorestats_accumulated_updatescorestats_accumulated_resettraining_completeuser_data_downloadedplayer_stats_updated
Examples
Damage dealt tracker
Uses round_start and player_hurt to log how much damage you deal per round.
local round = 0
local dealt = 0
callbacks.Register("FireGameEvent", function(ev)
local name = ev:GetName()
if name == "round_start" then
round = round + 1
dealt = 0
print(string.format("--- round %d started ---", round))
return
end
if name == "player_hurt" then
local attacker = engine.GetPlayerForUserID(ev:GetInt("attacker"))
if attacker == client.GetLocalPlayerIndex() then
dealt = dealt + ev:GetInt("damage")
print(string.format("dealt %d this round (total %d)", ev:GetInt("damage"), dealt))
end
end
end)