Team Fortress 2/Scripting/Game Events: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(Distinguished Clientside events based on the SDK 2013 Build of Team Fortress 2)
 
(One intermediate revision by one other user not shown)
Line 3: Line 3:
{{warning|Some events have parameter 'class' which cannot be accessed with dot syntax, i.e. <code>params.class</code>, as <code>class</code> is a reserved word in Squirrel. Instead, use string indexing like so: <code>params["class"]</code>}}
{{warning|Some events have parameter 'class' which cannot be accessed with dot syntax, i.e. <code>params.class</code>, as <code>class</code> is a reserved word in Squirrel. Instead, use string indexing like so: <code>params["class"]</code>}}
{{tip|To see what events fire during the game, download [https://raw.githubusercontent.com/ficool2/vscript_tf/refs/heads/main/scripts/vscripts/showevents.nut this script] (right click and ''Save Page''), place it into your <code>tf/scripts/vscripts/</code> folder and run <code>script_execute showevents</code> in console.}}
{{tip|To see what events fire during the game, download [https://raw.githubusercontent.com/ficool2/vscript_tf/refs/heads/main/scripts/vscripts/showevents.nut this script] (right click and ''Save Page''), place it into your <code>tf/scripts/vscripts/</code> folder and run <code>script_execute showevents</code> in console.}}
{{todo|Distinguish which events are clientside and/or serverside}}
{{todo|Check which events are shared (if possible?)}}


== achievement_earned ==
== Serverside ==
==== achievement_earned ====
* <b>player</b> <small>(byte)</small> - entindex of the player
* <b>player</b> <small>(byte)</small> - entindex of the player
* <b>achievement</b> <small>(short)</small> - achievement ID
* <b>achievement</b> <small>(short)</small> - achievement ID


== achievement_earned_local ==
=== achievement_event ===
* <b>achievement</b> <small>(short)</small>
 
== achievement_event ==
* <b>achievement_name</b> <small>(string)</small> - non-localized name of achievement
* <b>achievement_name</b> <small>(string)</small> - non-localized name of achievement
* <b>cur_val</b> <small>(short)</small> - # of steps toward achievement
* <b>cur_val</b> <small>(short)</small> - # of steps toward achievement
* <b>max_val</b> <small>(short)</small> - total # of steps in achievement
* <b>max_val</b> <small>(short)</small> - total # of steps in achievement


== achievement_increment ==
=== achievement_increment ===
* <b>achievement_id</b> <small>(long)</small> - ID of achievement that went up
* <b>achievement_id</b> <small>(long)</small> - ID of achievement that went up
* <b>cur_val</b> <small>(short)</small> - # of steps toward achievement
* <b>cur_val</b> <small>(short)</small> - # of steps toward achievement
* <b>max_val</b> <small>(short)</small> - total # of steps in achievement
* <b>max_val</b> <small>(short)</small> - total # of steps in achievement


== air_dash ==
=== ammo_pickup ===
* <b>player</b> <small>(byte)</small>
 
== ammo_pickup ==
* <b>ammo_index</b> <small>(long)</small>
* <b>ammo_index</b> <small>(long)</small>
* <b>amount</b> <small>(long)</small>
* <b>amount</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>


== arena_match_maxstreak ==
=== arena_match_maxstreak ===
* <b>team</b> <small>(byte)</small>
* <b>team</b> <small>(byte)</small>
* <b>streak</b> <small>(byte)</small>
* <b>streak</b> <small>(byte)</small>


== arena_player_notification ==
=== arena_round_start ===
* <b>player</b> <small>(byte)</small>
* <b>message</b> <small>(byte)</small>
 
== arena_round_start ==
called when round is active, players can move
called when round is active, players can move


== arena_win_panel ==
=== arena_win_panel ===
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>winning_team</b> <small>(byte)</small>
* <b>winning_team</b> <small>(byte)</small>
Line 83: Line 74:
* <b>player_6_kills</b> <small>(short)</small>
* <b>player_6_kills</b> <small>(short)</small>


== arrow_impact ==
=== arrow_impact ===
* <b>attachedEntity</b> <small>(short)</small>
* <b>attachedEntity</b> <small>(short)</small>
* <b>shooter</b> <small>(short)</small>
* <b>shooter</b> <small>(short)</small>
Line 96: Line 87:
* <b>isCrit</b> <small>(bool)</small>
* <b>isCrit</b> <small>(bool)</small>


== base_player_teleported ==
=== bonus_updated ===
* <b>entindex</b> <small>(short)</small>
 
== bonus_updated ==
* <b>numadvanced</b> <small>(short)</small>
* <b>numadvanced</b> <small>(short)</small>
* <b>numbronze</b> <small>(short)</small>
* <b>numbronze</b> <small>(short)</small>
Line 105: Line 93:
* <b>numgold</b> <small>(short)</small>
* <b>numgold</b> <small>(short)</small>


== break_breakable ==
=== break_breakable ===
* <b>entindex</b> <small>(long)</small>
* <b>entindex</b> <small>(long)</small>
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>material</b> <small>(byte)</small> - BREAK_GLASS, BREAK_WOOD, etc
* <b>material</b> <small>(byte)</small> - BREAK_GLASS, BREAK_WOOD, etc


== break_prop ==
=== break_prop ===
* <b>entindex</b> <small>(long)</small>
* <b>entindex</b> <small>(long)</small>
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== browse_replays ==
=== building_healed ===
 
== building_healed ==
* <b>building</b> <small>(short)</small>
* <b>building</b> <small>(short)</small>
* <b>healer</b> <small>(short)</small>
* <b>healer</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>


== building_info_changed ==
=== christmas_gift_grab ===
* <b>building_type</b> <small>(byte)</small>
* <b>object_mode</b> <small>(byte)</small>
* <b>remove</b> <small>(byte)</small>
 
== cart_updated ==
 
== christmas_gift_grab ==
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== cl_drawline ==
=== cl_drawline ===
* <b>player</b> <small>(byte)</small> - index of the player
* <b>player</b> <small>(byte)</small> - index of the player
* <b>panel</b> <small>(byte)</small> - type of panel
* <b>panel</b> <small>(byte)</small> - type of panel
Line 138: Line 117:
* <b>y</b> <small>(float)</small>
* <b>y</b> <small>(float)</small>


== client_beginconnect ==
=== client_beginconnect ===
client tries to connect to server
client tries to connect to server
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
Line 145: Line 124:
* <b>source</b> <small>(string)</small> - what caused us to attempt this connection?  (blank for general command line, "serverbrowser", "quickplay", etc)
* <b>source</b> <small>(string)</small> - what caused us to attempt this connection?  (blank for general command line, "serverbrowser", "quickplay", etc)


== client_connected ==
=== client_connected ===
client has completed the challenge / handshake process and is in SIGNONSTATE_CONNECTED
client has completed the challenge / handshake process and is in SIGNONSTATE_CONNECTED
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
Line 151: Line 130:
* <b>port</b> <small>(short)</small> - server port
* <b>port</b> <small>(short)</small> - server port


== client_disconnect ==
=== client_disconnect ===
client side disconnect message
client side disconnect message
* <b>message</b> <small>(string)</small> - Why are we disconnecting?  This could be a localization token or an English-language string
* <b>message</b> <small>(string)</small> - Why are we disconnecting?  This could be a localization token or an English-language string


== client_fullconnect ==
=== client_fullconnect ===
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
* <b>address</b> <small>(string)</small> - Name we used to connect to the server
* <b>ip</b> <small>(long)</small>
* <b>ip</b> <small>(long)</small>
* <b>port</b> <small>(short)</small> - server port
* <b>port</b> <small>(short)</small> - server port


== competitive_stats_update ==
=== competitive_stats_update ===
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>kills_rank</b> <small>(byte)</small> - num std deviations above
* <b>kills_rank</b> <small>(byte)</small> - num std deviations above
Line 168: Line 147:
* <b>support_rank</b> <small>(byte)</small>
* <b>support_rank</b> <small>(byte)</small>


== competitive_victory ==
=== competitive_victory ===


== conga_kill ==
=== conga_kill ===
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>index</b> <small>(short)</small> - entindex of the player


== controlpoint_endtouch ==
=== controlpoint_endtouch ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>area</b> <small>(short)</small> - index of the control point area
* <b>area</b> <small>(short)</small> - index of the control point area


== controlpoint_fake_capture ==
=== controlpoint_fake_capture ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>int_data</b> <small>(short)</small>
* <b>int_data</b> <small>(short)</small>


== controlpoint_fake_capture_mult ==
=== controlpoint_fake_capture_mult ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>int_data</b> <small>(short)</small>
* <b>int_data</b> <small>(short)</small>


== controlpoint_initialized ==
=== controlpoint_pulse_element ===
 
== controlpoint_pulse_element ==
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== controlpoint_starttouch ==
=== controlpoint_starttouch ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>area</b> <small>(short)</small> - index of the control point area
* <b>area</b> <small>(short)</small> - index of the control point area


== controlpoint_timer_updated ==
=== controlpoint_updatecapping ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>time</b> <small>(float)</small> - time
 
== controlpoint_unlock_updated ==
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>time</b> <small>(float)</small> - time
 
== controlpoint_updatecapping ==
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>index</b> <small>(short)</small> - index of the cap being updated


== controlpoint_updateimages ==
=== controlpoint_updateimages ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>index</b> <small>(short)</small> - index of the cap being updated


== controlpoint_updatelayout ==
=== controlpoint_updatelayout ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>index</b> <small>(short)</small> - index of the cap being updated


== controlpoint_updateowner ==
=== controlpoint_updateowner ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>index</b> <small>(short)</small> - index of the cap being updated


== cross_spectral_bridge ==
=== cross_spectral_bridge ===
* <b>player</b> <small>(short)</small> - userid of the player that crossed
* <b>player</b> <small>(short)</small> - userid of the player that crossed


== crossbow_heal ==
=== crossbow_heal ===
* <b>healer</b> <small>(byte)</small> - userid of the Healer
* <b>healer</b> <small>(byte)</small> - userid of the Healer
* <b>target</b> <small>(byte)</small> - userid of the player that got hit
* <b>target</b> <small>(byte)</small> - userid of the player that got hit
* <b>amount</b> <small>(short)</small> - amount that was healed
* <b>amount</b> <small>(short)</small> - amount that was healed


== ctf_flag_captured ==
=== ctf_flag_captured ===
* <b>capping_team</b> <small>(short)</small>
* <b>capping_team</b> <small>(short)</small>
* <b>capping_team_score</b> <small>(short)</small>
* <b>capping_team_score</b> <small>(short)</small>


== damage_mitigated ==
=== damage_mitigated ===
* <b>mitigator</b> <small>(byte)</small> - userid of the player who provided the mitigation
* <b>mitigator</b> <small>(byte)</small> - userid of the player who provided the mitigation
* <b>damaged</b> <small>(byte)</small> - userid of the player who took the damage
* <b>damaged</b> <small>(byte)</small> - userid of the player who took the damage
Line 232: Line 201:
* <b>itemdefindex</b> <small>(short)</small> - defindex of the item that provided the mitigation
* <b>itemdefindex</b> <small>(short)</small> - defindex of the item that provided the mitigation


== damage_prevented ==
=== damage_prevented ===
* <b>preventor</b> <small>(short)</small> - Who prevented the damage
* <b>preventor</b> <small>(short)</small> - Who prevented the damage
* <b>victim</b> <small>(short)</small> - Who took the damage that was prevented
* <b>victim</b> <small>(short)</small> - Who took the damage that was prevented
Line 238: Line 207:
* <b>condition</b> <small>(short)</small> - Which condition did the preventing
* <b>condition</b> <small>(short)</small> - Which condition did the preventing


== damage_resisted ==
=== damage_resisted ===
* <b>entindex</b> <small>(byte)</small>
* <b>entindex</b> <small>(byte)</small>


== deadringer_cheat_death ==
=== deadringer_cheat_death ===
* <b>spy</b> <small>(byte)</small> - userid of the Spy that cheat the death
* <b>spy</b> <small>(byte)</small> - userid of the Spy that cheat the death
* <b>attacker</b> <small>(byte)</small> - userid of the player that caused the cheat death to happen
* <b>attacker</b> <small>(byte)</small> - userid of the player that caused the cheat death to happen


== demoman_det_stickies ==
=== demoman_det_stickies ===
* <b>player</b> <small>(short)</small> - entindex of the detonating player
* <b>player</b> <small>(short)</small> - entindex of the detonating player


== deploy_buff_banner ==
=== deploy_buff_banner ===
* <b>buff_type</b> <small>(byte)</small> - type of buff (skin index)
* <b>buff_type</b> <small>(byte)</small> - type of buff (skin index)
* <b>buff_owner</b> <small>(short)</small> - user ID of the person who gets the banner
* <b>buff_owner</b> <small>(short)</small> - user ID of the person who gets the banner


== doomsday_rocket_open ==
=== doomsday_rocket_open ===
* <b>team</b> <small>(byte)</small> - which team opened the rocket
* <b>team</b> <small>(byte)</small> - which team opened the rocket


== duck_xp_level_up ==
=== duel_status ===
* <b>level</b> <small>(short)</small> - leveled up to what
 
== duel_status ==
* <b>killer</b> <small>(short)</small>
* <b>killer</b> <small>(short)</small>
* <b>score_type</b> <small>(short)</small>
* <b>score_type</b> <small>(short)</small>
Line 266: Line 232:
* <b>target_score</b> <small>(short)</small>
* <b>target_score</b> <small>(short)</small>


== econ_inventory_connected ==
=== enter_vehicle ===
 
== enter_vehicle ==
* <b>vehicle</b> <small>(long)</small> - entindex of the vehicle
* <b>vehicle</b> <small>(long)</small> - entindex of the vehicle


== entered_performance_mode ==
=== entity_killed ===
 
== entity_killed ==
* <b>entindex_killed</b> <small>(long)</small>
* <b>entindex_killed</b> <small>(long)</small>
* <b>entindex_attacker</b> <small>(long)</small>
* <b>entindex_attacker</b> <small>(long)</small>
Line 279: Line 241:
* <b>damagebits</b> <small>(long)</small>
* <b>damagebits</b> <small>(long)</small>


== environmental_death ==
=== environmental_death ===
* <b>killer</b> <small>(byte)</small> - index of the killer
* <b>killer</b> <small>(byte)</small> - index of the killer
* <b>victim</b> <small>(byte)</small> - index of the victim
* <b>victim</b> <small>(byte)</small> - index of the victim


== escape_hell ==
=== escape_hell ===
* <b>player</b> <small>(short)</small> - userid of the player that escaped
* <b>player</b> <small>(short)</small> - userid of the player that escaped


== escaped_loot_island ==
=== escaped_loot_island ===
* <b>player</b> <small>(short)</small> - userid of the escaping player
* <b>player</b> <small>(short)</small> - userid of the escaping player


== escort_progress ==
=== eyeball_boss_escape_imminent ===
* <b>team</b> <small>(byte)</small> - which team
* <b>progress</b> <small>(float)</small>
* <b>reset</b> <small>(bool)</small>
 
== escort_recede ==
* <b>team</b> <small>(byte)</small> - which team
* <b>recedetime</b> <small>(float)</small>
 
== escort_speed ==
* <b>team</b> <small>(byte)</small> - which team
* <b>speed</b> <small>(byte)</small>
* <b>players</b> <small>(byte)</small>
 
== eyeball_boss_escape_imminent ==
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>
* <b>time_remaining</b> <small>(byte)</small>
* <b>time_remaining</b> <small>(byte)</small>


== eyeball_boss_escaped ==
=== eyeball_boss_escaped ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== eyeball_boss_killed ==
=== eyeball_boss_killed ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== eyeball_boss_killer ==
=== eyeball_boss_killer ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>
* <b>player_entindex</b> <small>(byte)</small>
* <b>player_entindex</b> <small>(byte)</small>


== eyeball_boss_stunned ==
=== eyeball_boss_stunned ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>
* <b>player_entindex</b> <small>(byte)</small>
* <b>player_entindex</b> <small>(byte)</small>


== eyeball_boss_summoned ==
=== eyeball_boss_summoned ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== fish_notice ==
=== fish_notice ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>victim_entindex</b> <small>(long)</small>
* <b>victim_entindex</b> <small>(long)</small>
Line 340: Line 288:
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1


== fish_notice__arm ==
=== fish_notice__arm ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>victim_entindex</b> <small>(long)</small>
* <b>victim_entindex</b> <small>(long)</small>
Line 356: Line 304:
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1


== flag_carried_in_detection_zone ==
=== flag_carried_in_detection_zone ===
 
== flagstatus_update ==
* <b>userid</b> <small>(short)</small> - user ID of the player who now has the flag
* <b>entindex</b> <small>(long)</small> - ent index of flag


== flare_ignite_npc ==
=== flare_ignite_npc ===
* <b>entindex</b> <small>(long)</small> - entity ignited
* <b>entindex</b> <small>(long)</small> - entity ignited


== freezecam_started ==


== game_end ==
=== game_end ===
a game ended
a game ended
* <b>winner</b> <small>(byte)</small> - winner team/user id
* <b>winner</b> <small>(byte)</small> - winner team/user id


== game_init ==
=== game_init ===
sent when a new game is started
sent when a new game is started


== game_message ==
=== game_message ===
a message send by game logic to everyone
a message send by game logic to everyone
* <b>target</b> <small>(byte)</small> - 0 = console, 1 = HUD
* <b>target</b> <small>(byte)</small> - 0 = console, 1 = HUD
* <b>text</b> <small>(string)</small> - the message text
* <b>text</b> <small>(string)</small> - the message text


== game_newmap ==
=== game_start ===
send when new map is completely loaded
* <b>mapname</b> <small>(string)</small> - map name
 
== game_start ==
a new game starts
a new game starts
* <b>roundslimit</b> <small>(long)</small> - max round
* <b>roundslimit</b> <small>(long)</small> - max round
Line 390: Line 329:
* <b>objective</b> <small>(string)</small> - round objective
* <b>objective</b> <small>(string)</small> - round objective


== gameui_activate ==
=== gameui_activate ===
 
== gameui_activated ==
 
== gameui_hidden ==
 
== gameui_hide ==


== gc_lost_session ==
=== gameui_hide ===


== gc_new_session ==
=== halloween_boss_killed ===
 
== halloween_boss_killed ==
* <b>boss</b> <small>(short)</small> - 1=HHH 2=Monoculus 3=Merasmus
* <b>boss</b> <small>(short)</small> - 1=HHH 2=Monoculus 3=Merasmus
* <b>killer</b> <small>(short)</small> - userid of the killing player
* <b>killer</b> <small>(short)</small> - userid of the killing player


== halloween_duck_collected ==
=== halloween_duck_collected ===
* <b>collector</b> <small>(short)</small> - userid of the collecting player
* <b>collector</b> <small>(short)</small> - userid of the collecting player


== halloween_pumpkin_grab ==
=== halloween_pumpkin_grab ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== halloween_skeleton_killed ==
=== halloween_skeleton_killed ===
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton


== halloween_soul_collected ==
=== halloween_soul_collected ===
* <b>intended_target</b> <small>(byte)</small> - userid of the intended target
* <b>intended_target</b> <small>(byte)</small> - userid of the intended target
* <b>collecting_player</b> <small>(byte)</small> - userid of the player who picked up the soul
* <b>collecting_player</b> <small>(byte)</small> - userid of the player who picked up the soul
* <b>soul_count</b> <small>(byte)</small> - number of souls collected (gift boxes)
* <b>soul_count</b> <small>(byte)</small> - number of souls collected (gift boxes)


== helicopter_grenade_punt_miss ==
=== helicopter_grenade_punt_miss ===


== hide_annotation ==
=== host_quit ===
* <b>id</b> <small>(long)</small>
 
== hide_freezepanel ==
 
== hltv_changed_mode ==
* <b>oldmode</b> <small>(short)</small>
* <b>newmode</b> <small>(short)</small>
* <b>obs_target</b> <small>(short)</small>


== hltv_changed_target ==
=== intro_finish ===
* <b>mode</b> <small>(short)</small>
* <b>old_target</b> <small>(short)</small>
* <b>obs_target</b> <small>(short)</small>
 
== host_quit ==
 
== intro_finish ==
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== intro_nextcamera ==
=== intro_nextcamera ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== inventory_updated ==
=== item_found ===
 
== item_found ==
* <b>player</b> <small>(byte)</small> - entindex of the player
* <b>player</b> <small>(byte)</small> - entindex of the player
* <b>quality</b> <small>(byte)</small> - quality of the item
* <b>quality</b> <small>(byte)</small> - quality of the item
Line 456: Line 370:
* <b>wear</b> <small>(float)</small>
* <b>wear</b> <small>(float)</small>


== item_pickup ==
=== item_pickup ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>item</b> <small>(string)</small>
* <b>item</b> <small>(string)</small>


== item_schema_initialized ==
=== item_schema_initialized ===


== items_acknowledged ==
=== kill_in_hell ===
* <b>blocker</b> <small>(short)</small> - entindex of the blocker
* <b>victim</b> <small>(short)</small> - entindex of the victim
 
== kill_in_hell ==
* <b>killer</b> <small>(short)</small> - userid of the killer
* <b>killer</b> <small>(short)</small> - userid of the killer
* <b>victim</b> <small>(short)</small> - userid of the victim
* <b>victim</b> <small>(short)</small> - userid of the victim


== kill_refills_meter ==
=== kill_refills_meter ===
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>index</b> <small>(short)</small> - entindex of the player


== killed_capping_player ==
=== killed_capping_player ===
* <b>cp</b> <small>(byte)</small> - index of the point
* <b>cp</b> <small>(byte)</small> - index of the point
* <b>killer</b> <small>(byte)</small> - index of the killer
* <b>killer</b> <small>(byte)</small> - index of the killer
Line 479: Line 389:
* <b>assister</b> <small>(byte)</small> - index of the assister
* <b>assister</b> <small>(byte)</small> - index of the assister


== landed ==
=== leave_vehicle ===
* <b>player</b> <small>(byte)</small>
 
== leave_vehicle ==
* <b>vehicle</b> <small>(long)</small> - entindex of the vehicle
* <b>vehicle</b> <small>(long)</small> - entindex of the vehicle


== lobby_updated ==
=== medic_death ===
 
== localplayer_becameobserver ==
 
== localplayer_builtobject ==
* <b>object</b> <small>(short)</small> - type of object built
* <b>object_mode</b> <small>(short)</small> - used for teleporters: entrance vs. exit
* <b>index</b> <small>(short)</small> - index of the object
 
== localplayer_changeclass ==
 
== localplayer_changedisguise ==
* <b>disguised</b> <small>(bool)</small>
 
== localplayer_changeteam ==
 
== localplayer_chargeready ==
local player has full medic charge
 
== localplayer_healed ==
* <b>amount</b> <small>(short)</small>
 
== localplayer_pickup_weapon ==
 
== localplayer_respawn ==
 
== localplayer_score_changed ==
* <b>score</b> <small>(short)</small>
 
== localplayer_winddown ==
local player minigun winddown
 
== mainmenu_stabilized ==
* <b>attacker</b> <small>(short)</small>
* <b>victim</b> <small>(short)</small>
* <b>assister</b> <small>(short)</small>
 
== match_invites_updated ==
 
== medic_death ==
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>attacker</b> <small>(short)</small> - user ID who killed
* <b>attacker</b> <small>(short)</small> - user ID who killed
Line 530: Line 398:
* <b>charged</b> <small>(bool)</small> - had a full ubercharge?
* <b>charged</b> <small>(bool)</small> - had a full ubercharge?


== medic_defended ==
=== medic_defended ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>medic</b> <small>(short)</small>
* <b>medic</b> <small>(short)</small>


== medigun_shield_blocked_damage ==
=== medigun_shield_blocked_damage ===
* <b>userid</b> <small>(short)</small> - user ID of the player using the shield
* <b>userid</b> <small>(short)</small> - user ID of the player using the shield
* <b>damage</b> <small>(float)</small> - damage that was blocked
* <b>damage</b> <small>(float)</small> - damage that was blocked


== merasmus_escape_warning ==
=== merasmus_escape_warning ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>
* <b>time_remaining</b> <small>(byte)</small>
* <b>time_remaining</b> <small>(byte)</small>


== merasmus_escaped ==
=== merasmus_escaped ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== merasmus_killed ==
=== merasmus_killed ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== merasmus_prop_found ==
=== merasmus_prop_found ===
* <b>player</b> <small>(short)</small> - userid of the player that found the prop Merasmus was hiding in
* <b>player</b> <small>(short)</small> - userid of the player that found the prop Merasmus was hiding in


== merasmus_stunned ==
=== merasmus_stunned ===
* <b>player</b> <small>(short)</small> - userid of the stunning player
* <b>player</b> <small>(short)</small> - userid of the stunning player


== merasmus_summoned ==
=== merasmus_summoned ===
* <b>level</b> <small>(short)</small>
* <b>level</b> <small>(short)</small>


== minigame_win ==
=== minigame_win ===
* <b>team</b> <small>(byte)</small> - which team won the minigame
* <b>team</b> <small>(byte)</small> - which team won the minigame
* <b>type</b> <small>(byte)</small> - what type of minigame was won
* <b>type</b> <small>(byte)</small> - what type of minigame was won


== minigame_won ==
=== minigame_won ===
* <b>player</b> <small>(short)</small> - userid of the winning player
* <b>player</b> <small>(short)</small> - userid of the winning player
* <b>game</b> <small>(short)</small> - index of the game
* <b>game</b> <small>(short)</small> - index of the game


== mvm_adv_wave_complete_no_gates ==
=== mvm_adv_wave_complete_no_gates ===
* <b>index</b> <small>(short)</small> - wave index
* <b>index</b> <small>(short)</small> - wave index


== mvm_adv_wave_killed_stun_radio ==
=== mvm_adv_wave_killed_stun_radio ===


== mvm_begin_wave ==
=== mvm_begin_wave ===
* <b>wave_index</b> <small>(short)</small>
* <b>wave_index</b> <small>(short)</small>
* <b>max_waves</b> <small>(short)</small>
* <b>max_waves</b> <small>(short)</small>
* <b>advanced</b> <small>(short)</small>
* <b>advanced</b> <small>(short)</small>


== mvm_bomb_alarm_triggered ==
=== mvm_bomb_alarm_triggered ===


== mvm_bomb_carrier_killed ==
=== mvm_bomb_carrier_killed ===
* <b>level</b> <small>(short)</small> - upgrade level of the carrier
* <b>level</b> <small>(short)</small> - upgrade level of the carrier


== mvm_bomb_deploy_reset_by_player ==
=== mvm_bomb_deploy_reset_by_player ===
* <b>player</b> <small>(short)</small>
* <b>player</b> <small>(short)</small>


== mvm_bomb_reset_by_player ==
=== mvm_bomb_reset_by_player ===
* <b>player</b> <small>(short)</small>
* <b>player</b> <small>(short)</small>


== mvm_creditbonus_all ==
=== mvm_creditbonus_all ===


== mvm_creditbonus_all_advanced ==
=== mvm_creditbonus_all_advanced ===


== mvm_creditbonus_wave ==
=== mvm_creditbonus_wave ===


== mvm_kill_robot_delivering_bomb ==
=== mvm_kill_robot_delivering_bomb ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== mvm_mannhattan_pit ==
=== mvm_mannhattan_pit ===


== mvm_medic_powerup_shared ==
=== mvm_medic_powerup_shared ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== mvm_mission_complete ==
=== mvm_mission_complete ===
* <b>mission</b> <small>(string)</small>
* <b>mission</b> <small>(string)</small>


== mvm_mission_update ==
=== mvm_mission_update ===
* <b>class</b> <small>(short)</small>
* <b>class</b> <small>(short)</small>
* <b>count</b> <small>(short)</small>
* <b>count</b> <small>(short)</small>


== mvm_pickup_currency ==
=== mvm_pickup_currency ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>currency</b> <small>(short)</small>
* <b>currency</b> <small>(short)</small>


== mvm_quick_sentry_upgrade ==
=== mvm_quick_sentry_upgrade ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== mvm_reset_stats ==
=== mvm_reset_stats ===


== mvm_scout_marked_for_death ==
=== mvm_scout_marked_for_death ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player


== mvm_sentrybuster_detonate ==
=== mvm_sentrybuster_detonate ===
* <b>player</b> <small>(short)</small> - entindex of the target player
* <b>player</b> <small>(short)</small> - entindex of the target player
* <b>det_x</b> <small>(float)</small> - origin of the sentry buster
* <b>det_x</b> <small>(float)</small> - origin of the sentry buster
Line 625: Line 493:
* <b>det_z</b> <small>(float)</small>
* <b>det_z</b> <small>(float)</small>


== mvm_sentrybuster_killed ==
=== mvm_sentrybuster_killed ===
* <b>sentry_buster</b> <small>(short)</small> - entindex
* <b>sentry_buster</b> <small>(short)</small> - entindex


== mvm_sniper_headshot_currency ==
=== mvm_sniper_headshot_currency ===
* <b>userid</b> <small>(short)</small> - user ID of the player
* <b>userid</b> <small>(short)</small> - user ID of the player
* <b>currency</b> <small>(short)</small> - currency collected
* <b>currency</b> <small>(short)</small> - currency collected


== mvm_tank_destroyed_by_players ==
=== mvm_tank_destroyed_by_players ===


== mvm_wave_complete ==
=== mvm_wave_complete ===
* <b>advanced</b> <small>(bool)</small> - is this an advanced popfile
* <b>advanced</b> <small>(bool)</small> - is this an advanced popfile


== mvm_wave_failed ==
=== mvm_wave_failed ===


== nav_blocked ==
=== nav_blocked ===
* <b>area</b> <small>(long)</small>
* <b>area</b> <small>(long)</small>
* <b>blocked</b> <small>(bool)</small>
* <b>blocked</b> <small>(bool)</small>


== npc_hurt ==
=== npc_hurt ===
Fired when an Engineer building ([[obj_sentrygun]], [[obj_dispenser]], [[obj_teleporter]]), [[base_boss]], MvM tank ([[tank_boss]]) or Halloween enemy ([[headless_hatman]], [[eyeball_boss]], [[merasmus]], [[tf_zombie]]) is damaged.
Fired when an Engineer building ([[obj_sentrygun]], [[obj_dispenser]], [[obj_teleporter]]), [[base_boss]], MvM tank ([[tank_boss]]) or Halloween enemy ([[headless_hatman]], [[eyeball_boss]], [[merasmus]], [[tf_zombie]]) is damaged.
* <b>entindex</b> <small>(short)</small>
* <b>entindex</b> <small>(short)</small>
Line 653: Line 521:
* <b>boss</b> <small>(short)</small> - 1=HHH 2=Monoculus 3=Merasmus
* <b>boss</b> <small>(short)</small> - 1=HHH 2=Monoculus 3=Merasmus


== num_cappers_changed ==
=== num_cappers_changed ===
* <b>index</b> <small>(short)</small> - index of the trigger
* <b>index</b> <small>(short)</small> - index of the trigger
* <b>count</b> <small>(byte)</small> - number of cappers (-1 for blocked)
* <b>count</b> <small>(byte)</small> - number of cappers (-1 for blocked)


== object_deflected ==
=== object_deflected ===
* <b>userid</b> <small>(short)</small> - player who deflected the object
* <b>userid</b> <small>(short)</small> - player who deflected the object
* <b>ownerid</b> <small>(short)</small> - owner of the object
* <b>ownerid</b> <small>(short)</small> - owner of the object
Line 663: Line 531:
* <b>object_entindex</b> <small>(short)</small> - entindex of the object that got deflected
* <b>object_entindex</b> <small>(short)</small> - entindex of the object that got deflected


== object_destroyed ==
=== object_destroyed ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>attacker</b> <small>(short)</small> - user ID who killed
* <b>attacker</b> <small>(short)</small> - user ID who killed
Line 674: Line 542:
* <b>team</b> <small>(short)</small> - building's team
* <b>team</b> <small>(short)</small> - building's team


== object_detonated ==
=== object_detonated ===
* <b>userid</b> <small>(short)</small> - user ID of the object owner
* <b>userid</b> <small>(short)</small> - user ID of the object owner
* <b>objecttype</b> <small>(short)</small> - type of object removed
* <b>objecttype</b> <small>(short)</small> - type of object removed
* <b>index</b> <small>(short)</small> - index of the object removed
* <b>index</b> <small>(short)</small> - index of the object removed


== object_removed ==
=== object_removed ===
* <b>userid</b> <small>(short)</small> - user ID of the object owner
* <b>userid</b> <small>(short)</small> - user ID of the object owner
* <b>objecttype</b> <small>(short)</small> - type of object removed
* <b>objecttype</b> <small>(short)</small> - type of object removed
* <b>index</b> <small>(short)</small> - index of the object removed
* <b>index</b> <small>(short)</small> - index of the object removed


== overtime_nag ==
=== overtime_nag ===


== parachute_deploy ==
=== pass_ball_blocked ===
* <b>index</b> <small>(short)</small> - entindex of the player
 
== parachute_holster ==
* <b>index</b> <small>(short)</small> - entindex of the player
 
== party_chat ==
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of user who said or did the thing.  May be
* <b>text</b> <small>(string)</small> - The message.  May have different meaning for some types
* <b>type</b> <small>(short)</small> - What sort of message?  ETFPartyChatType enum
 
== party_criteria_changed ==
 
== party_invites_changed ==
 
== party_member_join ==
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of joined
 
== party_member_leave ==
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of leaver
 
== party_pref_changed ==
 
== party_queue_state_changed ==
* <b>matchgroup</b> <small>(short)</small> - ETFMatchGroup
 
== party_updated ==
 
== pass_ball_blocked ==
* <b>owner</b> <small>(short)</small>
* <b>owner</b> <small>(short)</small>
* <b>blocker</b> <small>(short)</small>
* <b>blocker</b> <small>(short)</small>


== pass_ball_stolen ==
=== pass_ball_stolen ===
* <b>victim</b> <small>(short)</small>
* <b>victim</b> <small>(short)</small>
* <b>attacker</b> <small>(short)</small>
* <b>attacker</b> <small>(short)</small>


== pass_free ==
=== pass_free ===
* <b>owner</b> <small>(short)</small>
* <b>owner</b> <small>(short)</small>
* <b>attacker</b> <small>(short)</small>
* <b>attacker</b> <small>(short)</small>


== pass_get ==
=== pass_get ===
* <b>owner</b> <small>(short)</small>
* <b>owner</b> <small>(short)</small>
* <b>team</b> <small>(short)</small>
* <b>team</b> <small>(short)</small>


== pass_pass_caught ==
=== pass_pass_caught ===
* <b>passer</b> <small>(short)</small>
* <b>passer</b> <small>(short)</small>
* <b>catcher</b> <small>(short)</small>
* <b>catcher</b> <small>(short)</small>
Line 736: Line 576:
* <b>duration</b> <small>(float)</small>
* <b>duration</b> <small>(float)</small>


== pass_score ==
=== pass_score ===
* <b>scorer</b> <small>(short)</small>
* <b>scorer</b> <small>(short)</small>
* <b>assister</b> <small>(short)</small>
* <b>assister</b> <small>(short)</small>
* <b>points</b> <small>(byte)</small>
* <b>points</b> <small>(byte)</small>


== path_track_passed ==
=== path_track_passed ===
* <b>index</b> <small>(short)</small> - [[CHandle|entity handle]] of the node being passed (not the index!)
* <b>index</b> <small>(short)</small> - [[CHandle|entity handle]] of the node being passed (not the index!)
{{tip|To retrieve the entity index and therefore the script handle: <code>EntIndexToHScript(params.index & (Constants.Server.MAX_EDICTS - 1))</code>}}
{{tip|To retrieve the entity index and therefore the script handle: <code>EntIndexToHScript(params.index & (Constants.Server.MAX_EDICTS - 1))</code>}}


== payload_pushed ==
=== payload_pushed ===
* <b>pusher</b> <small>(byte)</small> - userid of the player who pushed
* <b>pusher</b> <small>(byte)</small> - userid of the player who pushed
* <b>distance</b> <small>(short)</small> - how far they pushed
* <b>distance</b> <small>(short)</small> - how far they pushed


== physgun_pickup ==
=== physgun_pickup ===
* <b>entindex</b> <small>(long)</small> - entity picked up
* <b>entindex</b> <small>(long)</small> - entity picked up


== player_abandoned_match ==
=== player_abandoned_match ===
* <b>game_over</b> <small>(bool)</small>
* <b>game_over</b> <small>(bool)</small>


== player_account_changed ==
=== player_activate ===
* <b>old_value</b> <small>(short)</small>
* <b>new_value</b> <small>(short)</small>
 
== player_activate ==
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server


== player_askedforball ==
=== player_askedforball ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== player_bonuspoints ==
=== player_buff ===
* <b>points</b> <small>(short)</small>
* <b>player_entindex</b> <small>(short)</small>
* <b>source_entindex</b> <small>(short)</small>
 
== player_buff ==
* <b>userid</b> <small>(short)</small> - user ID of the player the buff is being applied to
* <b>userid</b> <small>(short)</small> - user ID of the player the buff is being applied to
* <b>buff_owner</b> <small>(short)</small> - user ID of the player with the banner
* <b>buff_owner</b> <small>(short)</small> - user ID of the player with the banner
* <b>buff_type</b> <small>(byte)</small> - type of buff
* <b>buff_type</b> <small>(byte)</small> - type of buff


== player_builtobject ==
=== player_builtobject ===
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>object</b> <small>(short)</small> - type of object built
* <b>object</b> <small>(short)</small> - type of object built
* <b>index</b> <small>(short)</small> - index of the object
* <b>index</b> <small>(short)</small> - index of the object


== player_buyback ==
=== player_buyback ===
* <b>player</b> <small>(short)</small>
* <b>player</b> <small>(short)</small>
* <b>cost</b> <small>(short)</small>
* <b>cost</b> <small>(short)</small>


== player_calledformedic ==
=== player_carryobject ===
* <b>userid</b> <small>(short)</small>
 
== player_carryobject ==
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>object</b> <small>(short)</small> - type of object built
* <b>object</b> <small>(short)</small> - type of object built
* <b>index</b> <small>(short)</small> - index of the object
* <b>index</b> <small>(short)</small> - index of the object


== player_changeclass ==
=== player_changeclass ===
* <b>userid</b> <small>(short)</small> - user ID who changed class
* <b>userid</b> <small>(short)</small> - user ID who changed class
* <b>class</b> <small>(short)</small> - class that they changed to
* <b>class</b> <small>(short)</small> - class that they changed to


== player_changename ==
=== player_changename ===
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>oldname</b> <small>(string)</small> - players old (current) name
* <b>oldname</b> <small>(string)</small> - players old (current) name
* <b>newname</b> <small>(string)</small> - players new name
* <b>newname</b> <small>(string)</small> - players new name


== player_chargedeployed ==
=== player_chargedeployed ===
* <b>userid</b> <small>(short)</small> - user ID of medic who deployed charge
* <b>userid</b> <small>(short)</small> - user ID of medic who deployed charge
* <b>targetid</b> <small>(short)</small> - user ID of who the medic charged
* <b>targetid</b> <small>(short)</small> - user ID of who the medic charged


== player_chat ==
=== player_chat ===
a public player chat
a public player chat
* <b>teamonly</b> <small>(bool)</small> - true if team only chat
* <b>teamonly</b> <small>(bool)</small> - true if team only chat
Line 811: Line 639:
* <b>text</b> <small>(string)</small> - chat text
* <b>text</b> <small>(string)</small> - chat text


== player_class ==
=== player_class ===
a player changed his class
a player changed his class
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>class</b> <small>(string)</small> - new player class / model
* <b>class</b> <small>(string)</small> - new player class / model


== player_connect ==
=== player_connect ===
A new client has connected. This does NOT fire between level changes as the player is already connected. Use <code>player_spawn</code> instead if you need to catch every player entity that is created.
A new client has connected. This does NOT fire between level changes as the player is already connected. Use <code>player_spawn</code> instead if you need to catch every player entity that is created.
* <b>name</b> <small>(string)</small> - player name
* <b>name</b> <small>(string)</small> - player name
Line 825: Line 653:
* <b>bot</b> <small>(short)</small> - is a bot
* <b>bot</b> <small>(short)</small> - is a bot


== player_connect_client ==
=== player_connect_client ===
a new client connected
a new client connected
* <b>name</b> <small>(string)</small> - player name
* <b>name</b> <small>(string)</small> - player name
Line 833: Line 661:
* <b>bot</b> <small>(short)</small> - is a bot
* <b>bot</b> <small>(short)</small> - is a bot


== player_currency_changed ==
=== player_death ===
* <b>currency</b> <small>(short)</small>
 
== player_damage_dodged ==
* <b>damage</b> <small>(short)</small>
 
== player_damaged ==
* <b>amount</b> <small>(short)</small>
* <b>type</b> <small>(long)</small>
 
== player_death ==
Fired when a player dies. This shows up in the kill feed.
Fired when a player dies. This shows up in the kill feed.
{{warning|This also fires when a Spy feigns death using the Dead Ringer. Make sure to check for this case using <code>if (params.death_flags & 32</code>)!}}
{{warning|This also fires when a Spy feigns death using the Dead Ringer. Make sure to check for this case using <code>if (params.death_flags & 32</code>)!}}
Line 851: Line 669:
* <b>inflictor_entindex</b> <small>(long)</small> - ent index of inflictor (a sentry, for example)
* <b>inflictor_entindex</b> <small>(long)</small> - ent index of inflictor (a sentry, for example)
* <b>attacker</b> <small>(short)</small> - user ID who killed
* <b>attacker</b> <small>(short)</small> - user ID who killed
{{warning|If you are retrieving a handle from this, i.e. with <code>GetPlayerFromUserID</code>, ALWAYS check if it's valid first! If the player died from the environment or NPCs, the attacker handle will be null.}}
{{warning|If you are retrieving a handle from this, i.e. with <code>GetPlayerFromUserID</code>, ALWAYS check if it's not null first! If the player died from the environment or NPCs, the attacker handle will be null.}}
* <b>weapon</b> <small>(string)</small> - weapon name killer used
* <b>weapon</b> <small>(string)</small> - weapon name killer used
* <b>weaponid</b> <small>(short)</small> - ID of weapon killer used
* <b>weaponid</b> <small>(short)</small> - ID of weapon killer used
Line 882: Line 700:
* <b>feign_death</b> <small>(bool)</small> - the victim is feign death
* <b>feign_death</b> <small>(bool)</small> - the victim is feign death


== player_destroyed_pipebomb ==
=== player_destroyed_pipebomb ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== player_directhit_stun ==
=== player_directhit_stun ===
* <b>attacker</b> <small>(short)</small> - entindex of the attacker
* <b>attacker</b> <small>(short)</small> - entindex of the attacker
* <b>victim</b> <small>(short)</small> - entindex of the victim
* <b>victim</b> <small>(short)</small> - entindex of the victim


== player_disconnect ==
=== player_disconnect ===
A client has disconnected. The player handle and script scope still exists when this event fires, as it persists for a frame after disconnect.
A client has disconnected. The player handle and script scope still exists when this event fires, as it persists for a frame after disconnect.


Line 898: Line 716:
* <b>bot</b> <small>(short)</small> - is a bot
* <b>bot</b> <small>(short)</small> - is a bot


== player_domination ==
=== player_domination ===
* <b>dominator</b> <small>(short)</small> - userID of who gained domination
* <b>dominator</b> <small>(short)</small> - userID of who gained domination
* <b>dominated</b> <small>(short)</small> - userID of who got dominated
* <b>dominated</b> <small>(short)</small> - userID of who got dominated
* <b>dominations</b> <small>(short)</small> - Number of dominations this dominator has
* <b>dominations</b> <small>(short)</small> - Number of dominations this dominator has


== player_dropobject ==
=== player_dropobject ===
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>object</b> <small>(short)</small> - type of object built
* <b>object</b> <small>(short)</small> - type of object built
* <b>index</b> <small>(short)</small> - index of the object
* <b>index</b> <small>(short)</small> - index of the object


== player_escort_score ==
=== player_escort_score ===
* <b>player</b> <small>(byte)</small>
* <b>player</b> <small>(byte)</small>
* <b>points</b> <small>(byte)</small>
* <b>points</b> <small>(byte)</small>


== player_extinguished ==
=== player_healed ===
sent when a burning player is extinguished by a medic
* <b>victim</b> <small>(byte)</small> - entindex of the player that was extinguished
* <b>healer</b> <small>(byte)</small> - entindex of the player who did the extinguishing
* <b>itemdefindex</b> <small>(short)</small> - item defindex that did the extinguishing
 
== player_healed ==
* <b>patient</b> <small>(short)</small>
* <b>patient</b> <small>(short)</small>
* <b>healer</b> <small>(short)</small>
* <b>healer</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>


== player_healedbymedic ==
=== player_healedmediccall ===
* <b>medic</b> <small>(byte)</small>
 
== player_healedmediccall ==
local player heals someone who called for medic.
local player heals someone who called for medic.
* <b>userid</b> <small>(short)</small> - userid of person who got healed
* <b>userid</b> <small>(short)</small> - userid of person who got healed


== player_healonhit ==
=== player_healonhit ===
* <b>amount</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>
* <b>entindex</b> <small>(byte)</small>
* <b>entindex</b> <small>(byte)</small>
* <b>weapon_def_index</b> <small>(long)</small> - item def index of the healing weapon
* <b>weapon_def_index</b> <small>(long)</small> - item def index of the healing weapon


== player_highfive_cancel ==
=== player_highfive_cancel ===
* <b>entindex</b> <small>(byte)</small>
* <b>entindex</b> <small>(byte)</small>


== player_highfive_start ==
=== player_highfive_start ===
* <b>entindex</b> <small>(byte)</small>
* <b>entindex</b> <small>(byte)</small>


== player_highfive_success ==
=== player_highfive_success ===
* <b>initiator_entindex</b> <small>(byte)</small>
* <b>initiator_entindex</b> <small>(byte)</small>
* <b>partner_entindex</b> <small>(byte)</small>
* <b>partner_entindex</b> <small>(byte)</small>


== player_hintmessage ==
=== player_hurt ===
* <b>hintmessage</b> <small>(string)</small> - localizable string of a hint
 
== player_hurt ==
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>health</b> <small>(short)</small> - if <= 0, then this will play the killsound
* <b>health</b> <small>(short)</small> - if <= 0, then this will play the killsound
Line 962: Line 768:
{{warning|A value of ''4'' is no damage effect. 0 is crits!}}
{{warning|A value of ''4'' is no damage effect. 0 is crits!}}


== player_ignited ==
=== player_info ===
sent when a player is ignited, only to the two players involved
* <b>pyro_entindex</b> <small>(byte)</small> - entindex of the pyro who ignited the victim
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player ignited by the pyro
* <b>weaponid</b> <small>(byte)</small> - weaponid of the weapon used
 
== player_ignited_inv ==
sent when a player is ignited by a pyro who is being invulned, only to the medic who's doing the invulning
* <b>pyro_entindex</b> <small>(byte)</small> - entindex of the pyro who ignited the victim
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player ignited by the pyro
* <b>medic_entindex</b> <small>(byte)</small> - entindex of the medic releasing the invuln
 
== player_info ==
a player changed his name
a player changed his name
* <b>name</b> <small>(string)</small> - player name
* <b>name</b> <small>(string)</small> - player name
Line 982: Line 776:
* <b>bot</b> <small>(bool)</small> - true if player is a AI bot
* <b>bot</b> <small>(bool)</small> - true if player is a AI bot


== player_initial_spawn ==
=== player_initial_spawn ===
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>index</b> <small>(short)</small> - entindex of the player


== player_invulned ==
=== player_invulned ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>medic_userid</b> <small>(short)</small>
* <b>medic_userid</b> <small>(short)</small>


== player_jarated ==
=== player_killed_achievement_zone ===
sent when a player is jarated, only to the two players involved
* <b>thrower_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
== player_jarated_fade ==
sent when a player is jarated, only to the two players involved
* <b>thrower_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
== player_killed_achievement_zone ==
* <b>attacker</b> <small>(short)</small> - entindex of the attacker
* <b>attacker</b> <small>(short)</small> - entindex of the attacker
* <b>victim</b> <small>(short)</small> - entindex of the victim
* <b>victim</b> <small>(short)</small> - entindex of the victim
* <b>zone_id</b> <small>(short)</small> - type of area (0 for general, 1 for capture zone)
* <b>zone_id</b> <small>(short)</small> - type of area (0 for general, 1 for capture zone)


== player_mvp ==
=== player_regenerate ===
* <b>player</b> <small>(short)</small>


== player_pinned ==
=== player_rocketpack_pushed ===
* <b>pinned</b> <small>(byte)</small>
 
== player_regenerate ==
 
== player_rocketpack_pushed ==
* <b>pusher</b> <small>(short)</small> - userID of who pushed
* <b>pusher</b> <small>(short)</small> - userID of who pushed
* <b>pushed</b> <small>(short)</small> - userID of who got pushed
* <b>pushed</b> <small>(short)</small> - userID of who got pushed


== player_sapped_object ==
=== player_sapped_object ===
* <b>userid</b> <small>(short)</small> - user ID of the spy
* <b>userid</b> <small>(short)</small> - user ID of the spy
* <b>ownerid</b> <small>(short)</small> - user ID of the building owner
* <b>ownerid</b> <small>(short)</small> - user ID of the building owner
Line 1,022: Line 800:
* <b>sapperid</b> <small>(short)</small> - index of the sapper
* <b>sapperid</b> <small>(short)</small> - index of the sapper


== player_say ==
=== player_say ===
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>text</b> <small>(string)</small> - the say text
* <b>text</b> <small>(string)</small> - the say text


== player_score ==
=== player_score ===
players scores changed
players scores changed
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
Line 1,033: Line 811:
* <b>score</b> <small>(short)</small> - total game score
* <b>score</b> <small>(short)</small> - total game score


== player_score_changed ==
=== player_score_changed ===
* <b>player</b> <small>(byte)</small>
* <b>player</b> <small>(byte)</small>
* <b>delta</b> <small>(short)</small>
* <b>delta</b> <small>(short)</small>


== player_shield_blocked ==
=== player_shoot ===
sent when a player is jarated, only to the two players involved
* <b>attacker_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>blocker_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
== player_shoot ==
{{note|Not implemented.}}
{{note|Not implemented.}}
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
Line 1,048: Line 821:
* <b>mode</b> <small>(byte)</small> - weapon mode
* <b>mode</b> <small>(byte)</small> - weapon mode


== player_spawn ==
=== player_spawn ===
This event will be sent once when the player entity is created, i.e. they joined the server or they are loading in after a map change. In this case, <code>team</code> is equal to 0 (unassigned). Each time afterwards, the event will only be fired when the player spawns alive on red or blue team. This is also fired once when [[SourceTV]] is loaded in.  
This event will be sent once when the player entity is created, i.e. they joined the server or they are loading in after a map change. In this case, <code>team</code> is equal to 0 (unassigned). Each time afterwards, the event will only be fired when the player spawns alive on red or blue team. This is also fired once when [[SourceTV]] is loaded in.  


Line 1,055: Line 828:
* <b>class</b> <small>(short)</small> - class they spawned as
* <b>class</b> <small>(short)</small> - class they spawned as


== player_stats_updated ==
=== player_stealsandvich ===
* <b>forceupload</b> <small>(bool)</small>
 
== player_stealsandvich ==
* <b>owner</b> <small>(short)</small>
* <b>owner</b> <small>(short)</small>
* <b>target</b> <small>(short)</small>
* <b>target</b> <small>(short)</small>


== player_stunned ==
=== player_stunned ===
* <b>stunner</b> <small>(short)</small> {{warning|If there's no attacker, this key won't exist (such as being stunned after hitting a wall with a bumper kart)}}
* <b>stunner</b> <small>(short)</small> {{warning|If there's no attacker, this key won't exist (such as being stunned after hitting a wall with a bumper kart)}}
* <b>victim</b> <small>(short)</small>
* <b>victim</b> <small>(short)</small>
Line 1,068: Line 838:
* <b>big_stun</b> <small>(bool)</small>
* <b>big_stun</b> <small>(bool)</small>


== player_team ==
=== player_team ===
Fired when player joins a team.
Fired when player joins a team.
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
Line 1,078: Line 848:
* <b>name</b> <small>(string)</small> - player's name
* <b>name</b> <small>(string)</small> - player's name


== player_teleported ==
=== player_teleported ===
* <b>userid</b> <small>(short)</small> - userid of the player
* <b>userid</b> <small>(short)</small> - userid of the player
* <b>builderid</b> <small>(short)</small> - userid of the player who built the teleporter
* <b>builderid</b> <small>(short)</small> - userid of the player who built the teleporter
* <b>dist</b> <small>(float)</small> - distance the player was teleported
* <b>dist</b> <small>(float)</small> - distance the player was teleported


== player_turned_to_ghost ==
=== player_turned_to_ghost ===
* <b>userid</b> <small>(short)</small> - user ID of the player who changed to a ghost
* <b>userid</b> <small>(short)</small> - user ID of the player who changed to a ghost


== player_upgraded ==
=== player_upgraded ===


== player_upgradedobject ==
=== player_upgradedobject ===
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>userid</b> <small>(short)</small> - user ID of the builder
* <b>object</b> <small>(short)</small> - type of object built
* <b>object</b> <small>(short)</small> - type of object built
Line 1,094: Line 864:
* <b>isbuilder</b> <small>(bool)</small>
* <b>isbuilder</b> <small>(bool)</small>


== player_use ==
=== player_use ===
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>entity</b> <small>(short)</small> - entity used by player
* <b>entity</b> <small>(short)</small> - entity used by player


== player_used_powerup_bottle ==
=== player_used_powerup_bottle ===
* <b>player</b> <small>(short)</small>
* <b>player</b> <small>(short)</small>
* <b>type</b> <small>(short)</small>
* <b>type</b> <small>(short)</small>
* <b>time</b> <small>(float)</small>
* <b>time</b> <small>(float)</small>


== playing_commentary ==
=== post_inventory_application ===
 
== post_inventory_application ==
Fired when the player has items resupplied, i.e. when the player spawns or touches resupply ([[func_regenerate]]).
Fired when the player has items resupplied, i.e. when the player spawns or touches resupply ([[func_regenerate]]).
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== projectile_direct_hit ==
=== projectile_direct_hit ===
* <b>attacker</b> <small>(byte)</small> - index of the player who shot the projectile
* <b>attacker</b> <small>(byte)</small> - index of the player who shot the projectile
* <b>victim</b> <small>(byte)</small> - index of the player who got direct-ht
* <b>victim</b> <small>(byte)</small> - index of the player who got direct-ht
* <b>weapon_def_index</b> <small>(long)</small> - defindex of the direct hitting weapon
* <b>weapon_def_index</b> <small>(long)</small> - defindex of the direct hitting weapon


== projectile_removed ==
=== projectile_removed ===
* <b>attacker</b> <small>(byte)</small>
* <b>attacker</b> <small>(byte)</small>
* <b>weapon_def_index</b> <small>(long)</small>
* <b>weapon_def_index</b> <small>(long)</small>
Line 1,120: Line 888:
* <b>num_direct_hit</b> <small>(byte)</small>
* <b>num_direct_hit</b> <small>(byte)</small>


== pumpkin_lord_killed ==
=== pumpkin_lord_killed ===


== pumpkin_lord_summoned ==
=== pumpkin_lord_summoned ===


== pve_win_panel ==
=== pve_win_panel ===
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>winning_team</b> <small>(byte)</small>
* <b>winning_team</b> <small>(byte)</small>
* <b>winreason</b> <small>(byte)</small> - the reason the team won
* <b>winreason</b> <small>(byte)</small> - the reason the team won


== quest_map_data_changed ==
=== quest_map_data_changed ===
* <b>igniter</b> <small>(short)</small> - entindex of the igniter
* <b>igniter</b> <small>(short)</small> - entindex of the igniter
* <b>douser</b> <small>(short)</small> - entindex of the douser
* <b>douser</b> <small>(short)</small> - entindex of the douser
* <b>victim</b> <small>(short)</small> - entindex of the victim
* <b>victim</b> <small>(short)</small> - entindex of the victim


== quest_objective_completed ==
=== quest_progress ===
For prediction
* <b>quest_item_id_low</b> <small>(long)</small>
* <b>quest_item_id_hi</b> <small>(long)</small>
* <b>quest_objective_id</b> <small>(long)</small>
* <b>scorer_user_id</b> <small>(short)</small>
 
== quest_progress ==
* <b>owner</b> <small>(short)</small>
* <b>owner</b> <small>(short)</small>
* <b>scorer</b> <small>(short)</small>
* <b>scorer</b> <small>(short)</small>
Line 1,148: Line 909:
* <b>quest_defindex</b> <small>(long)</small>
* <b>quest_defindex</b> <small>(long)</small>


== quest_request ==
=== ragdoll_dissolved ===
* <b>request</b> <small>(long)</small>
* <b>msg</b> <small>(string)</small> - Protobuf serialized to a string
 
== quest_response ==
* <b>request</b> <small>(long)</small>
* <b>success</b> <small>(bool)</small>
* <b>msg</b> <small>(string)</small> - Protobuf serialized to a string
 
== quest_turn_in_state ==
* <b>state</b> <small>(short)</small> - Maps to EQuestTurnInState
 
== questlog_opened ==
 
== ragdoll_dissolved ==
* <b>entindex</b> <small>(long)</small>
* <b>entindex</b> <small>(long)</small>


== raid_spawn_mob ==
=== raid_spawn_mob ===


== raid_spawn_squad ==
=== raid_spawn_squad ===


== rd_player_score_points ==
=== rd_player_score_points ===
* <b>player</b> <small>(short)</small>
* <b>player</b> <small>(short)</small>
* <b>method</b> <small>(short)</small>
* <b>method</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>
* <b>amount</b> <small>(short)</small>


== rd_robot_impact ==
=== rd_robot_impact ===
* <b>entindex</b> <small>(short)</small>
* <b>entindex</b> <small>(short)</small>
* <b>impulse_x</b> <small>(float)</small>
* <b>impulse_x</b> <small>(float)</small>
Line 1,180: Line 927:
* <b>impulse_z</b> <small>(float)</small>
* <b>impulse_z</b> <small>(float)</small>


== rd_robot_killed ==
=== rd_robot_killed ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>victim_entindex</b> <small>(long)</small>
* <b>victim_entindex</b> <small>(long)</small>
Line 1,191: Line 938:
* <b>weapon_logclassname</b> <small>(string)</small> - weapon name that should be printed on the log
* <b>weapon_logclassname</b> <small>(string)</small> - weapon name that should be printed on the log


== rd_rules_state_changed ==
=== recalculate_holidays ===


== rd_team_points_changed ==
=== recalculate_truce ===
* <b>points</b> <small>(short)</small>
* <b>team</b> <small>(byte)</small>
* <b>method</b> <small>(byte)</small>


== recalculate_holidays ==
=== rematch_failed_to_create ===
 
== recalculate_truce ==
 
== rematch_failed_to_create ==
* <b>map_index</b> <small>(byte)</small> - what they voted for
* <b>map_index</b> <small>(byte)</small> - what they voted for
* <b>vote</b> <small>(byte)</small> - what the vote was
* <b>vote</b> <small>(byte)</small> - what the vote was


== remove_nemesis_relationships ==
=== remove_nemesis_relationships ===
* <b>player</b> <small>(short)</small> - entindex of the player who should reset
* <b>player</b> <small>(short)</small> - entindex of the player who should reset


== replay_endrecord ==
=== replay_endrecord ===


== replay_replaysavailable ==
=== replay_replaysavailable ===


== replay_saved ==
=== replay_servererror ===
 
== replay_servererror ==
* <b>error</b> <small>(string)</small>
* <b>error</b> <small>(string)</small>


== replay_sessioninfo ==
=== replay_sessioninfo ===
Sent when the server begins recording, or when a client first connects - only sent once per recording session
Sent when the server begins recording, or when a client first connects - only sent once per recording session
* <b>sn</b> <small>(string)</small> - session name
* <b>sn</b> <small>(string)</small> - session name
Line 1,225: Line 963:
* <b>st</b> <small>(long)</small> - session start tick
* <b>st</b> <small>(long)</small> - session start tick


== replay_startrecord ==
=== replay_startrecord ===
Sent when the server begins recording - only used to display UI
Sent when the server begins recording - only used to display UI


== replay_youtube_stats ==
=== respawn_ghost ===
* <b>views</b> <small>(long)</small>
* <b>likes</b> <small>(long)</small>
* <b>favorited</b> <small>(long)</small>
 
== respawn_ghost ==
* <b>reviver</b> <small>(short)</small> - userid of the reviving player
* <b>reviver</b> <small>(short)</small> - userid of the reviving player
* <b>ghost</b> <small>(short)</small> - userid of the player that got revived
* <b>ghost</b> <small>(short)</small> - userid of the player that got revived


== restart_timer_time ==
=== revive_player_complete ===
* <b>time</b> <small>(byte)</small> - How much time is left
 
== revive_player_complete ==
* <b>entindex</b> <small>(short)</small> - entindex of the medic
* <b>entindex</b> <small>(short)</small> - entindex of the medic


== revive_player_notify ==
=== revive_player_notify ===
* <b>entindex</b> <small>(short)</small>
* <b>entindex</b> <small>(short)</small>
* <b>marker_entindex</b> <small>(short)</small>
* <b>marker_entindex</b> <small>(short)</small>


== revive_player_stopped ==
=== revive_player_stopped ===
* <b>entindex</b> <small>(short)</small>
* <b>entindex</b> <small>(short)</small>


== rocket_jump ==
=== rocket_jump ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>playsound</b> <small>(bool)</small>
* <b>playsound</b> <small>(bool)</small>


== rocket_jump_landed ==
=== rocket_jump_landed ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== rocketpack_landed ==
=== rocketpack_landed ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== rocketpack_launch ==
=== rocketpack_launch ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>playsound</b> <small>(bool)</small>
* <b>playsound</b> <small>(bool)</small>


== round_end ==
=== round_end ===
* <b>winner</b> <small>(byte)</small> - winner team/user i
* <b>winner</b> <small>(byte)</small> - winner team/user i
* <b>reason</b> <small>(byte)</small> - reson why team won
* <b>reason</b> <small>(byte)</small> - reson why team won
* <b>message</b> <small>(string)</small> - end round message
* <b>message</b> <small>(string)</small> - end round message


== round_start ==
=== round_start ===
* <b>timelimit</b> <small>(long)</small> - round time limit in seconds
* <b>timelimit</b> <small>(long)</small> - round time limit in seconds
* <b>fraglimit</b> <small>(long)</small> - frag limit in seconds
* <b>fraglimit</b> <small>(long)</small> - frag limit in seconds
* <b>objective</b> <small>(string)</small> - round objective
* <b>objective</b> <small>(string)</small> - round objective


== rps_taunt_event ==
=== rps_taunt_event ===
* <b>winner</b> <small>(short)</small> - entindex of the winning player
* <b>winner</b> <small>(short)</small> - entindex of the winning player
* <b>winner_rps</b> <small>(byte)</small> - winner's selection
* <b>winner_rps</b> <small>(byte)</small> - winner's selection
Line 1,280: Line 1,010:
* <b>loser_rps</b> <small>(byte)</small> - loser's selection
* <b>loser_rps</b> <small>(byte)</small> - loser's selection


== schema_updated ==
=== scorestats_accumulated_reset ===
 
== scorestats_accumulated_reset ==
Fired when round resets due to <code>mp_restartgame</code>.
Fired when round resets due to <code>mp_restartgame</code>.


== scorestats_accumulated_update ==
=== scorestats_accumulated_update ===
Fired right before map entities are cleaned up for a round restart.  
Fired right before map entities are cleaned up for a round restart.  


This event is not fired in Mann Vs Machine mode. For MvM, use <code>recalculate_holidays</code> and check if <code>GetRoundState() == 3</code> is true, which indicates a mission reset.
This event is not fired in Mann Vs Machine mode. For MvM, use <code>recalculate_holidays</code> and check if <code>GetRoundState() === 3</code> is true, which indicates a mission reset.


== scout_grand_slam ==
=== scout_grand_slam ===
* <b>scout_id</b> <small>(short)</small>
* <b>scout_id</b> <small>(short)</small>
* <b>target_id</b> <small>(short)</small>
* <b>target_id</b> <small>(short)</small>


== scout_slamdoll_landed ==
=== sentry_on_go_active ===
* <b>target_index</b> <small>(short)</small>
* <b>x</b> <small>(float)</small>
* <b>y</b> <small>(float)</small>
* <b>z</b> <small>(float)</small>
 
== sentry_on_go_active ==
* <b>index</b> <small>(short)</small>
* <b>index</b> <small>(short)</small>


== server_addban ==
=== server_addban ===
* <b>name</b> <small>(string)</small> - player name
* <b>name</b> <small>(string)</small> - player name
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
Line 1,312: Line 1,034:
* <b>kicked</b> <small>(bool)</small> - whether the player was also kicked
* <b>kicked</b> <small>(bool)</small> - whether the player was also kicked


== server_changelevel_failed ==
=== server_changelevel_failed ===
* <b>levelname</b> <small>(string)</small> - The level name that failed changelevel
* <b>levelname</b> <small>(string)</small> - The level name that failed changelevel


== server_cvar ==
=== server_cvar ===
a server console var has changed
a server console var has changed
* <b>cvarname</b> <small>(string)</small> - cvar name, eg "mp_roundtime"
* <b>cvarname</b> <small>(string)</small> - cvar name, eg "mp_roundtime"
* <b>cvarvalue</b> <small>(string)</small> - new cvar value
* <b>cvarvalue</b> <small>(string)</small> - new cvar value


== server_message ==
=== server_message ===
a generic server message
a generic server message
* <b>text</b> <small>(string)</small> - the message text
* <b>text</b> <small>(string)</small> - the message text


== server_removeban ==
=== server_removeban ===
* <b>networkid</b> <small>(string)</small> - player network (i.e steam) id
* <b>networkid</b> <small>(string)</small> - player network (i.e steam) id
* <b>ip</b> <small>(string)</small> - IP address
* <b>ip</b> <small>(string)</small> - IP address
* <b>by</b> <small>(string)</small> - removed by...
* <b>by</b> <small>(string)</small> - removed by...


== server_shutdown ==
=== server_shutdown ===
server shut down
server shut down
* <b>reason</b> <small>(string)</small> - reason why server was shut down
* <b>reason</b> <small>(string)</small> - reason why server was shut down


== server_spawn ==
=== server_spawn ===
send once a server starts
send once a server starts
* <b>hostname</b> <small>(string)</small> - public host name
* <b>hostname</b> <small>(string)</small> - public host name
Line 1,346: Line 1,068:
* <b>password</b> <small>(bool)</small> - true if password protected
* <b>password</b> <small>(bool)</small> - true if password protected


== show_annotation ==
=== show_match_summary ===
* <b>worldPosX</b> <small>(float)</small>
* <b>worldPosY</b> <small>(float)</small>
* <b>worldPosZ</b> <small>(float)</small>
* <b>worldNormalX</b> <small>(float)</small>
* <b>worldNormalY</b> <small>(float)</small>
* <b>worldNormalZ</b> <small>(float)</small>
* <b>id</b> <small>(long)</small>
* <b>text</b> <small>(string)</small> - name (unlocalized)
* <b>lifetime</b> <small>(float)</small>
* <b>visibilityBitfield</b> <small>(long)</small> - bitfield of the players that can see this. If 0, everyone can see it
{{warning|This was only intended for supporting 32 players, players above that index are not considered.}}
* <b>follow_entindex</b> <small>(long)</small> - if this is set, follow this entity
* <b>show_distance</b> <small>(bool)</small>
* <b>play_sound</b> <small>(string)</small>
* <b>show_effect</b> <small>(bool)</small>
 
== show_class_layout ==
* <b>show</b> <small>(bool)</small>
 
== show_freezepanel ==
* <b>killer</b> <small>(short)</small> - entindex of the killer entity
 
== show_match_summary ==
* <b>success</b> <small>(bool)</small>
* <b>success</b> <small>(bool)</small>


== show_vs_panel ==
=== show_vs_panel ===
* <b>show</b> <small>(bool)</small>
* <b>show</b> <small>(bool)</small>


== single_player_death ==
=== single_player_death ===


== skeleton_killed_quest ==
=== skeleton_killed_quest ===
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton


== skeleton_king_killed_quest ==
=== skeleton_king_killed_quest ===
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton
* <b>player</b> <small>(short)</small> - userid of the player that killed the skeleton


== slap_notice ==
=== slap_notice ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>victim_entindex</b> <small>(long)</small>
* <b>victim_entindex</b> <small>(long)</small>
Line 1,399: Line 1,098:
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1
* <b>assister_fallback</b> <small>(string)</small> - contains a string to use if "assister" is -1


== spec_target_updated ==


== special_score ==
=== special_score ===
* <b>player</b> <small>(byte)</small> - index of the scorer
* <b>player</b> <small>(byte)</small> - index of the scorer


== spy_pda_reset ==
=== spy_pda_reset ===


== stats_resetround ==
=== stats_resetround ===


== sticky_jump ==
=== sticky_jump ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>
* <b>playsound</b> <small>(bool)</small>
* <b>playsound</b> <small>(bool)</small>


== sticky_jump_landed ==
=== sticky_jump_landed ===
* <b>userid</b> <small>(short)</small>
* <b>userid</b> <small>(short)</small>


== store_pricesheet_updated ==
=== tagged_player_as_it ===
 
== tagged_player_as_it ==
* <b>player</b> <small>(short)</small> - userid of the tagging player
* <b>player</b> <small>(short)</small> - userid of the tagging player


== take_armor ==
=== take_armor ===
* <b>amount</b> <small>(long)</small>
* <b>amount</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>


== take_health ==
=== take_health ===
* <b>amount</b> <small>(long)</small>
* <b>amount</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>
* <b>total</b> <small>(long)</small>


== team_info ==
=== team_info ===
info about team
info about team
* <b>teamid</b> <small>(byte)</small> - unique team id
* <b>teamid</b> <small>(byte)</small> - unique team id
* <b>teamname</b> <small>(string)</small> - team name eg "Team Blue"
* <b>teamname</b> <small>(string)</small> - team name eg "Team Blue"


== team_leader_killed ==
=== team_leader_killed ===
* <b>killer</b> <small>(byte)</small> - index of the killer
* <b>killer</b> <small>(byte)</small> - index of the killer
* <b>victim</b> <small>(byte)</small> - index of the victim
* <b>victim</b> <small>(byte)</small> - index of the victim


== team_score ==
=== team_score ===
team score changed
team score changed
* <b>teamid</b> <small>(byte)</small> - team id
* <b>teamid</b> <small>(byte)</small> - team id
* <b>score</b> <small>(short)</small> - total team score
* <b>score</b> <small>(short)</small> - total team score


== teamplay_alert ==
=== teamplay_alert ===
* <b>alert_type</b> <small>(short)</small> - which alert type is this (scramble, etc)?
* <b>alert_type</b> <small>(short)</small> - which alert type is this (scramble, etc)?


== teamplay_broadcast_audio ==
=== teamplay_broadcast_audio ===
* <b>team</b> <small>(byte)</small> - which team should hear the broadcast. 0 will make everyone hear it.
* <b>team</b> <small>(byte)</small> - which team should hear the broadcast. 0 will make everyone hear it.
* <b>sound</b> <small>(string)</small> - sound to play
* <b>sound</b> <small>(string)</small> - sound to play
Line 1,451: Line 1,147:
* <b>player</b> <small>(short)</small> - entindex of the player source or -1
* <b>player</b> <small>(short)</small> - entindex of the player source or -1


== teamplay_capture_blocked ==
=== teamplay_capture_blocked ===
* <b>cp</b> <small>(byte)</small> - index of the point that was blocked
* <b>cp</b> <small>(byte)</small> - index of the point that was blocked
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>cpname</b> <small>(string)</small> - name of the point
Line 1,457: Line 1,153:
* <b>victim</b> <small>(byte)</small> - index of the player that died, causing the block
* <b>victim</b> <small>(byte)</small> - index of the player that died, causing the block


== teamplay_capture_broken ==
=== teamplay_capture_broken ===
* <b>cp</b> <small>(byte)</small>
* <b>cp</b> <small>(byte)</small>
* <b>cpname</b> <small>(string)</small>
* <b>cpname</b> <small>(string)</small>
* <b>time_remaining</b> <small>(float)</small>
* <b>time_remaining</b> <small>(float)</small>


== teamplay_flag_event ==
=== teamplay_flag_event ===
* <b>player</b> <small>(short)</small> - player this event involves
* <b>player</b> <small>(short)</small> - player this event involves
* <b>carrier</b> <small>(short)</small> - the carrier if needed
* <b>carrier</b> <small>(short)</small> - the carrier if needed
Line 1,469: Line 1,165:
* <b>team</b> <small>(byte)</small> - which team the flag belongs to
* <b>team</b> <small>(byte)</small> - which team the flag belongs to


== teamplay_game_over ==
=== teamplay_game_over ===
* <b>reason</b> <small>(string)</small> - why the game is over ( timelimit, winlimit )
* <b>reason</b> <small>(string)</small> - why the game is over ( timelimit, winlimit )


== teamplay_map_time_remaining ==
=== teamplay_map_time_remaining ===
* <b>seconds</b> <small>(short)</small>
* <b>seconds</b> <small>(short)</small>


== teamplay_overtime_begin ==
=== teamplay_overtime_begin ===


== teamplay_overtime_end ==
=== teamplay_overtime_end ===


== teamplay_point_captured ==
=== teamplay_point_captured ===
* <b>cp</b> <small>(byte)</small> - index of the point that was captured
* <b>cp</b> <small>(byte)</small> - index of the point that was captured
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>cpname</b> <small>(string)</small> - name of the point
Line 1,485: Line 1,181:
* <b>cappers</b> <small>(string)</small> - string where each character is a player index of someone that capped
* <b>cappers</b> <small>(string)</small> - string where each character is a player index of someone that capped


== teamplay_point_locked ==
=== teamplay_point_locked ===
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>team</b> <small>(byte)</small> - which team currently owns the point
* <b>team</b> <small>(byte)</small> - which team currently owns the point


== teamplay_point_startcapture ==
=== teamplay_point_startcapture ===
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>cpname</b> <small>(string)</small> - name of the point
Line 1,498: Line 1,194:
* <b>captime</b> <small>(float)</small> - time between when this cap started and when the point last changed hands
* <b>captime</b> <small>(float)</small> - time between when this cap started and when the point last changed hands


== teamplay_point_unlocked ==
=== teamplay_point_unlocked ===
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cp</b> <small>(byte)</small> - index of the point being captured
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>cpname</b> <small>(string)</small> - name of the point
* <b>team</b> <small>(byte)</small> - which team currently owns the point
* <b>team</b> <small>(byte)</small> - which team currently owns the point


== teamplay_pre_round_time_left ==
=== teamplay_pre_round_time_left ===
* <b>time</b> <small>(short)</small>
* <b>time</b> <small>(short)</small>


== teamplay_ready_restart ==
=== teamplay_ready_restart ===


== teamplay_restart_round ==
=== teamplay_restart_round ===


== teamplay_round_active ==
=== teamplay_round_active ===
called when round is active, players can move
called when round is active, players can move


== teamplay_round_restart_seconds ==
=== teamplay_round_restart_seconds ===
* <b>seconds</b> <small>(short)</small>
* <b>seconds</b> <small>(short)</small>


== teamplay_round_selected ==
=== teamplay_round_selected ===
* <b>round</b> <small>(string)</small> - name of the round selected
* <b>round</b> <small>(string)</small> - name of the round selected


== teamplay_round_stalemate ==
=== teamplay_round_start ===
* <b>reason</b> <small>(byte)</small> - why the stalemate is occuring
 
== teamplay_round_start ==
round restart
round restart
* <b>full_reset</b> <small>(bool)</small> - is this a full reset of the map
* <b>full_reset</b> <small>(bool)</small> - is this a full reset of the map


== teamplay_round_win ==
=== teamplay_round_win ===
* <b>team</b> <small>(byte)</small> - which team won the round
* <b>team</b> <small>(byte)</small> - which team won the round
* <b>winreason</b> <small>(byte)</small> - the reason the team won
* <b>winreason</b> <small>(byte)</small> - the reason the team won
Line 1,535: Line 1,228:
* <b>was_sudden_death</b> <small>(byte)</small> - did a team win this after entering sudden death
* <b>was_sudden_death</b> <small>(byte)</small> - did a team win this after entering sudden death


== teamplay_setup_finished ==
=== teamplay_setup_finished ===


== teamplay_suddendeath_begin ==
=== teamplay_suddendeath_begin ===


== teamplay_suddendeath_end ==
=== teamplay_suddendeath_end ===


== teamplay_team_ready ==
=== teamplay_team_ready ===
* <b>team</b> <small>(byte)</small> - which team is ready
* <b>team</b> <small>(byte)</small> - which team is ready


== teamplay_teambalanced_player ==
=== teamplay_teambalanced_player ===
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>player</b> <small>(short)</small> - entindex of the player
* <b>team</b> <small>(byte)</small> - which team the player is being moved to
* <b>team</b> <small>(byte)</small> - which team the player is being moved to


== teamplay_timer_flash ==
=== teamplay_timer_flash ===
* <b>time_remaining</b> <small>(short)</small> - how many seconds until the round ends
* <b>time_remaining</b> <small>(short)</small> - how many seconds until the round ends


== teamplay_timer_time_added ==
=== teamplay_timer_time_added ===
* <b>timer</b> <small>(short)</small> - entindex of the timer
* <b>timer</b> <small>(short)</small> - entindex of the timer
* <b>seconds_added</b> <small>(short)</small> - how many seconds were added to the round timer
* <b>seconds_added</b> <small>(short)</small> - how many seconds were added to the round timer


== teamplay_update_timer ==
=== teamplay_waiting_abouttoend ===
 
== teamplay_waiting_abouttoend ==


== teamplay_waiting_begins ==
=== teamplay_waiting_begins ===


== teamplay_waiting_ends ==
=== teamplay_waiting_ends ===


== teamplay_win_panel ==
=== teamplay_win_panel ===
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>panel_style</b> <small>(byte)</small> - for client to determine layout
* <b>winning_team</b> <small>(byte)</small>
* <b>winning_team</b> <small>(byte)</small>
Line 1,585: Line 1,276:
* <b>game_over</b> <small>(byte)</small>
* <b>game_over</b> <small>(byte)</small>


== teams_changed ==
=== teams_changed ===


== tf_game_over ==
=== tf_game_over ===
* <b>reason</b> <small>(string)</small> - why the game is over ( timelimit, winlimit )
* <b>reason</b> <small>(string)</small> - why the game is over ( timelimit, winlimit )


== tf_map_time_remaining ==
=== tf_map_time_remaining ===
* <b>seconds</b> <small>(long)</small>
* <b>seconds</b> <small>(long)</small>


== throwable_hit ==
=== throwable_hit ===
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>userid</b> <small>(short)</small> - user ID who died
* <b>victim_entindex</b> <small>(long)</small>
* <b>victim_entindex</b> <small>(long)</small>
Line 1,610: Line 1,301:
* <b>totalhits</b> <small>(short)</small> - Number of hits his player has done
* <b>totalhits</b> <small>(short)</small> - Number of hits his player has done


== tournament_enablecountdown ==
=== tournament_enablecountdown ===


== tournament_stateupdate ==
=== tournament_stateupdate ===
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>userid</b> <small>(short)</small> - user ID on server
* <b>namechange</b> <small>(bool)</small>
* <b>namechange</b> <small>(bool)</small>
Line 1,618: Line 1,309:
* <b>newname</b> <small>(string)</small> - players new name
* <b>newname</b> <small>(string)</small> - players new name


== training_complete ==
=== training_complete ===
* <b>next_map</b> <small>(string)</small> - next map (if any)
* <b>next_map</b> <small>(string)</small> - next map (if any)
* <b>map</b> <small>(string)</small> - the name of the map this screen is on.
* <b>map</b> <small>(string)</small> - the name of the map this screen is on.
* <b>text</b> <small>(string)</small> - text to show
* <b>text</b> <small>(string)</small> - text to show


== update_status_item ==
=== upgrades_file_changed ===
* <b>index</b> <small>(byte)</small>
* <b>object</b> <small>(byte)</small>
 
== upgrades_file_changed ==
* <b>path</b> <small>(string)</small>
* <b>path</b> <small>(string)</small>


== user_data_downloaded ==
=== vote_cast ===
fired when achievements/stats are downloaded from Steam or XBox Live
 
== vote_cast ==
* <b>vote_option</b> <small>(byte)</small> - which option the player voted on
* <b>vote_option</b> <small>(byte)</small> - which option the player voted on
* <b>team</b> <small>(short)</small>
* <b>team</b> <small>(short)</small>
Line 1,639: Line 1,323:
* <b>voteidx</b> <small>(long)</small>
* <b>voteidx</b> <small>(long)</small>


== vote_changed ==
=== vote_ended ===
 
=== vote_options ===
* <b>count</b> <small>(byte)</small> - Number of options - up to MAX_VOTE_OPTIONS
* <b>option1</b> <small>(string)</small>
* <b>option2</b> <small>(string)</small>
* <b>option3</b> <small>(string)</small>
* <b>option4</b> <small>(string)</small>
* <b>option5</b> <small>(string)</small>
* <b>voteidx</b> <small>(long)</small>
 
=== weapon_equipped ===
* <b>class</b> <small>(string)</small>
* <b>entindex</b> <small>(long)</small>
 
=== winlimit_changed ===
* <b>delay</b> <small>(float)</small>
 
== Clientside ==
 
=== spec_target_updated ===
 
=== show_freezepanel ===
* <b>killer</b> <small>(short)</small> - entindex of the killer entity
 
=== hide_freezepanel ===
 
=== freezecam_started ===
 
=== controlpoint_initialized ===
 
=== controlpoint_unlock_updated ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>time</b> <small>(float)</small> - time
 
=== controlpoint_timer_updated ===
* <b>index</b> <small>(short)</small> - index of the cap being updated
* <b>time</b> <small>(float)</small> - time
 
=== escort_speed ===
* <b>team</b> <small>(byte)</small> - which team
* <b>speed</b> <small>(byte)</small>
* <b>players</b> <small>(byte)</small>
 
=== escort_progress ===
* <b>team</b> <small>(byte)</small> - which team
* <b>progress</b> <small>(float)</small>
* <b>reset</b> <small>(bool)</small>
 
=== escort_recede ===
* <b>team</b> <small>(byte)</small> - which team
* <b>recedetime</b> <small>(float)</small>
 
=== vote_changed ===
* <b>vote_option1</b> <small>(byte)</small>
* <b>vote_option1</b> <small>(byte)</small>
* <b>vote_option2</b> <small>(byte)</small>
* <b>vote_option2</b> <small>(byte)</small>
Line 1,648: Line 1,385:
* <b>voteidx</b> <small>(long)</small>
* <b>voteidx</b> <small>(long)</small>


== vote_ended ==
=== gameui_activated ===
 
=== gameui_hidden ===
 
=== game_newmap ===
send when new map is completely loaded
* <b>mapname</b> <small>(string)</small> - map name
 
=== items_acknowledged ===
* <b>blocker</b> <small>(short)</small> - entindex of the blocker
* <b>victim</b> <small>(short)</small> - entindex of the victim


== vote_failed ==
=== store_pricesheet_updated ===
 
=== cart_updated ===
 
=== inventory_updated ===
 
=== hltv_changed_mode ===
* <b>oldmode</b> <small>(short)</small>
* <b>newmode</b> <small>(short)</small>
* <b>obs_target</b> <small>(short)</small>
 
=== hltv_changed_target ===
* <b>mode</b> <small>(short)</small>
* <b>old_target</b> <small>(short)</small>
* <b>obs_target</b> <small>(short)</small>
 
=== vote_failed ===
* <b>team</b> <small>(byte)</small>
* <b>voteidx</b> <small>(long)</small>
 
=== vote_started ===
* <b>issue</b> <small>(string)</small>
* <b>param1</b> <small>(string)</small>
* <b>team</b> <small>(byte)</small>
* <b>initiator</b> <small>(long)</small> - entity id of the player who initiated the vote
* <b>voteidx</b> <small>(long)</small>
 
=== vote_passed ===
* <b>details</b> <small>(string)</small>
* <b>param1</b> <small>(string)</small>
* <b>team</b> <small>(byte)</small>
* <b>team</b> <small>(byte)</small>
* <b>voteidx</b> <small>(long)</small>
* <b>voteidx</b> <small>(long)</small>


== vote_maps_changed ==
=== replay_saved ===
 
=== replay_youtube_stats ===
* <b>views</b> <small>(long)</small>
* <b>likes</b> <small>(long)</small>
* <b>favorited</b> <small>(long)</small>
 
=== base_player_teleported ===
* <b>entindex</b> <small>(short)</small>
 
=== browse_replays ===
 
=== entered_performance_mode ===
 
=== building_info_changed ===
* <b>building_type</b> <small>(byte)</small>
* <b>object_mode</b> <small>(byte)</small>
* <b>remove</b> <small>(byte)</small>
 
=== scout_slamdoll_landed ===
* <b>target_index</b> <small>(short)</small>
* <b>x</b> <small>(float)</small>
* <b>y</b> <small>(float)</small>
* <b>z</b> <small>(float)</small>
 
=== localplayer_changeteam ===
 
=== localplayer_changeclass ===
 
=== localplayer_becameobserver ===
 
=== localplayer_changedisguise ===
* <b>disguised</b> <small>(bool)</small>
 
=== localplayer_builtobject ===
* <b>object</b> <small>(short)</small> - type of object built
* <b>object_mode</b> <small>(short)</small> - used for teleporters: entrance vs. exit
* <b>index</b> <small>(short)</small> - index of the object
 
=== localplayer_chargeready ===
local player has full medic charge
 
=== localplayer_pickup_weapon ===
 
=== localplayer_respawn ===
 
=== localplayer_score_changed ===
* <b>score</b> <small>(short)</small>
 
=== localplayer_winddown ===
local player minigun winddown
 
=== player_account_changed ===
* <b>old_value</b> <small>(short)</small>
* <b>new_value</b> <small>(short)</small>
 
=== localplayer_healed ===
* <b>amount</b> <small>(short)</small>
 
=== player_currency_changed ===
* <b>currency</b> <small>(short)</small>
 
=== player_calledformedic ===
* <b>userid</b> <small>(short)</small>
 
=== player_healedbymedic ===
* <b>medic</b> <small>(byte)</small>
 
=== player_pinned ===
* <b>pinned</b> <small>(byte)</small>
 
=== hide_annotation ===
* <b>id</b> <small>(long)</small>
 
=== show_annotation ===
* <b>worldPosX</b> <small>(float)</small>
* <b>worldPosY</b> <small>(float)</small>
* <b>worldPosZ</b> <small>(float)</small>
* <b>worldNormalX</b> <small>(float)</small>
* <b>worldNormalY</b> <small>(float)</small>
* <b>worldNormalZ</b> <small>(float)</small>
* <b>id</b> <small>(long)</small>
* <b>text</b> <small>(string)</small> - name (unlocalized)
* <b>lifetime</b> <small>(float)</small>
* <b>visibilityBitfield</b> <small>(long)</small> - bitfield of the players that can see this. If 0, everyone can see it
{{warning|This was only intended for supporting 32 players, players above that index are not considered.}}
* <b>follow_entindex</b> <small>(long)</small> - if this is set, follow this entity
* <b>show_distance</b> <small>(bool)</small>
* <b>play_sound</b> <small>(string)</small>
* <b>show_effect</b> <small>(bool)</small>
 
=== player_bonuspoints ===
* <b>points</b> <small>(short)</small>
* <b>player_entindex</b> <small>(short)</small>
* <b>source_entindex</b> <small>(short)</small>
 
=== rd_team_points_changed ===
* <b>points</b> <small>(short)</small>
* <b>team</b> <small>(byte)</small>
* <b>method</b> <small>(byte)</small>
 
=== quest_objective_completed ===
For prediction
* <b>quest_item_id_low</b> <small>(long)</small>
* <b>quest_item_id_hi</b> <small>(long)</small>
* <b>quest_objective_id</b> <small>(long)</small>
* <b>scorer_user_id</b> <small>(short)</small>
 
=== quest_request ===
* <b>request</b> <small>(long)</small>
* <b>msg</b> <small>(string)</small> - Protobuf serialized to a string
 
=== quest_response ===
* <b>request</b> <small>(long)</small>
* <b>success</b> <small>(bool)</small>
* <b>msg</b> <small>(string)</small> - Protobuf serialized to a string
 
=== quest_turn_in_state ===
* <b>state</b> <small>(short)</small> - Maps to EQuestTurnInState
 
=== questlog_opened ===
 
=== lobby_updated ===
 
=== match_invites_updated ===
 
=== show_class_layout ===
* <b>show</b> <small>(bool)</small>
 
=== arena_player_notification ===
* <b>player</b> <small>(byte)</small>
* <b>message</b> <small>(byte)</small>
 
=== mainmenu_stabilized ===
* <b>attacker</b> <small>(short)</small>
* <b>victim</b> <small>(short)</small>
* <b>assister</b> <small>(short)</small>
 
=== player_stats_updated ===
* <b>forceupload</b> <small>(bool)</small>
 
=== player_mvp ===
* <b>player</b> <small>(short)</small>
 
=== party_chat ===
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of user who said or did the thing.  May be
* <b>text</b> <small>(string)</small> - The message.  May have different meaning for some types
* <b>type</b> <small>(short)</small> - What sort of message?  ETFPartyChatType enum
 
=== party_member_join ===
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of joined
 
=== party_member_leave ===
* <b>steamid</b> <small>(string)</small> - steamID (64-bit value converted to string) of leaver
 
=== party_criteria_changed ===
 
=== party_invites_changed ===
 
=== party_pref_changed ===
 
=== party_queue_state_changed ===
* <b>matchgroup</b> <small>(short)</small> - ETFMatchGroup
 
=== party_updated ===
 
=== playing_commentary ===
 
=== achievement_earned_local ===
* <b>achievement</b> <small>(short)</small>
 
=== user_data_downloaded ===
fired when achievements/stats are downloaded from Steam or XBox Live
 
=== econ_inventory_connected ===
 
=== gc_lost_session ===
 
=== gc_new_session ===
 
=== player_hintmessage ===
* <b>hintmessage</b> <small>(string)</small> - localizable string of a hint
 
=== restart_timer_time ===
* <b>time</b> <small>(byte)</small> - How much time is left
 
=== teamplay_update_timer ===
 
=== teamplay_round_stalemate ===
* <b>reason</b> <small>(byte)</small> - why the stalemate is occuring
 
=== player_ignited_inv ===
sent when a player is ignited by a pyro who is being invulned, only to the medic who's doing the invulning
* <b>pyro_entindex</b> <small>(byte)</small> - entindex of the pyro who ignited the victim
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player ignited by the pyro
* <b>medic_entindex</b> <small>(byte)</small> - entindex of the medic releasing the invuln
 
=== player_ignited ===
sent when a player is ignited, only to the two players involved
* <b>pyro_entindex</b> <small>(byte)</small> - entindex of the pyro who ignited the victim
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player ignited by the pyro
* <b>weaponid</b> <small>(byte)</small> - weaponid of the weapon used
 
=== player_damaged ===
* <b>amount</b> <small>(short)</small>
* <b>type</b> <small>(long)</small>
 
=== player_jarated ===
sent when a player is jarated, only to the two players involved
* <b>thrower_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
=== player_jarated_fade ===
sent when a player is jarated, only to the two players involved
* <b>thrower_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>victim_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
=== player_shield_blocked ===
sent when a player is jarated, only to the two players involved
* <b>attacker_entindex</b> <small>(byte)</small> - entindex of the player who threw the jarate
* <b>blocker_entindex</b> <small>(byte)</small> - entindex of the player receiving it
 
=== player_extinguished ===
sent when a burning player is extinguished by a medic
* <b>victim</b> <small>(byte)</small> - entindex of the player that was extinguished
* <b>healer</b> <small>(byte)</small> - entindex of the player who did the extinguishing
* <b>itemdefindex</b> <small>(short)</small> - item defindex that did the extinguishing
 
=== player_damage_dodged ===
* <b>damage</b> <small>(short)</small>
 
=== flagstatus_update ===
* <b>userid</b> <small>(short)</small> - user ID of the player who now has the flag
* <b>entindex</b> <small>(long)</small> - ent index of flag
 
=== air_dash ===
* <b>player</b> <small>(byte)</small>
 
=== landed ===
* <b>player</b> <small>(byte)</small>
 
=== vote_maps_changed ===
* <b>type</b> <small>(byte)</small>
* <b>type</b> <small>(byte)</small>
* <b>defindex</b> <small>(long)</small>
* <b>defindex</b> <small>(long)</small>
Line 1,661: Line 1,678:
* <b>erase_history</b> <small>(bool)</small>
* <b>erase_history</b> <small>(bool)</small>


== vote_options ==
=== schema_updated ===
* <b>count</b> <small>(byte)</small> - Number of options - up to MAX_VOTE_OPTIONS
 
* <b>option1</b> <small>(string)</small>
=== rd_rules_state_changed ===
* <b>option2</b> <small>(string)</small>
* <b>option3</b> <small>(string)</small>
* <b>option4</b> <small>(string)</small>
* <b>option5</b> <small>(string)</small>
* <b>voteidx</b> <small>(long)</small>


== vote_passed ==
=== duck_xp_level_up ===
* <b>details</b> <small>(string)</small>
* <b>level</b> <small>(short)</small> - leveled up to what
* <b>param1</b> <small>(string)</small>
* <b>team</b> <small>(byte)</small>
* <b>voteidx</b> <small>(long)</small>


== vote_started ==
=== update_status_item ===
* <b>issue</b> <small>(string)</small>
* <b>index</b> <small>(byte)</small>
* <b>param1</b> <small>(string)</small>
* <b>object</b> <small>(byte)</small>
* <b>team</b> <small>(byte)</small>
* <b>initiator</b> <small>(long)</small> - entity id of the player who initiated the vote
* <b>voteidx</b> <small>(long)</small>


== weapon_equipped ==
=== parachute_deploy ===
* <b>class</b> <small>(string)</small>
* <b>index</b> <small>(short)</small> - entindex of the player
* <b>entindex</b> <small>(long)</small>


== winlimit_changed ==
=== parachute_holster ===
* <b>delay</b> <small>(float)</small>
* <b>index</b> <small>(short)</small> - entindex of the player

Latest revision as of 10:46, 20 May 2025

This article lists game events in Team Fortress 2. These were retrieved from serverevents.res, gameevents.res, modevents.res and replayevents.res in the resource folder.

Warning.pngWarning:Some events have parameter 'class' which cannot be accessed with dot syntax, i.e. params.class, as class is a reserved word in Squirrel. Instead, use string indexing like so: params["class"]
Tip.pngTip:To see what events fire during the game, download this script (right click and Save Page), place it into your tf/scripts/vscripts/ folder and run script_execute showevents in console.
Todo: Check which events are shared (if possible?)

Serverside

achievement_earned

  • player (byte) - entindex of the player
  • achievement (short) - achievement ID

achievement_event

  • achievement_name (string) - non-localized name of achievement
  • cur_val (short) - # of steps toward achievement
  • max_val (short) - total # of steps in achievement

achievement_increment

  • achievement_id (long) - ID of achievement that went up
  • cur_val (short) - # of steps toward achievement
  • max_val (short) - total # of steps in achievement

ammo_pickup

  • ammo_index (long)
  • amount (long)
  • total (long)

arena_match_maxstreak

  • team (byte)
  • streak (byte)

arena_round_start

called when round is active, players can move

arena_win_panel

  • panel_style (byte) - for client to determine layout
  • winning_team (byte)
  • winreason (byte) - the reason the team won
  • cappers (string) - string where each character is a player index of someone that capped
  • flagcaplimit (short) - if win reason was flag cap limit, the value of the flag cap limit
  • blue_score (short) - red team score
  • red_score (short) - blue team score
  • blue_score_prev (short) - previous red team score
  • red_score_prev (short) - previous blue team score
  • round_complete (short) - is this a complete round, or the end of a mini-round
  • player_1 (short)
  • player_1_damage (short)
  • player_1_healing (short)
  • player_1_lifetime (short)
  • player_1_kills (short)
  • player_2 (short)
  • player_2_damage (short)
  • player_2_healing (short)
  • player_2_lifetime (short)
  • player_2_kills (short)
  • player_3 (short)
  • player_3_damage (short)
  • player_3_healing (short)
  • player_3_lifetime (short)
  • player_3_kills (short)
  • player_4 (short)
  • player_4_damage (short)
  • player_4_healing (short)
  • player_4_lifetime (short)
  • player_4_kills (short)
  • player_5 (short)
  • player_5_damage (short)
  • player_5_healing (short)
  • player_5_lifetime (short)
  • player_5_kills (short)
  • player_6 (short)
  • player_6_damage (short)
  • player_6_healing (short)
  • player_6_lifetime (short)
  • player_6_kills (short)

arrow_impact

  • attachedEntity (short)
  • shooter (short)
  • boneIndexAttached (short)
  • bonePositionX (float)
  • bonePositionY (float)
  • bonePositionZ (float)
  • boneAnglesX (float)
  • boneAnglesY (float)
  • boneAnglesZ (float)
  • projectileType (short)
  • isCrit (bool)

bonus_updated

  • numadvanced (short)
  • numbronze (short)
  • numsilver (short)
  • numgold (short)

break_breakable

  • entindex (long)
  • userid (short)
  • material (byte) - BREAK_GLASS, BREAK_WOOD, etc

break_prop

  • entindex (long)
  • userid (short)

building_healed

  • building (short)
  • healer (short)
  • amount (short)

christmas_gift_grab

  • userid (short)

cl_drawline

  • player (byte) - index of the player
  • panel (byte) - type of panel
  • line (byte) - type of line
  • x (float)
  • y (float)

client_beginconnect

client tries to connect to server

  • address (string) - Name we used to connect to the server
  • ip (long)
  • port (short) - server port
  • source (string) - what caused us to attempt this connection? (blank for general command line, "serverbrowser", "quickplay", etc)

client_connected

client has completed the challenge / handshake process and is in SIGNONSTATE_CONNECTED

  • address (string) - Name we used to connect to the server
  • ip (long)
  • port (short) - server port

client_disconnect

client side disconnect message

  • message (string) - Why are we disconnecting? This could be a localization token or an English-language string

client_fullconnect

  • address (string) - Name we used to connect to the server
  • ip (long)
  • port (short) - server port

competitive_stats_update

  • index (short) - entindex of the player
  • kills_rank (byte) - num std deviations above
  • score_rank (byte)
  • damage_rank (byte)
  • healing_rank (byte)
  • support_rank (byte)

competitive_victory

conga_kill

  • index (short) - entindex of the player

controlpoint_endtouch

  • player (short) - entindex of the player
  • area (short) - index of the control point area

controlpoint_fake_capture

  • player (short) - entindex of the player
  • int_data (short)

controlpoint_fake_capture_mult

  • player (short) - entindex of the player
  • int_data (short)

controlpoint_pulse_element

  • player (short) - entindex of the player

controlpoint_starttouch

  • player (short) - entindex of the player
  • area (short) - index of the control point area

controlpoint_updatecapping

  • index (short) - index of the cap being updated

controlpoint_updateimages

  • index (short) - index of the cap being updated

controlpoint_updatelayout

  • index (short) - index of the cap being updated

controlpoint_updateowner

  • index (short) - index of the cap being updated

cross_spectral_bridge

  • player (short) - userid of the player that crossed

crossbow_heal

  • healer (byte) - userid of the Healer
  • target (byte) - userid of the player that got hit
  • amount (short) - amount that was healed

ctf_flag_captured

  • capping_team (short)
  • capping_team_score (short)

damage_mitigated

  • mitigator (byte) - userid of the player who provided the mitigation
  • damaged (byte) - userid of the player who took the damage
  • amount (short) - amount that was mitigated
  • itemdefindex (short) - defindex of the item that provided the mitigation

damage_prevented

  • preventor (short) - Who prevented the damage
  • victim (short) - Who took the damage that was prevented
  • amount (short) - How much got prevented
  • condition (short) - Which condition did the preventing

damage_resisted

  • entindex (byte)

deadringer_cheat_death

  • spy (byte) - userid of the Spy that cheat the death
  • attacker (byte) - userid of the player that caused the cheat death to happen

demoman_det_stickies

  • player (short) - entindex of the detonating player

deploy_buff_banner

  • buff_type (byte) - type of buff (skin index)
  • buff_owner (short) - user ID of the person who gets the banner

doomsday_rocket_open

  • team (byte) - which team opened the rocket

duel_status

  • killer (short)
  • score_type (short)
  • initiator (short)
  • target (short)
  • initiator_score (short)
  • target_score (short)

enter_vehicle

  • vehicle (long) - entindex of the vehicle

entity_killed

  • entindex_killed (long)
  • entindex_attacker (long)
  • entindex_inflictor (long)
  • damagebits (long)

environmental_death

  • killer (byte) - index of the killer
  • victim (byte) - index of the victim

escape_hell

  • player (short) - userid of the player that escaped

escaped_loot_island

  • player (short) - userid of the escaping player

eyeball_boss_escape_imminent

  • level (short)
  • time_remaining (byte)

eyeball_boss_escaped

  • level (short)

eyeball_boss_killed

  • level (short)

eyeball_boss_killer

  • level (short)
  • player_entindex (byte)

eyeball_boss_stunned

  • level (short)
  • player_entindex (byte)

eyeball_boss_summoned

  • level (short)

fish_notice

  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killed used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • assister (short) - user ID of assister
  • weapon_logclassname (string) - weapon name that should be printed on the log
  • stun_flags (short) - victim's stun flags at the moment of death
  • death_flags (short) - death flags.
  • silent_kill (bool)
  • assister_fallback (string) - contains a string to use if "assister" is -1

fish_notice__arm

  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killed used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • assister (short) - user ID of assister
  • weapon_logclassname (string) - weapon name that should be printed on the log
  • stun_flags (short) - victim's stun flags at the moment of death
  • death_flags (short) - death flags.
  • silent_kill (bool)
  • assister_fallback (string) - contains a string to use if "assister" is -1

flag_carried_in_detection_zone

flare_ignite_npc

  • entindex (long) - entity ignited


game_end

a game ended

  • winner (byte) - winner team/user id

game_init

sent when a new game is started

game_message

a message send by game logic to everyone

  • target (byte) - 0 = console, 1 = HUD
  • text (string) - the message text

game_start

a new game starts

  • roundslimit (long) - max round
  • timelimit (long) - time limit
  • fraglimit (long) - frag limit
  • objective (string) - round objective

gameui_activate

gameui_hide

halloween_boss_killed

  • boss (short) - 1=HHH 2=Monoculus 3=Merasmus
  • killer (short) - userid of the killing player

halloween_duck_collected

  • collector (short) - userid of the collecting player

halloween_pumpkin_grab

  • userid (short)

halloween_skeleton_killed

  • player (short) - userid of the player that killed the skeleton

halloween_soul_collected

  • intended_target (byte) - userid of the intended target
  • collecting_player (byte) - userid of the player who picked up the soul
  • soul_count (byte) - number of souls collected (gift boxes)

helicopter_grenade_punt_miss

host_quit

intro_finish

  • player (short) - entindex of the player

intro_nextcamera

  • player (short) - entindex of the player

item_found

  • player (byte) - entindex of the player
  • quality (byte) - quality of the item
  • method (byte) - method by which we acquired the item
  • itemdef (long) - the item definition index
  • isstrange (byte)
  • isunusual (byte)
  • wear (float)

item_pickup

  • userid (short)
  • item (string)

item_schema_initialized

kill_in_hell

  • killer (short) - userid of the killer
  • victim (short) - userid of the victim

kill_refills_meter

  • index (short) - entindex of the player

killed_capping_player

  • cp (byte) - index of the point
  • killer (byte) - index of the killer
  • victim (byte) - index of the victim
  • assister (byte) - index of the assister

leave_vehicle

  • vehicle (long) - entindex of the vehicle

medic_death

  • userid (short) - user ID who died
  • attacker (short) - user ID who killed
  • healing (short) - amount healed in this life
  • charged (bool) - had a full ubercharge?

medic_defended

  • userid (short)
  • medic (short)

medigun_shield_blocked_damage

  • userid (short) - user ID of the player using the shield
  • damage (float) - damage that was blocked

merasmus_escape_warning

  • level (short)
  • time_remaining (byte)

merasmus_escaped

  • level (short)

merasmus_killed

  • level (short)

merasmus_prop_found

  • player (short) - userid of the player that found the prop Merasmus was hiding in

merasmus_stunned

  • player (short) - userid of the stunning player

merasmus_summoned

  • level (short)

minigame_win

  • team (byte) - which team won the minigame
  • type (byte) - what type of minigame was won

minigame_won

  • player (short) - userid of the winning player
  • game (short) - index of the game

mvm_adv_wave_complete_no_gates

  • index (short) - wave index

mvm_adv_wave_killed_stun_radio

mvm_begin_wave

  • wave_index (short)
  • max_waves (short)
  • advanced (short)

mvm_bomb_alarm_triggered

mvm_bomb_carrier_killed

  • level (short) - upgrade level of the carrier

mvm_bomb_deploy_reset_by_player

  • player (short)

mvm_bomb_reset_by_player

  • player (short)

mvm_creditbonus_all

mvm_creditbonus_all_advanced

mvm_creditbonus_wave

mvm_kill_robot_delivering_bomb

  • player (short) - entindex of the player

mvm_mannhattan_pit

mvm_medic_powerup_shared

  • player (short) - entindex of the player

mvm_mission_complete

  • mission (string)

mvm_mission_update

  • class (short)
  • count (short)

mvm_pickup_currency

  • player (short) - entindex of the player
  • currency (short)

mvm_quick_sentry_upgrade

  • player (short) - entindex of the player

mvm_reset_stats

mvm_scout_marked_for_death

  • player (short) - entindex of the player

mvm_sentrybuster_detonate

  • player (short) - entindex of the target player
  • det_x (float) - origin of the sentry buster
  • det_y (float)
  • det_z (float)

mvm_sentrybuster_killed

  • sentry_buster (short) - entindex

mvm_sniper_headshot_currency

  • userid (short) - user ID of the player
  • currency (short) - currency collected

mvm_tank_destroyed_by_players

mvm_wave_complete

  • advanced (bool) - is this an advanced popfile

mvm_wave_failed

nav_blocked

  • area (long)
  • blocked (bool)

npc_hurt

Fired when an Engineer building (obj_sentrygun, obj_dispenser, obj_teleporter), base_boss, MvM tank (tank_boss) or Halloween enemy (headless_hatman, eyeball_boss, merasmus, tf_zombie) is damaged.

  • entindex (short)
  • health (short)
  • attacker_player (short)
  • weaponid (short)
  • damageamount (short)
  • crit (bool)
  • boss (short) - 1=HHH 2=Monoculus 3=Merasmus

num_cappers_changed

  • index (short) - index of the trigger
  • count (byte) - number of cappers (-1 for blocked)

object_deflected

  • userid (short) - player who deflected the object
  • ownerid (short) - owner of the object
  • weaponid (short) - weapon id (0 means the player in ownerid was pushed)
  • object_entindex (short) - entindex of the object that got deflected

object_destroyed

  • userid (short) - user ID who died
  • attacker (short) - user ID who killed
  • assister (short) - user ID of assister
  • weapon (string) - weapon name killer used
  • weaponid (short) - id of the weapon used
  • objecttype (short) - type of object destroyed
  • index (short) - index of the object destroyed
  • was_building (bool) - object was being built when it died
  • team (short) - building's team

object_detonated

  • userid (short) - user ID of the object owner
  • objecttype (short) - type of object removed
  • index (short) - index of the object removed

object_removed

  • userid (short) - user ID of the object owner
  • objecttype (short) - type of object removed
  • index (short) - index of the object removed

overtime_nag

pass_ball_blocked

  • owner (short)
  • blocker (short)

pass_ball_stolen

  • victim (short)
  • attacker (short)

pass_free

  • owner (short)
  • attacker (short)

pass_get

  • owner (short)
  • team (short)

pass_pass_caught

  • passer (short)
  • catcher (short)
  • dist (float)
  • duration (float)

pass_score

  • scorer (short)
  • assister (short)
  • points (byte)

path_track_passed

  • index (short) - entity handle of the node being passed (not the index!)
Tip.pngTip:To retrieve the entity index and therefore the script handle: EntIndexToHScript(params.index & (Constants.Server.MAX_EDICTS - 1))

payload_pushed

  • pusher (byte) - userid of the player who pushed
  • distance (short) - how far they pushed

physgun_pickup

  • entindex (long) - entity picked up

player_abandoned_match

  • game_over (bool)

player_activate

  • userid (short) - user ID on server

player_askedforball

  • userid (short)

player_buff

  • userid (short) - user ID of the player the buff is being applied to
  • buff_owner (short) - user ID of the player with the banner
  • buff_type (byte) - type of buff

player_builtobject

  • userid (short) - user ID of the builder
  • object (short) - type of object built
  • index (short) - index of the object

player_buyback

  • player (short)
  • cost (short)

player_carryobject

  • userid (short) - user ID of the builder
  • object (short) - type of object built
  • index (short) - index of the object

player_changeclass

  • userid (short) - user ID who changed class
  • class (short) - class that they changed to

player_changename

  • userid (short) - user ID on server
  • oldname (string) - players old (current) name
  • newname (string) - players new name

player_chargedeployed

  • userid (short) - user ID of medic who deployed charge
  • targetid (short) - user ID of who the medic charged

player_chat

a public player chat

  • teamonly (bool) - true if team only chat
  • userid (short) - chatting player
  • text (string) - chat text

player_class

a player changed his class

  • userid (short) - user ID on server
  • class (string) - new player class / model

player_connect

A new client has connected. This does NOT fire between level changes as the player is already connected. Use player_spawn instead if you need to catch every player entity that is created.

  • name (string) - player name
  • index (byte) - player slot (entity index-1)
  • userid (short) - user ID on server (unique on server)
  • networkid (string) - player network (i.e steam) id
  • address (string) - ip:port
  • bot (short) - is a bot

player_connect_client

a new client connected

  • name (string) - player name
  • index (byte) - player slot (entity index-1)
  • userid (short) - user ID on server (unique on server)
  • networkid (string) - player network (i.e steam) id
  • bot (short) - is a bot

player_death

Fired when a player dies. This shows up in the kill feed.

Warning.pngWarning:This also fires when a Spy feigns death using the Dead Ringer. Make sure to check for this case using if (params.death_flags & 32)!
  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
Warning.pngWarning:If you are retrieving a handle from this, i.e. with GetPlayerFromUserID, ALWAYS check if it's not null first! If the player died from the environment or NPCs, the attacker handle will be null.
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killer used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • assister (short) - user ID of assister
  • weapon_logclassname (string) - weapon name that should be printed on the log
  • stun_flags (short) - victim's stun flags at the moment of death
  • death_flags (short) - death flags
  • silent_kill (bool)
  • playerpenetratecount (short)
  • assister_fallback (string) - contains a string to use if "assister" is -1
  • kill_streak_total (short) - Kill streak count (level)
  • kill_streak_wep (short) - Kill streak for killing weapon
  • kill_streak_assist (short) - Kill streak for assister count
  • kill_streak_victim (short) - Victims kill streak
  • ducks_streaked (short) - Duck streak increment from this kill
  • duck_streak_total (short) - Duck streak count for attacker
  • duck_streak_assist (short) - Duck streak count for assister
  • duck_streak_victim (short) - (former) duck streak count for victim
  • rocket_jump (bool) - was the victim rocket jumping
  • weapon_def_index (long) - item def index of weapon killer used
  • crit_type (short) - Crit type of kill. 0: None 1: Mini 2: Full
Note.pngNote:The fields below are unused, check death_flags instead.
  • dominated (short) - did killer dominate victim with this kill
  • assister_dominated (short) - did assister dominate victim with this kill
  • revenge (short) - did killer get revenge on victim with this kill
  • assister_revenge (short) - did assister get revenge on victim with this kill
  • first_blood (bool) - was this a first blood kill
  • feign_death (bool) - the victim is feign death

player_destroyed_pipebomb

  • userid (short)

player_directhit_stun

  • attacker (short) - entindex of the attacker
  • victim (short) - entindex of the victim

player_disconnect

A client has disconnected. The player handle and script scope still exists when this event fires, as it persists for a frame after disconnect.

  • userid (short) - user ID on server
  • reason (string) - "self", "kick", "ban", "cheat", "error"
  • name (string) - player name
  • networkid (string) - player network (i.e steam) id
  • bot (short) - is a bot

player_domination

  • dominator (short) - userID of who gained domination
  • dominated (short) - userID of who got dominated
  • dominations (short) - Number of dominations this dominator has

player_dropobject

  • userid (short) - user ID of the builder
  • object (short) - type of object built
  • index (short) - index of the object

player_escort_score

  • player (byte)
  • points (byte)

player_healed

  • patient (short)
  • healer (short)
  • amount (short)

player_healedmediccall

local player heals someone who called for medic.

  • userid (short) - userid of person who got healed

player_healonhit

  • amount (short)
  • entindex (byte)
  • weapon_def_index (long) - item def index of the healing weapon

player_highfive_cancel

  • entindex (byte)

player_highfive_start

  • entindex (byte)

player_highfive_success

  • initiator_entindex (byte)
  • partner_entindex (byte)

player_hurt

  • userid (short)
  • health (short) - if <= 0, then this will play the killsound
  • attacker (short)
  • damageamount (short)
  • custom (short)
  • showdisguisedcrit (bool) - if our attribute specifically crits disguised enemies we need to show it on the client
  • crit (bool) - legacy only, use bonuseffect
  • minicrit (bool) - legacy only, use bonuseffect
  • allseecrit (bool)
  • weaponid (short)
  • bonuseffect (byte) - type of damage effect, see constants page.
Warning.pngWarning:A value of 4 is no damage effect. 0 is crits!

player_info

a player changed his name

  • name (string) - player name
  • index (byte) - player slot (entity index-1)
  • userid (short) - user ID on server (unique on server)
  • networkid (string) - player network (i.e steam) id
  • bot (bool) - true if player is a AI bot

player_initial_spawn

  • index (short) - entindex of the player

player_invulned

  • userid (short)
  • medic_userid (short)

player_killed_achievement_zone

  • attacker (short) - entindex of the attacker
  • victim (short) - entindex of the victim
  • zone_id (short) - type of area (0 for general, 1 for capture zone)

player_regenerate

player_rocketpack_pushed

  • pusher (short) - userID of who pushed
  • pushed (short) - userID of who got pushed

player_sapped_object

  • userid (short) - user ID of the spy
  • ownerid (short) - user ID of the building owner
  • object (byte)
  • sapperid (short) - index of the sapper

player_say

  • userid (short) - user ID on server
  • text (string) - the say text

player_score

players scores changed

  • userid (short) - user ID on server
  • kills (short) - # of kills
  • deaths (short) - # of deaths
  • score (short) - total game score

player_score_changed

  • player (byte)
  • delta (short)

player_shoot

Note.pngNote:Not implemented.
  • userid (short) - user ID on server
  • weapon (byte) - weapon ID
  • mode (byte) - weapon mode

player_spawn

This event will be sent once when the player entity is created, i.e. they joined the server or they are loading in after a map change. In this case, team is equal to 0 (unassigned). Each time afterwards, the event will only be fired when the player spawns alive on red or blue team. This is also fired once when SourceTV is loaded in.

  • userid (short) - user ID who spawned
  • team (short) - team they spawned on
  • class (short) - class they spawned as

player_stealsandvich

  • owner (short)
  • target (short)

player_stunned

  • stunner (short)
    Warning.pngWarning:If there's no attacker, this key won't exist (such as being stunned after hitting a wall with a bumper kart)
  • victim (short)
  • victim_capping (bool)
  • big_stun (bool)

player_team

Fired when player joins a team.

  • userid (short) - user ID on server
  • team (byte) - team id
  • oldteam (byte) - old team id
  • disconnect (bool) - team change because player disconnects
  • autoteam (bool) - true if the player was auto assigned to the team
  • silent (bool) - if true wont print the team join messages
  • name (string) - player's name

player_teleported

  • userid (short) - userid of the player
  • builderid (short) - userid of the player who built the teleporter
  • dist (float) - distance the player was teleported

player_turned_to_ghost

  • userid (short) - user ID of the player who changed to a ghost

player_upgraded

player_upgradedobject

  • userid (short) - user ID of the builder
  • object (short) - type of object built
  • index (short) - index of the object
  • isbuilder (bool)

player_use

  • userid (short) - user ID on server
  • entity (short) - entity used by player

player_used_powerup_bottle

  • player (short)
  • type (short)
  • time (float)

post_inventory_application

Fired when the player has items resupplied, i.e. when the player spawns or touches resupply (func_regenerate).

  • userid (short)

projectile_direct_hit

  • attacker (byte) - index of the player who shot the projectile
  • victim (byte) - index of the player who got direct-ht
  • weapon_def_index (long) - defindex of the direct hitting weapon

projectile_removed

  • attacker (byte)
  • weapon_def_index (long)
  • num_hit (byte)
  • num_direct_hit (byte)

pumpkin_lord_killed

pumpkin_lord_summoned

pve_win_panel

  • panel_style (byte) - for client to determine layout
  • winning_team (byte)
  • winreason (byte) - the reason the team won

quest_map_data_changed

  • igniter (short) - entindex of the igniter
  • douser (short) - entindex of the douser
  • victim (short) - entindex of the victim

quest_progress

  • owner (short)
  • scorer (short)
  • type (byte)
  • completed (bool)
  • quest_defindex (long)

ragdoll_dissolved

  • entindex (long)

raid_spawn_mob

raid_spawn_squad

rd_player_score_points

  • player (short)
  • method (short)
  • amount (short)

rd_robot_impact

  • entindex (short)
  • impulse_x (float)
  • impulse_y (float)
  • impulse_z (float)

rd_robot_killed

  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killed used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • weapon_logclassname (string) - weapon name that should be printed on the log

recalculate_holidays

recalculate_truce

rematch_failed_to_create

  • map_index (byte) - what they voted for
  • vote (byte) - what the vote was

remove_nemesis_relationships

  • player (short) - entindex of the player who should reset

replay_endrecord

replay_replaysavailable

replay_servererror

  • error (string)

replay_sessioninfo

Sent when the server begins recording, or when a client first connects - only sent once per recording session

  • sn (string) - session name
  • di (byte) - dump interval
  • cb (long) - current block
  • st (long) - session start tick

replay_startrecord

Sent when the server begins recording - only used to display UI

respawn_ghost

  • reviver (short) - userid of the reviving player
  • ghost (short) - userid of the player that got revived

revive_player_complete

  • entindex (short) - entindex of the medic

revive_player_notify

  • entindex (short)
  • marker_entindex (short)

revive_player_stopped

  • entindex (short)

rocket_jump

  • userid (short)
  • playsound (bool)

rocket_jump_landed

  • userid (short)

rocketpack_landed

  • userid (short)

rocketpack_launch

  • userid (short)
  • playsound (bool)

round_end

  • winner (byte) - winner team/user i
  • reason (byte) - reson why team won
  • message (string) - end round message

round_start

  • timelimit (long) - round time limit in seconds
  • fraglimit (long) - frag limit in seconds
  • objective (string) - round objective

rps_taunt_event

  • winner (short) - entindex of the winning player
  • winner_rps (byte) - winner's selection
  • loser (short) - entindex of the losing player
  • loser_rps (byte) - loser's selection

scorestats_accumulated_reset

Fired when round resets due to mp_restartgame.

scorestats_accumulated_update

Fired right before map entities are cleaned up for a round restart.

This event is not fired in Mann Vs Machine mode. For MvM, use recalculate_holidays and check if GetRoundState() === 3 is true, which indicates a mission reset.

scout_grand_slam

  • scout_id (short)
  • target_id (short)

sentry_on_go_active

  • index (short)

server_addban

  • name (string) - player name
  • userid (short) - user ID on server
  • networkid (string) - player network (i.e steam) id
  • ip (string) - IP address
  • duration (string) - length of the ban
  • by (string) - banned by...
  • kicked (bool) - whether the player was also kicked

server_changelevel_failed

  • levelname (string) - The level name that failed changelevel

server_cvar

a server console var has changed

  • cvarname (string) - cvar name, eg "mp_roundtime"
  • cvarvalue (string) - new cvar value

server_message

a generic server message

  • text (string) - the message text

server_removeban

  • networkid (string) - player network (i.e steam) id
  • ip (string) - IP address
  • by (string) - removed by...

server_shutdown

server shut down

  • reason (string) - reason why server was shut down

server_spawn

send once a server starts

  • hostname (string) - public host name
  • address (string) - hostame, IP or DNS name
  • ip (long)
  • port (short) - server port
  • game (string) - game dir
  • mapname (string) - map name
  • maxplayers (long) - max players
  • os (string) - WIN32, LINUX
  • dedicated (bool) - true if dedicated server
  • password (bool) - true if password protected

show_match_summary

  • success (bool)

show_vs_panel

  • show (bool)

single_player_death

skeleton_killed_quest

  • player (short) - userid of the player that killed the skeleton

skeleton_king_killed_quest

  • player (short) - userid of the player that killed the skeleton

slap_notice

  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killed used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • assister (short) - user ID of assister
  • weapon_logclassname (string) - weapon name that should be printed on the log
  • stun_flags (short) - victim's stun flags at the moment of death
  • death_flags (short) - death flags.
  • silent_kill (bool)
  • assister_fallback (string) - contains a string to use if "assister" is -1


special_score

  • player (byte) - index of the scorer

spy_pda_reset

stats_resetround

sticky_jump

  • userid (short)
  • playsound (bool)

sticky_jump_landed

  • userid (short)

tagged_player_as_it

  • player (short) - userid of the tagging player

take_armor

  • amount (long)
  • total (long)

take_health

  • amount (long)
  • total (long)

team_info

info about team

  • teamid (byte) - unique team id
  • teamname (string) - team name eg "Team Blue"

team_leader_killed

  • killer (byte) - index of the killer
  • victim (byte) - index of the victim

team_score

team score changed

  • teamid (byte) - team id
  • score (short) - total team score

teamplay_alert

  • alert_type (short) - which alert type is this (scramble, etc)?

teamplay_broadcast_audio

  • team (byte) - which team should hear the broadcast. 0 will make everyone hear it.
  • sound (string) - sound to play
  • additional_flags (short) - additional sound flags to pass through to sound system
  • player (short) - entindex of the player source or -1

teamplay_capture_blocked

  • cp (byte) - index of the point that was blocked
  • cpname (string) - name of the point
  • blocker (byte) - index of the player that blocked the cap
  • victim (byte) - index of the player that died, causing the block

teamplay_capture_broken

  • cp (byte)
  • cpname (string)
  • time_remaining (float)

teamplay_flag_event

  • player (short) - player this event involves
  • carrier (short) - the carrier if needed
  • eventtype (short) - pick up, capture, defend, dropped
  • home (byte) - whether or not the flag was home (only set for TF_FLAGEVENT_PICKUP)
  • team (byte) - which team the flag belongs to

teamplay_game_over

  • reason (string) - why the game is over ( timelimit, winlimit )

teamplay_map_time_remaining

  • seconds (short)

teamplay_overtime_begin

teamplay_overtime_end

teamplay_point_captured

  • cp (byte) - index of the point that was captured
  • cpname (string) - name of the point
  • team (byte) - which team capped
  • cappers (string) - string where each character is a player index of someone that capped

teamplay_point_locked

  • cp (byte) - index of the point being captured
  • cpname (string) - name of the point
  • team (byte) - which team currently owns the point

teamplay_point_startcapture

  • cp (byte) - index of the point being captured
  • cpname (string) - name of the point
  • team (byte) - which team currently owns the point
  • capteam (byte) - which team is capping
  • cappers (string) - string where each character is a player index of someone capping
  • captime (float) - time between when this cap started and when the point last changed hands

teamplay_point_unlocked

  • cp (byte) - index of the point being captured
  • cpname (string) - name of the point
  • team (byte) - which team currently owns the point

teamplay_pre_round_time_left

  • time (short)

teamplay_ready_restart

teamplay_restart_round

teamplay_round_active

called when round is active, players can move

teamplay_round_restart_seconds

  • seconds (short)

teamplay_round_selected

  • round (string) - name of the round selected

teamplay_round_start

round restart

  • full_reset (bool) - is this a full reset of the map

teamplay_round_win

  • team (byte) - which team won the round
  • winreason (byte) - the reason the team won
  • flagcaplimit (short) - if win reason was flag cap limit, the value of the flag cap limit
  • full_round (short) - was this a full round or a mini-round
  • round_time (float) - elapsed time of this round
  • losing_team_num_caps (short) - # of caps this round by losing team
  • was_sudden_death (byte) - did a team win this after entering sudden death

teamplay_setup_finished

teamplay_suddendeath_begin

teamplay_suddendeath_end

teamplay_team_ready

  • team (byte) - which team is ready

teamplay_teambalanced_player

  • player (short) - entindex of the player
  • team (byte) - which team the player is being moved to

teamplay_timer_flash

  • time_remaining (short) - how many seconds until the round ends

teamplay_timer_time_added

  • timer (short) - entindex of the timer
  • seconds_added (short) - how many seconds were added to the round timer

teamplay_waiting_abouttoend

teamplay_waiting_begins

teamplay_waiting_ends

teamplay_win_panel

  • panel_style (byte) - for client to determine layout
  • winning_team (byte)
  • winreason (byte) - the reason the team won
  • cappers (string) - string where each character is a player index of someone that capped
  • flagcaplimit (short) - if win reason was flag cap limit, the value of the flag cap limit
  • blue_score (short) - red team score
  • red_score (short) - blue team score
  • blue_score_prev (short) - previous red team score
  • red_score_prev (short) - previous blue team score
  • round_complete (short) - is this a complete round, or the end of a mini-round
  • rounds_remaining (short) - # of rounds remaining for wining team, if mini-round
  • player_1 (short)
  • player_1_points (short)
  • player_2 (short)
  • player_2_points (short)
  • player_3 (short)
  • player_3_points (short)
  • killstreak_player_1 (short)
  • killstreak_player_1_count (short)
  • game_over (byte)

teams_changed

tf_game_over

  • reason (string) - why the game is over ( timelimit, winlimit )

tf_map_time_remaining

  • seconds (long)

throwable_hit

  • userid (short) - user ID who died
  • victim_entindex (long)
  • inflictor_entindex (long) - ent index of inflictor (a sentry, for example)
  • attacker (short) - user ID who killed
  • weapon (string) - weapon name killer used
  • weaponid (short) - ID of weapon killed used
  • damagebits (long) - bits of type of damage
  • customkill (short) - type of custom kill
  • assister (short) - user ID of assister
  • weapon_logclassname (string) - weapon name that should be printed on the log
  • stun_flags (short) - victim's stun flags at the moment of death
  • death_flags (short) - death flags.
  • silent_kill (bool)
  • assister_fallback (string) - contains a string to use if "assister" is -1
  • totalhits (short) - Number of hits his player has done

tournament_enablecountdown

tournament_stateupdate

  • userid (short) - user ID on server
  • namechange (bool)
  • readystate (short)
  • newname (string) - players new name

training_complete

  • next_map (string) - next map (if any)
  • map (string) - the name of the map this screen is on.
  • text (string) - text to show

upgrades_file_changed

  • path (string)

vote_cast

  • vote_option (byte) - which option the player voted on
  • team (short)
  • entityid (long) - entity id of the voter
  • voteidx (long)

vote_ended

vote_options

  • count (byte) - Number of options - up to MAX_VOTE_OPTIONS
  • option1 (string)
  • option2 (string)
  • option3 (string)
  • option4 (string)
  • option5 (string)
  • voteidx (long)

weapon_equipped

  • class (string)
  • entindex (long)

winlimit_changed

  • delay (float)

Clientside

spec_target_updated

show_freezepanel

  • killer (short) - entindex of the killer entity

hide_freezepanel

freezecam_started

controlpoint_initialized

controlpoint_unlock_updated

  • index (short) - index of the cap being updated
  • time (float) - time

controlpoint_timer_updated

  • index (short) - index of the cap being updated
  • time (float) - time

escort_speed

  • team (byte) - which team
  • speed (byte)
  • players (byte)

escort_progress

  • team (byte) - which team
  • progress (float)
  • reset (bool)

escort_recede

  • team (byte) - which team
  • recedetime (float)

vote_changed

  • vote_option1 (byte)
  • vote_option2 (byte)
  • vote_option3 (byte)
  • vote_option4 (byte)
  • vote_option5 (byte)
  • potentialVotes (byte)
  • voteidx (long)

gameui_activated

gameui_hidden

game_newmap

send when new map is completely loaded

  • mapname (string) - map name

items_acknowledged

  • blocker (short) - entindex of the blocker
  • victim (short) - entindex of the victim

store_pricesheet_updated

cart_updated

inventory_updated

hltv_changed_mode

  • oldmode (short)
  • newmode (short)
  • obs_target (short)

hltv_changed_target

  • mode (short)
  • old_target (short)
  • obs_target (short)

vote_failed

  • team (byte)
  • voteidx (long)

vote_started

  • issue (string)
  • param1 (string)
  • team (byte)
  • initiator (long) - entity id of the player who initiated the vote
  • voteidx (long)

vote_passed

  • details (string)
  • param1 (string)
  • team (byte)
  • voteidx (long)

replay_saved

replay_youtube_stats

  • views (long)
  • likes (long)
  • favorited (long)

base_player_teleported

  • entindex (short)

browse_replays

entered_performance_mode

building_info_changed

  • building_type (byte)
  • object_mode (byte)
  • remove (byte)

scout_slamdoll_landed

  • target_index (short)
  • x (float)
  • y (float)
  • z (float)

localplayer_changeteam

localplayer_changeclass

localplayer_becameobserver

localplayer_changedisguise

  • disguised (bool)

localplayer_builtobject

  • object (short) - type of object built
  • object_mode (short) - used for teleporters: entrance vs. exit
  • index (short) - index of the object

localplayer_chargeready

local player has full medic charge

localplayer_pickup_weapon

localplayer_respawn

localplayer_score_changed

  • score (short)

localplayer_winddown

local player minigun winddown

player_account_changed

  • old_value (short)
  • new_value (short)

localplayer_healed

  • amount (short)

player_currency_changed

  • currency (short)

player_calledformedic

  • userid (short)

player_healedbymedic

  • medic (byte)

player_pinned

  • pinned (byte)

hide_annotation

  • id (long)

show_annotation

  • worldPosX (float)
  • worldPosY (float)
  • worldPosZ (float)
  • worldNormalX (float)
  • worldNormalY (float)
  • worldNormalZ (float)
  • id (long)
  • text (string) - name (unlocalized)
  • lifetime (float)
  • visibilityBitfield (long) - bitfield of the players that can see this. If 0, everyone can see it
Warning.pngWarning:This was only intended for supporting 32 players, players above that index are not considered.
  • follow_entindex (long) - if this is set, follow this entity
  • show_distance (bool)
  • play_sound (string)
  • show_effect (bool)

player_bonuspoints

  • points (short)
  • player_entindex (short)
  • source_entindex (short)

rd_team_points_changed

  • points (short)
  • team (byte)
  • method (byte)

quest_objective_completed

For prediction

  • quest_item_id_low (long)
  • quest_item_id_hi (long)
  • quest_objective_id (long)
  • scorer_user_id (short)

quest_request

  • request (long)
  • msg (string) - Protobuf serialized to a string

quest_response

  • request (long)
  • success (bool)
  • msg (string) - Protobuf serialized to a string

quest_turn_in_state

  • state (short) - Maps to EQuestTurnInState

questlog_opened

lobby_updated

match_invites_updated

show_class_layout

  • show (bool)

arena_player_notification

  • player (byte)
  • message (byte)

mainmenu_stabilized

  • attacker (short)
  • victim (short)
  • assister (short)

player_stats_updated

  • forceupload (bool)

player_mvp

  • player (short)

party_chat

  • steamid (string) - steamID (64-bit value converted to string) of user who said or did the thing. May be
  • text (string) - The message. May have different meaning for some types
  • type (short) - What sort of message? ETFPartyChatType enum

party_member_join

  • steamid (string) - steamID (64-bit value converted to string) of joined

party_member_leave

  • steamid (string) - steamID (64-bit value converted to string) of leaver

party_criteria_changed

party_invites_changed

party_pref_changed

party_queue_state_changed

  • matchgroup (short) - ETFMatchGroup

party_updated

playing_commentary

achievement_earned_local

  • achievement (short)

user_data_downloaded

fired when achievements/stats are downloaded from Steam or XBox Live

econ_inventory_connected

gc_lost_session

gc_new_session

player_hintmessage

  • hintmessage (string) - localizable string of a hint

restart_timer_time

  • time (byte) - How much time is left

teamplay_update_timer

teamplay_round_stalemate

  • reason (byte) - why the stalemate is occuring

player_ignited_inv

sent when a player is ignited by a pyro who is being invulned, only to the medic who's doing the invulning

  • pyro_entindex (byte) - entindex of the pyro who ignited the victim
  • victim_entindex (byte) - entindex of the player ignited by the pyro
  • medic_entindex (byte) - entindex of the medic releasing the invuln

player_ignited

sent when a player is ignited, only to the two players involved

  • pyro_entindex (byte) - entindex of the pyro who ignited the victim
  • victim_entindex (byte) - entindex of the player ignited by the pyro
  • weaponid (byte) - weaponid of the weapon used

player_damaged

  • amount (short)
  • type (long)

player_jarated

sent when a player is jarated, only to the two players involved

  • thrower_entindex (byte) - entindex of the player who threw the jarate
  • victim_entindex (byte) - entindex of the player receiving it

player_jarated_fade

sent when a player is jarated, only to the two players involved

  • thrower_entindex (byte) - entindex of the player who threw the jarate
  • victim_entindex (byte) - entindex of the player receiving it

player_shield_blocked

sent when a player is jarated, only to the two players involved

  • attacker_entindex (byte) - entindex of the player who threw the jarate
  • blocker_entindex (byte) - entindex of the player receiving it

player_extinguished

sent when a burning player is extinguished by a medic

  • victim (byte) - entindex of the player that was extinguished
  • healer (byte) - entindex of the player who did the extinguishing
  • itemdefindex (short) - item defindex that did the extinguishing

player_damage_dodged

  • damage (short)

flagstatus_update

  • userid (short) - user ID of the player who now has the flag
  • entindex (long) - ent index of flag

air_dash

  • player (byte)

landed

  • player (byte)

vote_maps_changed

  • type (byte)
  • defindex (long)
  • created (bool)
  • deleted (bool)
  • erase_history (bool)

schema_updated

rd_rules_state_changed

duck_xp_level_up

  • level (short) - leveled up to what

update_status_item

  • index (byte)
  • object (byte)

parachute_deploy

  • index (short) - entindex of the player

parachute_holster

  • index (short) - entindex of the player