VERGELua API

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)