<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Darkid</id>
	<title>AlliedModders Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Darkid"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/Darkid"/>
	<updated>2026-06-02T13:43:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10149</id>
		<title>Writing Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10149"/>
		<updated>2016-04-16T18:28:02Z</updated>

		<summary type="html">&lt;p&gt;Darkid: /* Starting an Extension */ Directory structure is listed above. I'm separating out CONF_METAMOD since most people won't need it, and removed the bit about removing lines.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod's Extension System is a powerful way to greatly enhance the flexibility of your SourceMod plugins.  You can take full advantage of SourceMod's Core, using the interfaces it provides, to create C++ plugins, plugin events, plugin native functions, and shared interfaces.  Extensions can also hook into Metamod:Source.&lt;br /&gt;
&lt;br /&gt;
This article goes into the details of creating a SourceMod Extension.  Knowledge of C++ is required.&lt;br /&gt;
&lt;br /&gt;
=SDK Structure=&lt;br /&gt;
First, download the [[SourceMod SDK]] from the [https://github.com/alliedmodders/sourcemod/releases SourceMod github], and one of the SDKs from the [hl2sdk github]. The directory structure should contain these folders:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
* hl2sdk-something - One of the HL2 SDKs&lt;br /&gt;
* sourcemod-version - The sourcemod package&lt;br /&gt;
** extensions - Sourcemod Extensions code&lt;br /&gt;
*** curl - Source code to the cURL extension&lt;br /&gt;
*** geoip - Source code to the GeoIP extension&lt;br /&gt;
*** mysql - Source code to the MySQL extension&lt;br /&gt;
** plugins - Source code to all of SourceMod's plugins&lt;br /&gt;
*** include - The include files which document plugin API&lt;br /&gt;
** public - Interface files for SourceMod's Core Interfaces&lt;br /&gt;
*** extensions  - Interfaces that are provided by extensions&lt;br /&gt;
*** '''sample_ext''' - The Sample Extension SDK&lt;br /&gt;
**** extension.cpp - Sample C++ plugin&lt;br /&gt;
**** extension.h - Sample C++ header file&lt;br /&gt;
**** Makefile - Sample C++ plugin compiler&lt;br /&gt;
**** smsdk_config.h - Sample C++ plugin settings&lt;br /&gt;
** sourcepawn - The include/interface files for SourcePawn&lt;br /&gt;
*** compiler - The SourcePawn Compiler&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Starting an Extension=&lt;br /&gt;
For simplicity, this article will assume you are using the SDK base files. Navigate to &amp;lt;code&amp;gt;extensions/public/sample_ext&amp;lt;/code&amp;gt;, and ensure that you can compile your code. If using the command line, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; should do this, if using Visual Studio, see [[#Setting up Visual Studio|Setting up Visual Studio]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step of creating your extension is to configure it.  Open the &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; file and edit each of the following defines.  Use the information below to guide you.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
*SMEXT_CONF_NAME - The general name for your Extension (should be short).&lt;br /&gt;
*SMEXT_CONF_DESCRIPTION - A short description of what your extension does.&lt;br /&gt;
*SMEXT_CONF_VERSION - A version number string.  By convention, SourceMod uses the four set build number notation, so build 1.2.3.4 means:&lt;br /&gt;
**1 is the &amp;quot;Major&amp;quot; release version.&lt;br /&gt;
**2 is the &amp;quot;Minor&amp;quot; release version.&lt;br /&gt;
**3 is the &amp;quot;Maintenance&amp;quot; or &amp;quot;Revision&amp;quot; version.&lt;br /&gt;
**4 is the &amp;quot;Build,&amp;quot; usually an internal source control number.&lt;br /&gt;
*SMEXT_CONF_AUTHOR - Your name (or whoever/whatever authored the plugin).&lt;br /&gt;
*SMEXT_CONF_URL - The URL/homepage of this extension.&lt;br /&gt;
*SMEXT_CONF_LOGTAG - The logtag your extension will use for SourceMod logging.  By convention, try to keep this under ten characters or so, and to make it all caps.&lt;br /&gt;
*SMEXT_CONF_LICENSE - Right now, the SourceMod Dev Team mandates that 3rd party extensions must be under an Open Source license.  Putting a license abbreviation or very short message here is appropriate.  For more information, see [https://www.sourcemod.net/license.php the SourceMod license].&lt;br /&gt;
*SMEXT_CONF_DATESTRING - You do not need to modify this.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If your plugin requires using SourceHook or Metamod:Source, uncomment this line:&lt;br /&gt;
&amp;lt;code&amp;gt;#define SMEXT_CONF_METAMOD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you should change the name of your extension. By convention, your extension's class name should start with a capital letter.&lt;br /&gt;
* First, open &amp;lt;code&amp;gt;extension.h&amp;lt;/code&amp;gt; and change &amp;quot;Sample&amp;quot; in this line:&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Sample : public SDKExtension&amp;lt;/cpp&amp;gt;&lt;br /&gt;
* Next, open &amp;lt;code&amp;gt;extension.cpp&amp;lt;/code&amp;gt; change these two lines:&lt;br /&gt;
&amp;lt;cpp&amp;gt;Sample g_Sample;&lt;br /&gt;
SMEXT_LINK(&amp;amp;g_Sample);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Visual Studio Users==&lt;br /&gt;
Make sure you change the name of your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file.  The naming convention for SourceMod extensions is &amp;lt;tt&amp;gt;name.ext.dll&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is a short name for your extension.  You are free to change this, but it is highly recommended that you keep the &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
You can do this by going to &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Configuration Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Linker&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;General&amp;lt;/tt&amp;gt;.  Set the &amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt; option appropriately.&lt;br /&gt;
&lt;br /&gt;
==Linux Users==&lt;br /&gt;
Simply edit the &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; and change the &amp;lt;tt&amp;gt;BINARY&amp;lt;/tt&amp;gt; line near the top.  Make sure you do not add any trailing spaces at the end of the name, or the build won't come out right.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile a blank extension!&lt;br /&gt;
&lt;br /&gt;
=Creating Native Functions=&lt;br /&gt;
''Main article: [[Natives (SourceMod Development)]]''&lt;br /&gt;
&lt;br /&gt;
Most of the time, an extension exists to add &amp;quot;native functions&amp;quot; to the plugin system.  Native functions are simply the functions that plugins can use in SourceMod.  They are coded in C++ and have a short prototype declaration in an include file.&lt;br /&gt;
&lt;br /&gt;
==Prototyping==&lt;br /&gt;
The first step to creating a native is to &amp;lt;tt&amp;gt;spec it&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;prototype&amp;lt;/tt&amp;gt; it.  This is a simple but often time consuming process, but if you get in the habit of it, your documentation will be much better.  Let's first create a very simply native.  Here is a prototype for it, which we will place in &amp;lt;tt&amp;gt;sample.inc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the square of a number.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num	Number to square.&lt;br /&gt;
 * @return	The square of num.&lt;br /&gt;
 */&lt;br /&gt;
native SquareNumber(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;native&amp;lt;/tt&amp;gt; keyword tells the compiler that this function exists in an outside source.  The comment style is similar to [http://www.stack.nl/~dimitri/doxygen/ doxygen] or [http://java.sun.com/j2se/javadoc/ Javadoc], and is preferred by the SourceMod Development Team.&lt;br /&gt;
&lt;br /&gt;
==Implementing==&lt;br /&gt;
Now that our function is documented, it's time to create it!  Each native function is bound to a C++ function.  The prototype for this function looks like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t Function(IPluginContext *pContext, const cell_t *params);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A quick explanation of these types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; - This is a 32bit signed integer, the generic data type for Pawn.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IPluginContext&amp;lt;/tt&amp;gt; - This interface provides Virtual Machine functions for retrieving or modifying memory in the plugin.&lt;br /&gt;
*&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; - This is the &amp;quot;stack&amp;quot; of parameters that the plugin passed.  It is an array from [0..N] where 0 contains N. This means &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains the number of arguments passed to the native.&lt;br /&gt;
**For example, if one parameter was passed, and the parameter is 25:&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; == 1&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; == 25&lt;br /&gt;
**Even though it tells you how many parameters are passed, you do not need to verify this number.  The compiler will always pass the correct number of parameters in.  The only time you need to verify it is for backwards compatibility or variable parameter lists, which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
Now, let's write our native function:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t SquareNumber(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t number = params[1];&lt;br /&gt;
	return number * number;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding==&lt;br /&gt;
Now, the final step is to bind our native.  Natives are bound in ''native lists''.  Each list must be terminated by a &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; bind.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;const sp_nativeinfo_t MyNatives[] = &lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;SquareNumber&amp;quot;,	SquareNumber},&lt;br /&gt;
	{NULL,			NULL},&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first column/member is a string containing the name you've assigned to the native.  The second column/member is the C++ function you're binding to.  Here, both contain the same name, but it is certainly possible to bind a function to any valid Pawn function name, and likewise, you can bind one function to more than one name.&lt;br /&gt;
&lt;br /&gt;
Lastly, you must tell Core about your native list.  There are two places that are good to do this.  Whichever you choose, you must uncomment the function in &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it in &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnLoad&amp;lt;/tt&amp;gt; - This is called when your extension is first loaded.  If you do not require any outside interfaces, it is safe to add natives here.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt; - This is called when all extensions have been loaded.  This is generally a better place to add natives.&lt;br /&gt;
&lt;br /&gt;
Let's say we choose &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;, we'd then have code like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: &amp;lt;tt&amp;gt;myself&amp;lt;/tt&amp;gt; is a global variable declared in the SDK.  It is a pointer that identifies your extension.''&lt;br /&gt;
&lt;br /&gt;
For more information on writing natives, see [[Natives (SourceMod Development)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Events/Forwards=&lt;br /&gt;
Events are an integral part to SourceMod.  An Event is formally called a ''Forward''.  Forwards are functions inside a plugin which are not called by the plugin itself, but are triggered from an external source.  For example, &amp;lt;tt&amp;gt;OnClientConnect&amp;lt;/tt&amp;gt; is a forward which is triggered when a player connects to a server.&lt;br /&gt;
&lt;br /&gt;
There are two major types of forwards:&lt;br /&gt;
*'''Managed''': This forward is global and has a name.  To use this forward, the function must be declared as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; inside the user's script.  Any plugin having this public function will receive the event.&lt;br /&gt;
*'''Unmanaged''': This forward is private in nature.  For example, the &amp;lt;tt&amp;gt;HookUserMessage&amp;lt;/tt&amp;gt; native lets users specify a function to be called when a specific user message is sent.  This is done with an unmanaged forward, and adding functions to this forward is not automatic.  In general, function calls for unmanaged forwards are not public, although they can be.&lt;br /&gt;
&lt;br /&gt;
''Note: To enable the Forward interface, you must uncomment the definition &amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt; in smsdk_config.h.''&lt;br /&gt;
==Managed Forwards==&lt;br /&gt;
Let's say we want to create a forward that will be called when a player uses say chat.  For simplicity, let's assume you already have a function that tells you when a player says say chat.  We will just be creating the forward for it.&lt;br /&gt;
&lt;br /&gt;
As we did before, first let's prototype our global forward.  In our include file, we add this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * @brief Called whenever a client says something in chat.&lt;br /&gt;
 *&lt;br /&gt;
 * @param client	Index of the client.&lt;br /&gt;
 * @param text		String containing the say text.&lt;br /&gt;
 * @return 		Pl_Handled to block text from printing, Pl_Continue otherwise.&lt;br /&gt;
 */&lt;br /&gt;
forward ResultType:OnPlayerSayChat(client, const String:text[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;forward&amp;lt;/tt&amp;gt; keyword tells the compiler that any function having this name must be declared exactly the same.  In a plugin, this would&lt;br /&gt;
&lt;br /&gt;
The next step is to declare your forward somewhere at the top of your &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; file.  This will look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;IForward *g_pSayChat = NULL&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, re-using our code from above, let's create this forward in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForward(&amp;quot;OnPlayerSayChat&amp;quot;, ET_Event, 2, NULL, Param_Cell, Param_String);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;quot;OnPlayerSayChat&amp;quot;&amp;lt;/tt&amp;gt; - The name of our forward.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Since forwards can execute multiple functions in multiple scripts, this is one of the ways of specifying what to do with the return value of each function.  &amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; means &amp;quot;return the highest value, do not allow stops.&amp;quot;  A stop refers to &amp;lt;tt&amp;gt;Pl_Stop&amp;lt;/tt&amp;gt;, which lets a plugin block the rest of the event chain.&lt;br /&gt;
*&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; - This is the number of parameters our forward will have.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; - Not used in our example.  This lets you pass parameters by array rather than variable arguments.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - The first parameter is a cell (integer).&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - The second parameter is a string.&lt;br /&gt;
&lt;br /&gt;
Now, we write a quick function in our module to call this forward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;/** Fires the say chat event in plugins.  Returns true to allow the text, false to block. */&lt;br /&gt;
bool FireChatEvent(int client, const char *text)&lt;br /&gt;
{&lt;br /&gt;
	if (!g_pSayChat)&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cell_t result = 0;&lt;br /&gt;
	g_pSayChat-&amp;gt;PushCell(client);&lt;br /&gt;
	g_pSayChat-&amp;gt;PushString(text);&lt;br /&gt;
	g_pSayChat-&amp;gt;Execute(&amp;amp;result);&lt;br /&gt;
	&lt;br /&gt;
	if (result == Pl_Handled)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, this was pretty simple.  Each parameter is &amp;quot;pushed&amp;quot; one at a time, in ascending order.  First we push the client index as a cell, then the text as a string.  Once done, we execute, and the value will be returned by reference.&lt;br /&gt;
&lt;br /&gt;
Lastly, there is a caveat.  Unlike natives, SourceMod does not automatically clean up forwards for us when are done.  We have to make sure we destroy them.  Uncomment &amp;lt;tt&amp;gt;SDK_OnUnload&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it like so:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnUnload()&lt;br /&gt;
{&lt;br /&gt;
	forwards-&amp;gt;ReleaseForward(g_pSayChat);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unmanaged Forwards==&lt;br /&gt;
Now things get a bit more complicated.  However, unmanaged forwards are essentially the same -- they just give you more flexibility.  Let's consider the managed example with a new twist.  We want to let users add and remove hooks from their plugins, rather than having one global forward.  The standard way to do this is with ''function IDs''.  &lt;br /&gt;
&lt;br /&gt;
Example prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;funcenum SayChatHook&lt;br /&gt;
{&lt;br /&gt;
	forward(client, const String:text[]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
native AddSayChatHook(SayChatHook:hook);&lt;br /&gt;
native RemoveSayChatHook(SayChatHook:hook);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;funcenum&amp;lt;/tt&amp;gt; syntax lets you define all the valid prototypes for your hook.  In this example, the only valid method is a function declared like this (only MyHook can be changed):&lt;br /&gt;
&amp;lt;pawn&amp;gt;MyHook(client, const String:text[])&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How do we make such a beast?  The first step is setting up our forward.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IChangeableForward *g_pSayChat = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForwardEx(NULL, ET_Hook, 2, NULL, Param_Cell, Param_String); &lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice two big differences.  We now use &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, and we use &amp;lt;tt&amp;gt;CreateForwardEx&amp;lt;/tt&amp;gt; instead.  The initial first parameter specifies a name for our forward - we're going to ignore this.&lt;br /&gt;
&lt;br /&gt;
Now, we need to create our natives.  These will be fairly simple:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t AddSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat-&amp;gt;AddFunction(pContext, static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cell_t RemoveSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	IPluginFunction *pFunction = pContext-&amp;gt;GetFunctionById(static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	g_pSayChat-&amp;gt;RemoveFunction(pFunction);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: These natives must be added -- that step is removed here and explained earlier.''&lt;br /&gt;
&lt;br /&gt;
You do not need to worry about a plugin unloading - Core will automatically remove the functions for you.  Since an &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; is also an &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, the &amp;lt;tt&amp;gt;FireChatEvent&amp;lt;/tt&amp;gt; function from earlier does not need to change.  We're done!&lt;br /&gt;
&lt;br /&gt;
==Creating Interfaces==&lt;br /&gt;
Do you want your extension to share an interface?  If so, first you should create an ''interface file''.  This file should contain everything your interface needs - this way other authors can easily reference it.  Your interface must inherit the &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt; class.  It must also declare two global macros that uniquely identify your interface.  It must also implement two functions: &amp;lt;tt&amp;gt;GetInterfaceName&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GetInterfaceVersion&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two defines must start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt; respectively.  The first must be a string and the second must be an unsigned integer.  This integer represents your interface's version number.  While you are free to use it however you please, by default it should be linearly increased.  If you make breaking changes or change the versioning scheme, you must overload the &amp;lt;tt&amp;gt;IsVersionCompat&amp;lt;/tt&amp;gt; function in &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#ifndef _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
#define _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;IShareSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_NAME	&amp;quot;IMyInterface&amp;quot;&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_VERSION	1&lt;br /&gt;
&lt;br /&gt;
class IMyInterface : public SourceMod::SMInterface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	virtual const char *GetInterfaceName()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_NAME;&lt;br /&gt;
	}&lt;br /&gt;
	virtual unsigned int GetInterfaceVersion()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_VERSION;&lt;br /&gt;
	}&lt;br /&gt;
public:&lt;br /&gt;
	/**&lt;br /&gt;
	 * @brief This function does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	virtual void DoNothingAtAll() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif //_INCLUDE_MYINTERFACE_FILE_H_&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice, of course, that our interface is ''pure virtual''.  This means it must be implemented in the extension.  Assuming you know C++, this should be fairly straight forward, so let's skip right to how to add this interface to the SourceMod shared system:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddInterface(myself, &amp;amp;g_MyInterface);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: We do this in &amp;lt;tt&amp;gt;SDK_OnLoad()&amp;lt;/tT&amp;gt; instead of &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;.  Otherwise, an extension might try to search for your interface during &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;, and it might fail depending on the load order.''&lt;br /&gt;
&lt;br /&gt;
That simple?  Yup!  Now other extensions can use your interface.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using Interfaces/Other Extensions=&lt;br /&gt;
There are a variety of interfaces that are available, but not loaded by default in the Extension SDK.  These interfaces can be retrieved and used in your extension.&lt;br /&gt;
&lt;br /&gt;
==Core Interfaces==&lt;br /&gt;
If they are provided by Core, getting them is very simple.  Many interfaces can simply be uncommented in &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; and they will become usable.  See the &amp;quot;Available Interfaces&amp;quot; list below for the exposure list.&lt;br /&gt;
&lt;br /&gt;
Otherwise, most of the &amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt; interface files in the root of the &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; folder in the SDK are Core interfaces.  For example, code to use the IPluginManager interface might look like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;IPluginSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPluginManager *g_pPlugins = NULL;&lt;br /&gt;
&lt;br /&gt;
bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(PLUGINSYSTEM, g_pPlugins);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where did we get &amp;lt;tt&amp;gt;PLUGINSYSTEM&amp;lt;/tt&amp;gt; from?  Observe the two lines in &amp;lt;tt&amp;gt;IPluginSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#define SMINTERFACE_PLUGINSYSTEM_NAME		&amp;quot;IPluginManager&amp;quot;&lt;br /&gt;
#define SMINTERFACE_PLUGINSYSTEM_VERSION	1&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;SM_GET_IFACE&amp;lt;/tt&amp;gt; macro uses the text in between the &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; characters.  It also uses the version for compatibility checking.  If it can't find the interface, it automatically prints to the error buffer and returns false.&lt;br /&gt;
&lt;br /&gt;
===Default Interfaces===&lt;br /&gt;
There are interfaces which are grabbed by the Extension SDK by default.  You do not need to query for them on load, or even check if they are valid or not.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;IShareSys&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;sharesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IShareSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;HANDLESYSTEM&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IHandleSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SOURCEMOD&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;g_pSM&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;ISourceMod.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;FORWARDMANAGER&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IForwardSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Available Interfaces===&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_HANDLESYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_PLAYERHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;playerhelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_DBMANAGER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;dbi&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMECONF&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gameconfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_MEMUTILS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;memutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMEHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gamehelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_TIMERSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;timersys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_THREADER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Interfaces==&lt;br /&gt;
The situation changes if your extension requires ''another extension'', since extensions may load in a completely random order.  The first step is to mark the other extension as a dependency.  Let's say you want to use the &amp;lt;tt&amp;gt;IThreader.h&amp;lt;/tt&amp;gt; interfaces from &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt;.  First, we declare it as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddDependency(myself, &amp;quot;thread.ext&amp;quot;, true, true);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two boolean parameters to &amp;lt;tt&amp;gt;AddDependency&amp;lt;/tt&amp;gt; mean, respectively: &amp;quot;try to automatically load this extension&amp;quot; and &amp;quot;this extension cannot work without the dependency.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Second, we query for the interface in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;.  Since we don't know when &amp;lt;tt&amp;gt;thread.ext&amp;lt;/tt&amp;gt; will actually be loaded, we have to wait until everything is definitely loaded.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IThreader *g_pThreader = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_LATE_IFACE(THREADER, g_pThreader);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Third, we need to find a way to fail if this interface was never found.  The way to do this is by uncommenting &amp;lt;tt&amp;gt;QueryRunning&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implementing it:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::QueryRunning(char *error, size_t err_max)&lt;br /&gt;
{&lt;br /&gt;
	SM_CHECK_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SourceMod queries your extension, the macro above will either validate the pointer or return false.  If it returns false, SourceMod marks your extension as failed.&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
===NULL Interfaces===&lt;br /&gt;
There are a few ways that external interfaces can make your code complicated.  The first is simple but a common oversight.  Don't assume interfaces will be okay.  For example, say we want to create a thread once we get the &amp;lt;tt&amp;gt;IThreader&amp;lt;/tt&amp;gt; interface.  Our code should something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	&lt;br /&gt;
	if (QueryRunning(NULL, 0))&lt;br /&gt;
	{&lt;br /&gt;
		g_pThreader-&amp;gt;MakeThread(/* stuff */);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we ''query ourself'' in order to find if it's safe to continue executing code.  We could also have simply checked if &amp;lt;tt&amp;gt;g_pThreader&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, but self-querying has a bonus: if your extension continues to do things like hook events or add listeners, you will be preventing your extension from entirely initializing itself while one interface is bad.  Always make sure you have sanity checks like this where needed.&lt;br /&gt;
&lt;br /&gt;
===Dynamic Unloading===&lt;br /&gt;
The second major caveat is that extensions can be dynamically unloaded.  If you specified yourself as having a dependency and that each dependency is required, you will have no problem.  Your extension will be unloaded before the interface is removed, and you can clean up memory/hooks in your &amp;lt;tt&amp;gt;SDK_OnUnload()&amp;lt;/tt&amp;gt; code.  There are two situations where this is a different story.&lt;br /&gt;
&lt;br /&gt;
====Optional Interfaces====&lt;br /&gt;
The first situation is if you are not requiring an extension that contains an interface.  Now, when the extension unloads, your extension will not be unloaded first.  This creates a small problem, as you must clean up without being unloaded.  There are two functions you can implement in your extension class to resolve this, both documented in &amp;lt;tt&amp;gt;IExtensionSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*&amp;lt;tt&amp;gt;QueryInterfaceDrop&amp;lt;/tt&amp;gt; - Allows you to request unloading when a specific interface is unloaded.  This is the default behavior for all interfaces.  If you want to block this functionality, continue reading.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; - This is called when an interface is dropped.  If your plugin will not be unloaded, you can use this to clean up any resources on a specific interface being removed.&lt;br /&gt;
&lt;br /&gt;
====Circular Dependencies====&lt;br /&gt;
The second situation is a bit more complicated.  It is possible for two extensions to have circular dependencies.  For example:&lt;br /&gt;
*Extension &amp;quot;A&amp;quot; requires extension &amp;quot;B.&amp;quot;&lt;br /&gt;
*Extension &amp;quot;B&amp;quot; requires extension &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If either extension is unloaded, the opposite extension is unloaded normally.  The first extension then receives the interface drop callbacks.  In this situation, it is essential that the &amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; function be implemented and used with the circular interface.  Otherwise, you risk crashing when your extension unloads (or at the very least, leaking memory).  Since the actual drop order is undefined, it means both extensions must implement this function to be safe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Automatic Loading=&lt;br /&gt;
There are two types of automatic loading: Dynamic and Global.  Dynamic loading means your extension is only loaded when a plugin requires it.  Global loading means your extension loads no matter what.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Autoloading==&lt;br /&gt;
Dynamic loading requires that you create an include file for plugins.  Plugins that include your file will automatically load your extension.  This requires implementing the &amp;lt;tt&amp;gt;Extension&amp;lt;/tt&amp;gt; structure found in &amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;.  You must expose the structure as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt;, and the name must start with &amp;quot;&amp;lt;tt&amp;gt;__ext_&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Do not edit below this line!&lt;br /&gt;
 */&lt;br /&gt;
public Extension:__ext_geoip = &lt;br /&gt;
{&lt;br /&gt;
	name = &amp;quot;GeoIP&amp;quot;,&lt;br /&gt;
	file = &amp;quot;geoip.ext&amp;quot;,&lt;br /&gt;
#if defined AUTOLOAD_EXTENSIONS&lt;br /&gt;
	autoload = 1,&lt;br /&gt;
#else&lt;br /&gt;
	autoload = 0,&lt;br /&gt;
#endif&lt;br /&gt;
#if defined REQUIRE_EXTENSIONS&lt;br /&gt;
	required = 1,&lt;br /&gt;
#else&lt;br /&gt;
	required = 0,&lt;br /&gt;
#endif&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanations:&lt;br /&gt;
*&amp;lt;b&amp;gt;name&amp;lt;/b&amp;gt;: The name of your module as written in &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;: The platform-inspecific portion of your extension's file name.&lt;br /&gt;
*&amp;lt;b&amp;gt;autoload&amp;lt;/b&amp;gt;: Specifies that your module should always dynamically autoload by default.  You can tweak this to either never autoload or always autoload (without letting the user toggle).&lt;br /&gt;
*&amp;lt;b&amp;gt;required&amp;lt;/b&amp;gt;: Specifies whether or not this extension is '''required''' by your plugin.  If for some reason your extension fails to load (or is not found), the plugin will also fail to load.  This is changeable if you wish to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this example, but remember to modify the following portions:&lt;br /&gt;
*&amp;lt;b&amp;gt;__ext_geoip&amp;lt;/b&amp;gt;: Change the &amp;quot;geoip&amp;quot; portion to your own unique variable name.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;GeoIP&amp;lt;/b&amp;gt;: Change the GeoIP portion to your extension's name.  This should match the name you chose as &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;geoip.ext&amp;quot;&amp;lt;/b&amp;gt;: Change this to your extension's file name, without the .dll/.so portion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global Autoloading==&lt;br /&gt;
To have your extension always autoload, you must create a ''.autoload'' file in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder.  For example, to have the &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;threader.ext.so&amp;lt;/tt&amp;gt; extensions autoload, you'd create the following file in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader.autoload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
*This only works for extensions using the .ext.&amp;lt;platform&amp;gt; convention.  SourceMod cuts off the &amp;quot;.autoload&amp;quot; portion of the file, then adds the appropriate extension just as if 'sm exts load' was used.&lt;br /&gt;
*The file does not need to contain anything, it simply needs to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conventions=&lt;br /&gt;
&lt;br /&gt;
==Designing API/Natives==&lt;br /&gt;
*Start interface names with the capital letter 'I'.&lt;br /&gt;
*Use a consistent naming convention.  SourceMod uses [http://msdn2.microsoft.com/en-us/library/ms229002.aspx Microsoft/Pascal] naming.  Avoid Java/Camel casing for both API and natives.&lt;br /&gt;
*When exposing interfaces, make sure your exposure defines start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Naming==&lt;br /&gt;
*Logtags (&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt;) should be short names (under 10 characters or so) in all capital letters.&lt;br /&gt;
*Your extension file name should never have &amp;lt;tt&amp;gt;_i486&amp;lt;/tt&amp;gt; or other unnecessary platform-specific notations in its name.&lt;br /&gt;
*Your extension file name should always end in &amp;lt;tt&amp;gt;.ext.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; depending on the platform.  The &amp;lt;tt&amp;gt;.ext.&amp;lt;/tt&amp;gt; is SourceMod convention.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setting up Visual Studio=&lt;br /&gt;
&lt;br /&gt;
{{qnotice|It is recommended that you make a copy of the sample_ext project and modify that rather than create your own project, as it will set up most of this for you}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Project ==&lt;br /&gt;
&lt;br /&gt;
Instead of manually creating a project, you can make a copy of the sample_ext project and modify it.&lt;br /&gt;
&lt;br /&gt;
The sample_ext project assumes that it is located in a subdirectory inside the SourceMod public directory.  To change this, modify all references to ..\.. to $(SOURCEMOD15)\public and specify the SOURCEMOD15 variable as mentioned in the Optional Environment variables.&lt;br /&gt;
&lt;br /&gt;
The sample_ext projectuses the following environment variables to locate the various source code parts.  To set environment variables:&lt;br /&gt;
&lt;br /&gt;
'''Windows XP''': Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
'''Windows Vista/7''': Start -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced system properties -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
The environment variables used are:&lt;br /&gt;
&lt;br /&gt;
* '''MMSOURCE17''': Path to MetaMod: Source source code for version 1.7 or newer. Used to compile SourceMod itself.  &lt;br /&gt;
* '''MMSOURCE18''': Path to MetaMod: Source source code for version 1.8 or newer. Used in SourceMod 1.4 projects.  &lt;br /&gt;
* '''MMSOURCE19''': Path to MetaMod: Source source code for version 1.9 or newer. Used in SourceMod 1.5 projects.  &lt;br /&gt;
* '''HL2SDK''': Path to the Episode 1 SDK  &lt;br /&gt;
* '''HL2SDK-SWARM''': Path to the Alien Swarm SDK  &lt;br /&gt;
* '''HL2SDK-DARKM''': Path to the Dark Messiah SDK  &lt;br /&gt;
* '''HL2SDKCSGO''': Path to the Counter-Strike: Global Offensive SDK  &lt;br /&gt;
* '''HL2SDKCSS''': Path to the Counter-Strike: Source SDK  &lt;br /&gt;
* '''HL2SDKL4D''': Path to the Left 4 Dead SDK  &lt;br /&gt;
* '''HL2SDKL4D2''': Path to the Left 4 Dead 2 SDK  &lt;br /&gt;
* '''HL2SDKOB''': Path to the Orange Box SDK (not Source 2009)  &lt;br /&gt;
* '''HL2SDKOBVALVE''': Path to the Orange Box Valve / Source 2009 SDK (Half-Life 2: Deathmatch, Day of Defeat: Source, Team Fortress 2)&lt;br /&gt;
&lt;br /&gt;
Optional environment variables:&lt;br /&gt;
&lt;br /&gt;
* '''SOURCEMOD15'': Optional path to SourceMod 1.5 or newer source code&lt;br /&gt;
&lt;br /&gt;
==Manually configuring a project==&lt;br /&gt;
&lt;br /&gt;
===Paths===&lt;br /&gt;
'''Visual Studio 2003''': Tools -&amp;gt; Options -&amp;gt; Projects, VC++ Directories&lt;br /&gt;
&lt;br /&gt;
'''Visual Studio 2005''': Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; VC++ Directories&lt;br /&gt;
&lt;br /&gt;
====Include Paths====&lt;br /&gt;
*SourceMod only:&lt;br /&gt;
**sdk\public\extensions&lt;br /&gt;
**sdk\public\sourcepawn&lt;br /&gt;
**sdk\public&lt;br /&gt;
*SourceMM (Note that sourcemm might be 'trunk' for you):&lt;br /&gt;
**sourcemm\core&lt;br /&gt;
**sourcemm\core\sourcehook&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**game\shared&lt;br /&gt;
**public\vstdlib&lt;br /&gt;
**public\tier1&lt;br /&gt;
**public\tier0&lt;br /&gt;
**public\engine&lt;br /&gt;
**public&lt;br /&gt;
**dlls&lt;br /&gt;
&lt;br /&gt;
====Link Paths====&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**lib\public for version 2005&lt;br /&gt;
**lib-vc7\public for version 2003&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options are set by default in the sample Extension SDK.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options should be set for every build (Release/Debug/others).&lt;br /&gt;
&lt;br /&gt;
For VS 2005, goto Project-&amp;gt;Properties.&lt;br /&gt;
&lt;br /&gt;
*General&lt;br /&gt;
**&amp;lt;tt&amp;gt;Character Set&amp;lt;/tt&amp;gt;: '''Use Multi-Byte Character Set'''&lt;br /&gt;
*C/C++&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Detect 64-bit Portability Issues&amp;lt;/tt&amp;gt;: '''No'''&lt;br /&gt;
**Preprocessor&lt;br /&gt;
***&amp;lt;tt&amp;gt;Preprocessor Defines&amp;lt;/tt&amp;gt;: Add &amp;lt;tt&amp;gt;_CRT_SECURE_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;_CRT_NONSTDC_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SOURCEMOD_BUILD&amp;lt;/tt&amp;gt;  and &amp;lt;tt&amp;gt;WIN32&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Code Generation&lt;br /&gt;
***&amp;lt;tt&amp;gt;Runtime Library&amp;lt;/tt&amp;gt;: Multi-threaded or /MT (for Release), Multi-threaded Debug or /MTd (for Debug)&lt;br /&gt;
*Linker&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt;: Change &amp;lt;tt&amp;gt;$(ProjectName)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;$(ProjectName).ext&amp;lt;/tt&amp;gt;, or use your own custom string.&lt;br /&gt;
**Input&lt;br /&gt;
***&amp;lt;tt&amp;gt;Additional Dependencies&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;tier0.lib tier1.lib vstdlib.lib&amp;lt;/tt&amp;gt; (for SourceMM attached extensions only)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10148</id>
		<title>Writing Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10148"/>
		<updated>2016-04-16T18:17:09Z</updated>

		<summary type="html">&lt;p&gt;Darkid: /* SDK Structure */ Updated, trying to make instructions clearer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod's Extension System is a powerful way to greatly enhance the flexibility of your SourceMod plugins.  You can take full advantage of SourceMod's Core, using the interfaces it provides, to create C++ plugins, plugin events, plugin native functions, and shared interfaces.  Extensions can also hook into Metamod:Source.&lt;br /&gt;
&lt;br /&gt;
This article goes into the details of creating a SourceMod Extension.  Knowledge of C++ is required.&lt;br /&gt;
&lt;br /&gt;
=SDK Structure=&lt;br /&gt;
First, download the [[SourceMod SDK]] from the [https://github.com/alliedmodders/sourcemod/releases SourceMod github], and one of the SDKs from the [hl2sdk github]. The directory structure should contain these folders:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
* hl2sdk-something - One of the HL2 SDKs&lt;br /&gt;
* sourcemod-version - The sourcemod package&lt;br /&gt;
** extensions - Sourcemod Extensions code&lt;br /&gt;
*** curl - Source code to the cURL extension&lt;br /&gt;
*** geoip - Source code to the GeoIP extension&lt;br /&gt;
*** mysql - Source code to the MySQL extension&lt;br /&gt;
** plugins - Source code to all of SourceMod's plugins&lt;br /&gt;
*** include - The include files which document plugin API&lt;br /&gt;
** public - Interface files for SourceMod's Core Interfaces&lt;br /&gt;
*** extensions  - Interfaces that are provided by extensions&lt;br /&gt;
*** '''sample_ext''' - The Sample Extension SDK&lt;br /&gt;
**** extension.cpp - Sample C++ plugin&lt;br /&gt;
**** extension.h - Sample C++ header file&lt;br /&gt;
**** Makefile - Sample C++ plugin compiler&lt;br /&gt;
**** smsdk_config.h - Sample C++ plugin settings&lt;br /&gt;
** sourcepawn - The include/interface files for SourcePawn&lt;br /&gt;
*** compiler - The SourcePawn Compiler&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Starting an Extension=&lt;br /&gt;
For simplicity, this article will assume you are using the SDK base files (&amp;lt;code&amp;gt;public/sample_ext&amp;lt;/code&amp;gt;).  These are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_config.h&amp;lt;/tt&amp;gt; - Configuration settings (we will be editing this)&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.h&amp;lt;/tt&amp;gt; - Header for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.cpp&amp;lt;/tt&amp;gt; - Source for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; - User file for main extension header&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; - User file for main extension code&lt;br /&gt;
&lt;br /&gt;
''The &amp;lt;tt&amp;gt;extension.*&amp;lt;/tt&amp;gt; files are not technically part of the SDK.  However, they are provided to give users a starting point and some documentation.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' For help setting up Visual Studio, please see [[#Setting up Visual Studio|Setting up Visual Studio]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step of creating your extension is to configure it.  Open the &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; file and edit each of the following defines.  Use the information below to guide you.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt; - The general name for your Extension (should be short).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DESCRIPTION&amp;lt;/tt&amp;gt; - A short description of what your extension does.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_VERSION&amp;lt;/tt&amp;gt; - A version number string.  By convention, SourceMod uses the four set build number notation.  I.e. for 1.2.3.4:&lt;br /&gt;
**&amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; is the &amp;quot;Major&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; is the &amp;quot;Minor&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; is the &amp;quot;Maintenance&amp;quot; or &amp;quot;Revision&amp;quot; version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; is the &amp;quot;Build,&amp;quot; usually an internal source control number.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_AUTHOR&amp;lt;/tt&amp;gt; - Your name (or whoever/whatever authored the plugin).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_URL&amp;lt;/tt&amp;gt; - The URL/homepage of this extension.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt; - The logtag your extension will use for SourceMod logging.  By convention, try to keep this under ten characters or so, and to make it all caps.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LICENSE&amp;lt;/tt&amp;gt; - Right now, the SourceMod Dev Team mandates that 3rd party extensions must be under an Open Source license.  Putting a license abbreviation or very short message here is appropriate.  For more information, see [[SourceMod License]].&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DATESTRING&amp;lt;/tt&amp;gt; - You do not need to modify this.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_METAMOD&amp;lt;/tt&amp;gt; - If your plugin requires using SourceHook or Metamod:Source, uncomment this line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you may want to change the name of the default class that &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; declares.  To do this...&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and change &amp;quot;Sample&amp;quot; in this line:&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Sample : public SDKExtension&amp;lt;/cpp&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; and change the two lines to correspond to your new class name.  You can also change the global singleton that's declared, although you cannot remove the &amp;lt;tt&amp;gt;SMEXT_LINK&amp;lt;/tt&amp;gt; line (this lets SourceMod load your extension).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Studio Users==&lt;br /&gt;
Make sure you change the name of your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file.  The naming convention for SourceMod extensions is &amp;lt;tt&amp;gt;name.ext.dll&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is a short name for your extension.  You are free to change this, but it is highly recommended that you keep the &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
You can do this by going to &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Configuration Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Linker&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;General&amp;lt;/tt&amp;gt;.  Set the &amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt; option appropriately.&lt;br /&gt;
&lt;br /&gt;
==Linux Users==&lt;br /&gt;
Simply edit the &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; and change the &amp;lt;tt&amp;gt;BINARY&amp;lt;/tt&amp;gt; line near the top.  Make sure you do not add any trailing spaces at the end of the name, or the build won't come out right.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile a blank extension!&lt;br /&gt;
&lt;br /&gt;
=Creating Native Functions=&lt;br /&gt;
''Main article: [[Natives (SourceMod Development)]]''&lt;br /&gt;
&lt;br /&gt;
Most of the time, an extension exists to add &amp;quot;native functions&amp;quot; to the plugin system.  Native functions are simply the functions that plugins can use in SourceMod.  They are coded in C++ and have a short prototype declaration in an include file.&lt;br /&gt;
&lt;br /&gt;
==Prototyping==&lt;br /&gt;
The first step to creating a native is to &amp;lt;tt&amp;gt;spec it&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;prototype&amp;lt;/tt&amp;gt; it.  This is a simple but often time consuming process, but if you get in the habit of it, your documentation will be much better.  Let's first create a very simply native.  Here is a prototype for it, which we will place in &amp;lt;tt&amp;gt;sample.inc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the square of a number.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num	Number to square.&lt;br /&gt;
 * @return	The square of num.&lt;br /&gt;
 */&lt;br /&gt;
native SquareNumber(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;native&amp;lt;/tt&amp;gt; keyword tells the compiler that this function exists in an outside source.  The comment style is similar to [http://www.stack.nl/~dimitri/doxygen/ doxygen] or [http://java.sun.com/j2se/javadoc/ Javadoc], and is preferred by the SourceMod Development Team.&lt;br /&gt;
&lt;br /&gt;
==Implementing==&lt;br /&gt;
Now that our function is documented, it's time to create it!  Each native function is bound to a C++ function.  The prototype for this function looks like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t Function(IPluginContext *pContext, const cell_t *params);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A quick explanation of these types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; - This is a 32bit signed integer, the generic data type for Pawn.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IPluginContext&amp;lt;/tt&amp;gt; - This interface provides Virtual Machine functions for retrieving or modifying memory in the plugin.&lt;br /&gt;
*&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; - This is the &amp;quot;stack&amp;quot; of parameters that the plugin passed.  It is an array from [0..N] where 0 contains N. This means &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains the number of arguments passed to the native.&lt;br /&gt;
**For example, if one parameter was passed, and the parameter is 25:&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; == 1&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; == 25&lt;br /&gt;
**Even though it tells you how many parameters are passed, you do not need to verify this number.  The compiler will always pass the correct number of parameters in.  The only time you need to verify it is for backwards compatibility or variable parameter lists, which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
Now, let's write our native function:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t SquareNumber(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t number = params[1];&lt;br /&gt;
	return number * number;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding==&lt;br /&gt;
Now, the final step is to bind our native.  Natives are bound in ''native lists''.  Each list must be terminated by a &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; bind.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;const sp_nativeinfo_t MyNatives[] = &lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;SquareNumber&amp;quot;,	SquareNumber},&lt;br /&gt;
	{NULL,			NULL},&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first column/member is a string containing the name you've assigned to the native.  The second column/member is the C++ function you're binding to.  Here, both contain the same name, but it is certainly possible to bind a function to any valid Pawn function name, and likewise, you can bind one function to more than one name.&lt;br /&gt;
&lt;br /&gt;
Lastly, you must tell Core about your native list.  There are two places that are good to do this.  Whichever you choose, you must uncomment the function in &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it in &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnLoad&amp;lt;/tt&amp;gt; - This is called when your extension is first loaded.  If you do not require any outside interfaces, it is safe to add natives here.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt; - This is called when all extensions have been loaded.  This is generally a better place to add natives.&lt;br /&gt;
&lt;br /&gt;
Let's say we choose &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;, we'd then have code like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: &amp;lt;tt&amp;gt;myself&amp;lt;/tt&amp;gt; is a global variable declared in the SDK.  It is a pointer that identifies your extension.''&lt;br /&gt;
&lt;br /&gt;
For more information on writing natives, see [[Natives (SourceMod Development)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Events/Forwards=&lt;br /&gt;
Events are an integral part to SourceMod.  An Event is formally called a ''Forward''.  Forwards are functions inside a plugin which are not called by the plugin itself, but are triggered from an external source.  For example, &amp;lt;tt&amp;gt;OnClientConnect&amp;lt;/tt&amp;gt; is a forward which is triggered when a player connects to a server.&lt;br /&gt;
&lt;br /&gt;
There are two major types of forwards:&lt;br /&gt;
*'''Managed''': This forward is global and has a name.  To use this forward, the function must be declared as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; inside the user's script.  Any plugin having this public function will receive the event.&lt;br /&gt;
*'''Unmanaged''': This forward is private in nature.  For example, the &amp;lt;tt&amp;gt;HookUserMessage&amp;lt;/tt&amp;gt; native lets users specify a function to be called when a specific user message is sent.  This is done with an unmanaged forward, and adding functions to this forward is not automatic.  In general, function calls for unmanaged forwards are not public, although they can be.&lt;br /&gt;
&lt;br /&gt;
''Note: To enable the Forward interface, you must uncomment the definition &amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt; in smsdk_config.h.''&lt;br /&gt;
==Managed Forwards==&lt;br /&gt;
Let's say we want to create a forward that will be called when a player uses say chat.  For simplicity, let's assume you already have a function that tells you when a player says say chat.  We will just be creating the forward for it.&lt;br /&gt;
&lt;br /&gt;
As we did before, first let's prototype our global forward.  In our include file, we add this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * @brief Called whenever a client says something in chat.&lt;br /&gt;
 *&lt;br /&gt;
 * @param client	Index of the client.&lt;br /&gt;
 * @param text		String containing the say text.&lt;br /&gt;
 * @return 		Pl_Handled to block text from printing, Pl_Continue otherwise.&lt;br /&gt;
 */&lt;br /&gt;
forward ResultType:OnPlayerSayChat(client, const String:text[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;forward&amp;lt;/tt&amp;gt; keyword tells the compiler that any function having this name must be declared exactly the same.  In a plugin, this would&lt;br /&gt;
&lt;br /&gt;
The next step is to declare your forward somewhere at the top of your &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; file.  This will look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;IForward *g_pSayChat = NULL&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, re-using our code from above, let's create this forward in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForward(&amp;quot;OnPlayerSayChat&amp;quot;, ET_Event, 2, NULL, Param_Cell, Param_String);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;quot;OnPlayerSayChat&amp;quot;&amp;lt;/tt&amp;gt; - The name of our forward.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Since forwards can execute multiple functions in multiple scripts, this is one of the ways of specifying what to do with the return value of each function.  &amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; means &amp;quot;return the highest value, do not allow stops.&amp;quot;  A stop refers to &amp;lt;tt&amp;gt;Pl_Stop&amp;lt;/tt&amp;gt;, which lets a plugin block the rest of the event chain.&lt;br /&gt;
*&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; - This is the number of parameters our forward will have.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; - Not used in our example.  This lets you pass parameters by array rather than variable arguments.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - The first parameter is a cell (integer).&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - The second parameter is a string.&lt;br /&gt;
&lt;br /&gt;
Now, we write a quick function in our module to call this forward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;/** Fires the say chat event in plugins.  Returns true to allow the text, false to block. */&lt;br /&gt;
bool FireChatEvent(int client, const char *text)&lt;br /&gt;
{&lt;br /&gt;
	if (!g_pSayChat)&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cell_t result = 0;&lt;br /&gt;
	g_pSayChat-&amp;gt;PushCell(client);&lt;br /&gt;
	g_pSayChat-&amp;gt;PushString(text);&lt;br /&gt;
	g_pSayChat-&amp;gt;Execute(&amp;amp;result);&lt;br /&gt;
	&lt;br /&gt;
	if (result == Pl_Handled)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, this was pretty simple.  Each parameter is &amp;quot;pushed&amp;quot; one at a time, in ascending order.  First we push the client index as a cell, then the text as a string.  Once done, we execute, and the value will be returned by reference.&lt;br /&gt;
&lt;br /&gt;
Lastly, there is a caveat.  Unlike natives, SourceMod does not automatically clean up forwards for us when are done.  We have to make sure we destroy them.  Uncomment &amp;lt;tt&amp;gt;SDK_OnUnload&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it like so:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnUnload()&lt;br /&gt;
{&lt;br /&gt;
	forwards-&amp;gt;ReleaseForward(g_pSayChat);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unmanaged Forwards==&lt;br /&gt;
Now things get a bit more complicated.  However, unmanaged forwards are essentially the same -- they just give you more flexibility.  Let's consider the managed example with a new twist.  We want to let users add and remove hooks from their plugins, rather than having one global forward.  The standard way to do this is with ''function IDs''.  &lt;br /&gt;
&lt;br /&gt;
Example prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;funcenum SayChatHook&lt;br /&gt;
{&lt;br /&gt;
	forward(client, const String:text[]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
native AddSayChatHook(SayChatHook:hook);&lt;br /&gt;
native RemoveSayChatHook(SayChatHook:hook);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;funcenum&amp;lt;/tt&amp;gt; syntax lets you define all the valid prototypes for your hook.  In this example, the only valid method is a function declared like this (only MyHook can be changed):&lt;br /&gt;
&amp;lt;pawn&amp;gt;MyHook(client, const String:text[])&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How do we make such a beast?  The first step is setting up our forward.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IChangeableForward *g_pSayChat = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForwardEx(NULL, ET_Hook, 2, NULL, Param_Cell, Param_String); &lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice two big differences.  We now use &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, and we use &amp;lt;tt&amp;gt;CreateForwardEx&amp;lt;/tt&amp;gt; instead.  The initial first parameter specifies a name for our forward - we're going to ignore this.&lt;br /&gt;
&lt;br /&gt;
Now, we need to create our natives.  These will be fairly simple:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t AddSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat-&amp;gt;AddFunction(pContext, static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cell_t RemoveSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	IPluginFunction *pFunction = pContext-&amp;gt;GetFunctionById(static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	g_pSayChat-&amp;gt;RemoveFunction(pFunction);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: These natives must be added -- that step is removed here and explained earlier.''&lt;br /&gt;
&lt;br /&gt;
You do not need to worry about a plugin unloading - Core will automatically remove the functions for you.  Since an &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; is also an &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, the &amp;lt;tt&amp;gt;FireChatEvent&amp;lt;/tt&amp;gt; function from earlier does not need to change.  We're done!&lt;br /&gt;
&lt;br /&gt;
==Creating Interfaces==&lt;br /&gt;
Do you want your extension to share an interface?  If so, first you should create an ''interface file''.  This file should contain everything your interface needs - this way other authors can easily reference it.  Your interface must inherit the &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt; class.  It must also declare two global macros that uniquely identify your interface.  It must also implement two functions: &amp;lt;tt&amp;gt;GetInterfaceName&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GetInterfaceVersion&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two defines must start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt; respectively.  The first must be a string and the second must be an unsigned integer.  This integer represents your interface's version number.  While you are free to use it however you please, by default it should be linearly increased.  If you make breaking changes or change the versioning scheme, you must overload the &amp;lt;tt&amp;gt;IsVersionCompat&amp;lt;/tt&amp;gt; function in &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#ifndef _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
#define _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;IShareSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_NAME	&amp;quot;IMyInterface&amp;quot;&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_VERSION	1&lt;br /&gt;
&lt;br /&gt;
class IMyInterface : public SourceMod::SMInterface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	virtual const char *GetInterfaceName()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_NAME;&lt;br /&gt;
	}&lt;br /&gt;
	virtual unsigned int GetInterfaceVersion()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_VERSION;&lt;br /&gt;
	}&lt;br /&gt;
public:&lt;br /&gt;
	/**&lt;br /&gt;
	 * @brief This function does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	virtual void DoNothingAtAll() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif //_INCLUDE_MYINTERFACE_FILE_H_&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice, of course, that our interface is ''pure virtual''.  This means it must be implemented in the extension.  Assuming you know C++, this should be fairly straight forward, so let's skip right to how to add this interface to the SourceMod shared system:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddInterface(myself, &amp;amp;g_MyInterface);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: We do this in &amp;lt;tt&amp;gt;SDK_OnLoad()&amp;lt;/tT&amp;gt; instead of &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;.  Otherwise, an extension might try to search for your interface during &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;, and it might fail depending on the load order.''&lt;br /&gt;
&lt;br /&gt;
That simple?  Yup!  Now other extensions can use your interface.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using Interfaces/Other Extensions=&lt;br /&gt;
There are a variety of interfaces that are available, but not loaded by default in the Extension SDK.  These interfaces can be retrieved and used in your extension.&lt;br /&gt;
&lt;br /&gt;
==Core Interfaces==&lt;br /&gt;
If they are provided by Core, getting them is very simple.  Many interfaces can simply be uncommented in &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; and they will become usable.  See the &amp;quot;Available Interfaces&amp;quot; list below for the exposure list.&lt;br /&gt;
&lt;br /&gt;
Otherwise, most of the &amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt; interface files in the root of the &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; folder in the SDK are Core interfaces.  For example, code to use the IPluginManager interface might look like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;IPluginSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPluginManager *g_pPlugins = NULL;&lt;br /&gt;
&lt;br /&gt;
bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(PLUGINSYSTEM, g_pPlugins);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where did we get &amp;lt;tt&amp;gt;PLUGINSYSTEM&amp;lt;/tt&amp;gt; from?  Observe the two lines in &amp;lt;tt&amp;gt;IPluginSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#define SMINTERFACE_PLUGINSYSTEM_NAME		&amp;quot;IPluginManager&amp;quot;&lt;br /&gt;
#define SMINTERFACE_PLUGINSYSTEM_VERSION	1&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;SM_GET_IFACE&amp;lt;/tt&amp;gt; macro uses the text in between the &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; characters.  It also uses the version for compatibility checking.  If it can't find the interface, it automatically prints to the error buffer and returns false.&lt;br /&gt;
&lt;br /&gt;
===Default Interfaces===&lt;br /&gt;
There are interfaces which are grabbed by the Extension SDK by default.  You do not need to query for them on load, or even check if they are valid or not.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;IShareSys&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;sharesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IShareSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;HANDLESYSTEM&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IHandleSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SOURCEMOD&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;g_pSM&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;ISourceMod.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;FORWARDMANAGER&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IForwardSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Available Interfaces===&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_HANDLESYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_PLAYERHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;playerhelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_DBMANAGER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;dbi&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMECONF&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gameconfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_MEMUTILS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;memutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMEHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gamehelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_TIMERSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;timersys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_THREADER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Interfaces==&lt;br /&gt;
The situation changes if your extension requires ''another extension'', since extensions may load in a completely random order.  The first step is to mark the other extension as a dependency.  Let's say you want to use the &amp;lt;tt&amp;gt;IThreader.h&amp;lt;/tt&amp;gt; interfaces from &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt;.  First, we declare it as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddDependency(myself, &amp;quot;thread.ext&amp;quot;, true, true);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two boolean parameters to &amp;lt;tt&amp;gt;AddDependency&amp;lt;/tt&amp;gt; mean, respectively: &amp;quot;try to automatically load this extension&amp;quot; and &amp;quot;this extension cannot work without the dependency.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Second, we query for the interface in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;.  Since we don't know when &amp;lt;tt&amp;gt;thread.ext&amp;lt;/tt&amp;gt; will actually be loaded, we have to wait until everything is definitely loaded.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IThreader *g_pThreader = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_LATE_IFACE(THREADER, g_pThreader);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Third, we need to find a way to fail if this interface was never found.  The way to do this is by uncommenting &amp;lt;tt&amp;gt;QueryRunning&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implementing it:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::QueryRunning(char *error, size_t err_max)&lt;br /&gt;
{&lt;br /&gt;
	SM_CHECK_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SourceMod queries your extension, the macro above will either validate the pointer or return false.  If it returns false, SourceMod marks your extension as failed.&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
===NULL Interfaces===&lt;br /&gt;
There are a few ways that external interfaces can make your code complicated.  The first is simple but a common oversight.  Don't assume interfaces will be okay.  For example, say we want to create a thread once we get the &amp;lt;tt&amp;gt;IThreader&amp;lt;/tt&amp;gt; interface.  Our code should something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	&lt;br /&gt;
	if (QueryRunning(NULL, 0))&lt;br /&gt;
	{&lt;br /&gt;
		g_pThreader-&amp;gt;MakeThread(/* stuff */);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we ''query ourself'' in order to find if it's safe to continue executing code.  We could also have simply checked if &amp;lt;tt&amp;gt;g_pThreader&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, but self-querying has a bonus: if your extension continues to do things like hook events or add listeners, you will be preventing your extension from entirely initializing itself while one interface is bad.  Always make sure you have sanity checks like this where needed.&lt;br /&gt;
&lt;br /&gt;
===Dynamic Unloading===&lt;br /&gt;
The second major caveat is that extensions can be dynamically unloaded.  If you specified yourself as having a dependency and that each dependency is required, you will have no problem.  Your extension will be unloaded before the interface is removed, and you can clean up memory/hooks in your &amp;lt;tt&amp;gt;SDK_OnUnload()&amp;lt;/tt&amp;gt; code.  There are two situations where this is a different story.&lt;br /&gt;
&lt;br /&gt;
====Optional Interfaces====&lt;br /&gt;
The first situation is if you are not requiring an extension that contains an interface.  Now, when the extension unloads, your extension will not be unloaded first.  This creates a small problem, as you must clean up without being unloaded.  There are two functions you can implement in your extension class to resolve this, both documented in &amp;lt;tt&amp;gt;IExtensionSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*&amp;lt;tt&amp;gt;QueryInterfaceDrop&amp;lt;/tt&amp;gt; - Allows you to request unloading when a specific interface is unloaded.  This is the default behavior for all interfaces.  If you want to block this functionality, continue reading.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; - This is called when an interface is dropped.  If your plugin will not be unloaded, you can use this to clean up any resources on a specific interface being removed.&lt;br /&gt;
&lt;br /&gt;
====Circular Dependencies====&lt;br /&gt;
The second situation is a bit more complicated.  It is possible for two extensions to have circular dependencies.  For example:&lt;br /&gt;
*Extension &amp;quot;A&amp;quot; requires extension &amp;quot;B.&amp;quot;&lt;br /&gt;
*Extension &amp;quot;B&amp;quot; requires extension &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If either extension is unloaded, the opposite extension is unloaded normally.  The first extension then receives the interface drop callbacks.  In this situation, it is essential that the &amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; function be implemented and used with the circular interface.  Otherwise, you risk crashing when your extension unloads (or at the very least, leaking memory).  Since the actual drop order is undefined, it means both extensions must implement this function to be safe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Automatic Loading=&lt;br /&gt;
There are two types of automatic loading: Dynamic and Global.  Dynamic loading means your extension is only loaded when a plugin requires it.  Global loading means your extension loads no matter what.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Autoloading==&lt;br /&gt;
Dynamic loading requires that you create an include file for plugins.  Plugins that include your file will automatically load your extension.  This requires implementing the &amp;lt;tt&amp;gt;Extension&amp;lt;/tt&amp;gt; structure found in &amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;.  You must expose the structure as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt;, and the name must start with &amp;quot;&amp;lt;tt&amp;gt;__ext_&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Do not edit below this line!&lt;br /&gt;
 */&lt;br /&gt;
public Extension:__ext_geoip = &lt;br /&gt;
{&lt;br /&gt;
	name = &amp;quot;GeoIP&amp;quot;,&lt;br /&gt;
	file = &amp;quot;geoip.ext&amp;quot;,&lt;br /&gt;
#if defined AUTOLOAD_EXTENSIONS&lt;br /&gt;
	autoload = 1,&lt;br /&gt;
#else&lt;br /&gt;
	autoload = 0,&lt;br /&gt;
#endif&lt;br /&gt;
#if defined REQUIRE_EXTENSIONS&lt;br /&gt;
	required = 1,&lt;br /&gt;
#else&lt;br /&gt;
	required = 0,&lt;br /&gt;
#endif&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanations:&lt;br /&gt;
*&amp;lt;b&amp;gt;name&amp;lt;/b&amp;gt;: The name of your module as written in &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;: The platform-inspecific portion of your extension's file name.&lt;br /&gt;
*&amp;lt;b&amp;gt;autoload&amp;lt;/b&amp;gt;: Specifies that your module should always dynamically autoload by default.  You can tweak this to either never autoload or always autoload (without letting the user toggle).&lt;br /&gt;
*&amp;lt;b&amp;gt;required&amp;lt;/b&amp;gt;: Specifies whether or not this extension is '''required''' by your plugin.  If for some reason your extension fails to load (or is not found), the plugin will also fail to load.  This is changeable if you wish to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this example, but remember to modify the following portions:&lt;br /&gt;
*&amp;lt;b&amp;gt;__ext_geoip&amp;lt;/b&amp;gt;: Change the &amp;quot;geoip&amp;quot; portion to your own unique variable name.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;GeoIP&amp;lt;/b&amp;gt;: Change the GeoIP portion to your extension's name.  This should match the name you chose as &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;geoip.ext&amp;quot;&amp;lt;/b&amp;gt;: Change this to your extension's file name, without the .dll/.so portion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global Autoloading==&lt;br /&gt;
To have your extension always autoload, you must create a ''.autoload'' file in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder.  For example, to have the &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;threader.ext.so&amp;lt;/tt&amp;gt; extensions autoload, you'd create the following file in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader.autoload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
*This only works for extensions using the .ext.&amp;lt;platform&amp;gt; convention.  SourceMod cuts off the &amp;quot;.autoload&amp;quot; portion of the file, then adds the appropriate extension just as if 'sm exts load' was used.&lt;br /&gt;
*The file does not need to contain anything, it simply needs to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conventions=&lt;br /&gt;
&lt;br /&gt;
==Designing API/Natives==&lt;br /&gt;
*Start interface names with the capital letter 'I'.&lt;br /&gt;
*Use a consistent naming convention.  SourceMod uses [http://msdn2.microsoft.com/en-us/library/ms229002.aspx Microsoft/Pascal] naming.  Avoid Java/Camel casing for both API and natives.&lt;br /&gt;
*When exposing interfaces, make sure your exposure defines start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Naming==&lt;br /&gt;
*Logtags (&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt;) should be short names (under 10 characters or so) in all capital letters.&lt;br /&gt;
*Your extension file name should never have &amp;lt;tt&amp;gt;_i486&amp;lt;/tt&amp;gt; or other unnecessary platform-specific notations in its name.&lt;br /&gt;
*Your extension file name should always end in &amp;lt;tt&amp;gt;.ext.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; depending on the platform.  The &amp;lt;tt&amp;gt;.ext.&amp;lt;/tt&amp;gt; is SourceMod convention.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setting up Visual Studio=&lt;br /&gt;
&lt;br /&gt;
{{qnotice|It is recommended that you make a copy of the sample_ext project and modify that rather than create your own project, as it will set up most of this for you}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Project ==&lt;br /&gt;
&lt;br /&gt;
Instead of manually creating a project, you can make a copy of the sample_ext project and modify it.&lt;br /&gt;
&lt;br /&gt;
The sample_ext project assumes that it is located in a subdirectory inside the SourceMod public directory.  To change this, modify all references to ..\.. to $(SOURCEMOD15)\public and specify the SOURCEMOD15 variable as mentioned in the Optional Environment variables.&lt;br /&gt;
&lt;br /&gt;
The sample_ext projectuses the following environment variables to locate the various source code parts.  To set environment variables:&lt;br /&gt;
&lt;br /&gt;
'''Windows XP''': Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
'''Windows Vista/7''': Start -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced system properties -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
The environment variables used are:&lt;br /&gt;
&lt;br /&gt;
* '''MMSOURCE17''': Path to MetaMod: Source source code for version 1.7 or newer. Used to compile SourceMod itself.  &lt;br /&gt;
* '''MMSOURCE18''': Path to MetaMod: Source source code for version 1.8 or newer. Used in SourceMod 1.4 projects.  &lt;br /&gt;
* '''MMSOURCE19''': Path to MetaMod: Source source code for version 1.9 or newer. Used in SourceMod 1.5 projects.  &lt;br /&gt;
* '''HL2SDK''': Path to the Episode 1 SDK  &lt;br /&gt;
* '''HL2SDK-SWARM''': Path to the Alien Swarm SDK  &lt;br /&gt;
* '''HL2SDK-DARKM''': Path to the Dark Messiah SDK  &lt;br /&gt;
* '''HL2SDKCSGO''': Path to the Counter-Strike: Global Offensive SDK  &lt;br /&gt;
* '''HL2SDKCSS''': Path to the Counter-Strike: Source SDK  &lt;br /&gt;
* '''HL2SDKL4D''': Path to the Left 4 Dead SDK  &lt;br /&gt;
* '''HL2SDKL4D2''': Path to the Left 4 Dead 2 SDK  &lt;br /&gt;
* '''HL2SDKOB''': Path to the Orange Box SDK (not Source 2009)  &lt;br /&gt;
* '''HL2SDKOBVALVE''': Path to the Orange Box Valve / Source 2009 SDK (Half-Life 2: Deathmatch, Day of Defeat: Source, Team Fortress 2)&lt;br /&gt;
&lt;br /&gt;
Optional environment variables:&lt;br /&gt;
&lt;br /&gt;
* '''SOURCEMOD15'': Optional path to SourceMod 1.5 or newer source code&lt;br /&gt;
&lt;br /&gt;
==Manually configuring a project==&lt;br /&gt;
&lt;br /&gt;
===Paths===&lt;br /&gt;
'''Visual Studio 2003''': Tools -&amp;gt; Options -&amp;gt; Projects, VC++ Directories&lt;br /&gt;
&lt;br /&gt;
'''Visual Studio 2005''': Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; VC++ Directories&lt;br /&gt;
&lt;br /&gt;
====Include Paths====&lt;br /&gt;
*SourceMod only:&lt;br /&gt;
**sdk\public\extensions&lt;br /&gt;
**sdk\public\sourcepawn&lt;br /&gt;
**sdk\public&lt;br /&gt;
*SourceMM (Note that sourcemm might be 'trunk' for you):&lt;br /&gt;
**sourcemm\core&lt;br /&gt;
**sourcemm\core\sourcehook&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**game\shared&lt;br /&gt;
**public\vstdlib&lt;br /&gt;
**public\tier1&lt;br /&gt;
**public\tier0&lt;br /&gt;
**public\engine&lt;br /&gt;
**public&lt;br /&gt;
**dlls&lt;br /&gt;
&lt;br /&gt;
====Link Paths====&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**lib\public for version 2005&lt;br /&gt;
**lib-vc7\public for version 2003&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options are set by default in the sample Extension SDK.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options should be set for every build (Release/Debug/others).&lt;br /&gt;
&lt;br /&gt;
For VS 2005, goto Project-&amp;gt;Properties.&lt;br /&gt;
&lt;br /&gt;
*General&lt;br /&gt;
**&amp;lt;tt&amp;gt;Character Set&amp;lt;/tt&amp;gt;: '''Use Multi-Byte Character Set'''&lt;br /&gt;
*C/C++&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Detect 64-bit Portability Issues&amp;lt;/tt&amp;gt;: '''No'''&lt;br /&gt;
**Preprocessor&lt;br /&gt;
***&amp;lt;tt&amp;gt;Preprocessor Defines&amp;lt;/tt&amp;gt;: Add &amp;lt;tt&amp;gt;_CRT_SECURE_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;_CRT_NONSTDC_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SOURCEMOD_BUILD&amp;lt;/tt&amp;gt;  and &amp;lt;tt&amp;gt;WIN32&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Code Generation&lt;br /&gt;
***&amp;lt;tt&amp;gt;Runtime Library&amp;lt;/tt&amp;gt;: Multi-threaded or /MT (for Release), Multi-threaded Debug or /MTd (for Debug)&lt;br /&gt;
*Linker&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt;: Change &amp;lt;tt&amp;gt;$(ProjectName)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;$(ProjectName).ext&amp;lt;/tt&amp;gt;, or use your own custom string.&lt;br /&gt;
**Input&lt;br /&gt;
***&amp;lt;tt&amp;gt;Additional Dependencies&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;tier0.lib tier1.lib vstdlib.lib&amp;lt;/tt&amp;gt; (for SourceMM attached extensions only)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10132</id>
		<title>Writing Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10132"/>
		<updated>2016-04-11T19:20:51Z</updated>

		<summary type="html">&lt;p&gt;Darkid: /* Starting an Extension */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod's Extension System is a powerful way to greatly enhance the flexibility of your SourceMod plugins.  You can take full advantage of SourceMod's Core, using the interfaces it provides, to create C++ plugins, plugin events, plugin native functions, and shared interfaces.  Extensions can also hook into Metamod:Source.&lt;br /&gt;
&lt;br /&gt;
This article goes into the details of creating a SourceMod Extension.  Knowledge of C++ is required.&lt;br /&gt;
&lt;br /&gt;
=SDK Structure=&lt;br /&gt;
First, download the [[SourceMod SDK]] from the [[SourceMod]] github: [https://github.com/alliedmodders/sourcemod/releases].  The directory structure looks like this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;geoip/&amp;lt;/tt&amp;gt; - Source code to the GeoIP extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;mysql/&amp;lt;/tt&amp;gt; - Source code to the MySQL extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;threader/&amp;lt;/tt&amp;gt; - Source code to the Threader extension&lt;br /&gt;
*&amp;lt;tt&amp;gt;plugins/&amp;lt;/tt&amp;gt; - Source code to all of SourceMod's plugins&lt;br /&gt;
**&amp;lt;tt&amp;gt;include/&amp;lt;/tt&amp;gt; - The include files which document plugin API&lt;br /&gt;
*&amp;lt;tt&amp;gt;public/&amp;lt;/tt&amp;gt; - Interface files for SourceMod's Core Interfaces&lt;br /&gt;
**&amp;lt;tt&amp;gt;extensions/&amp;lt;/tt&amp;gt; - Interfaces that are provided by extensions&lt;br /&gt;
**&amp;lt;tt&amp;gt;sample_ext/&amp;lt;/tt&amp;gt; - The Sample Extension SDK&lt;br /&gt;
**&amp;lt;tt&amp;gt;sourcepawn&amp;lt;/tt&amp;gt; - The include/interface files for SourcePawn&lt;br /&gt;
*&amp;lt;tt&amp;gt;sourcepawn/&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;compiler/&amp;lt;/tt&amp;gt; - The SourcePawn Compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Starting an Extension=&lt;br /&gt;
For simplicity, this article will assume you are using the SDK base files (&amp;lt;code&amp;gt;public/sample_ext&amp;lt;/code&amp;gt;).  These are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_config.h&amp;lt;/tt&amp;gt; - Configuration settings (we will be editing this)&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.h&amp;lt;/tt&amp;gt; - Header for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.cpp&amp;lt;/tt&amp;gt; - Source for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; - User file for main extension header&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; - User file for main extension code&lt;br /&gt;
&lt;br /&gt;
''The &amp;lt;tt&amp;gt;extension.*&amp;lt;/tt&amp;gt; files are not technically part of the SDK.  However, they are provided to give users a starting point and some documentation.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' For help setting up Visual Studio, please see [[#Setting up Visual Studio|Setting up Visual Studio]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step of creating your extension is to configure it.  Open the &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; file and edit each of the following defines.  Use the information below to guide you.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt; - The general name for your Extension (should be short).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DESCRIPTION&amp;lt;/tt&amp;gt; - A short description of what your extension does.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_VERSION&amp;lt;/tt&amp;gt; - A version number string.  By convention, SourceMod uses the four set build number notation.  I.e. for 1.2.3.4:&lt;br /&gt;
**&amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; is the &amp;quot;Major&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; is the &amp;quot;Minor&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; is the &amp;quot;Maintenance&amp;quot; or &amp;quot;Revision&amp;quot; version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; is the &amp;quot;Build,&amp;quot; usually an internal source control number.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_AUTHOR&amp;lt;/tt&amp;gt; - Your name (or whoever/whatever authored the plugin).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_URL&amp;lt;/tt&amp;gt; - The URL/homepage of this extension.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt; - The logtag your extension will use for SourceMod logging.  By convention, try to keep this under ten characters or so, and to make it all caps.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LICENSE&amp;lt;/tt&amp;gt; - Right now, the SourceMod Dev Team mandates that 3rd party extensions must be under an Open Source license.  Putting a license abbreviation or very short message here is appropriate.  For more information, see [[SourceMod License]].&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DATESTRING&amp;lt;/tt&amp;gt; - You do not need to modify this.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_METAMOD&amp;lt;/tt&amp;gt; - If your plugin requires using SourceHook or Metamod:Source, uncomment this line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you may want to change the name of the default class that &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; declares.  To do this...&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and change &amp;quot;Sample&amp;quot; in this line:&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Sample : public SDKExtension&amp;lt;/cpp&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; and change the two lines to correspond to your new class name.  You can also change the global singleton that's declared, although you cannot remove the &amp;lt;tt&amp;gt;SMEXT_LINK&amp;lt;/tt&amp;gt; line (this lets SourceMod load your extension).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Studio Users==&lt;br /&gt;
Make sure you change the name of your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file.  The naming convention for SourceMod extensions is &amp;lt;tt&amp;gt;name.ext.dll&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is a short name for your extension.  You are free to change this, but it is highly recommended that you keep the &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
You can do this by going to &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Configuration Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Linker&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;General&amp;lt;/tt&amp;gt;.  Set the &amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt; option appropriately.&lt;br /&gt;
&lt;br /&gt;
==Linux Users==&lt;br /&gt;
Simply edit the &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; and change the &amp;lt;tt&amp;gt;BINARY&amp;lt;/tt&amp;gt; line near the top.  Make sure you do not add any trailing spaces at the end of the name, or the build won't come out right.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile a blank extension!&lt;br /&gt;
&lt;br /&gt;
=Creating Native Functions=&lt;br /&gt;
''Main article: [[Natives (SourceMod Development)]]''&lt;br /&gt;
&lt;br /&gt;
Most of the time, an extension exists to add &amp;quot;native functions&amp;quot; to the plugin system.  Native functions are simply the functions that plugins can use in SourceMod.  They are coded in C++ and have a short prototype declaration in an include file.&lt;br /&gt;
&lt;br /&gt;
==Prototyping==&lt;br /&gt;
The first step to creating a native is to &amp;lt;tt&amp;gt;spec it&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;prototype&amp;lt;/tt&amp;gt; it.  This is a simple but often time consuming process, but if you get in the habit of it, your documentation will be much better.  Let's first create a very simply native.  Here is a prototype for it, which we will place in &amp;lt;tt&amp;gt;sample.inc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the square of a number.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num	Number to square.&lt;br /&gt;
 * @return	The square of num.&lt;br /&gt;
 */&lt;br /&gt;
native SquareNumber(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;native&amp;lt;/tt&amp;gt; keyword tells the compiler that this function exists in an outside source.  The comment style is similar to [http://www.stack.nl/~dimitri/doxygen/ doxygen] or [http://java.sun.com/j2se/javadoc/ Javadoc], and is preferred by the SourceMod Development Team.&lt;br /&gt;
&lt;br /&gt;
==Implementing==&lt;br /&gt;
Now that our function is documented, it's time to create it!  Each native function is bound to a C++ function.  The prototype for this function looks like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t Function(IPluginContext *pContext, const cell_t *params);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A quick explanation of these types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; - This is a 32bit signed integer, the generic data type for Pawn.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IPluginContext&amp;lt;/tt&amp;gt; - This interface provides Virtual Machine functions for retrieving or modifying memory in the plugin.&lt;br /&gt;
*&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; - This is the &amp;quot;stack&amp;quot; of parameters that the plugin passed.  It is an array from [0..N] where 0 contains N. This means &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains the number of arguments passed to the native.&lt;br /&gt;
**For example, if one parameter was passed, and the parameter is 25:&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; == 1&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; == 25&lt;br /&gt;
**Even though it tells you how many parameters are passed, you do not need to verify this number.  The compiler will always pass the correct number of parameters in.  The only time you need to verify it is for backwards compatibility or variable parameter lists, which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
Now, let's write our native function:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t SquareNumber(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t number = params[1];&lt;br /&gt;
	return number * number;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding==&lt;br /&gt;
Now, the final step is to bind our native.  Natives are bound in ''native lists''.  Each list must be terminated by a &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; bind.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;const sp_nativeinfo_t MyNatives[] = &lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;SquareNumber&amp;quot;,	SquareNumber},&lt;br /&gt;
	{NULL,			NULL},&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first column/member is a string containing the name you've assigned to the native.  The second column/member is the C++ function you're binding to.  Here, both contain the same name, but it is certainly possible to bind a function to any valid Pawn function name, and likewise, you can bind one function to more than one name.&lt;br /&gt;
&lt;br /&gt;
Lastly, you must tell Core about your native list.  There are two places that are good to do this.  Whichever you choose, you must uncomment the function in &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it in &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnLoad&amp;lt;/tt&amp;gt; - This is called when your extension is first loaded.  If you do not require any outside interfaces, it is safe to add natives here.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt; - This is called when all extensions have been loaded.  This is generally a better place to add natives.&lt;br /&gt;
&lt;br /&gt;
Let's say we choose &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;, we'd then have code like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: &amp;lt;tt&amp;gt;myself&amp;lt;/tt&amp;gt; is a global variable declared in the SDK.  It is a pointer that identifies your extension.''&lt;br /&gt;
&lt;br /&gt;
For more information on writing natives, see [[Natives (SourceMod Development)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Events/Forwards=&lt;br /&gt;
Events are an integral part to SourceMod.  An Event is formally called a ''Forward''.  Forwards are functions inside a plugin which are not called by the plugin itself, but are triggered from an external source.  For example, &amp;lt;tt&amp;gt;OnClientConnect&amp;lt;/tt&amp;gt; is a forward which is triggered when a player connects to a server.&lt;br /&gt;
&lt;br /&gt;
There are two major types of forwards:&lt;br /&gt;
*'''Managed''': This forward is global and has a name.  To use this forward, the function must be declared as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; inside the user's script.  Any plugin having this public function will receive the event.&lt;br /&gt;
*'''Unmanaged''': This forward is private in nature.  For example, the &amp;lt;tt&amp;gt;HookUserMessage&amp;lt;/tt&amp;gt; native lets users specify a function to be called when a specific user message is sent.  This is done with an unmanaged forward, and adding functions to this forward is not automatic.  In general, function calls for unmanaged forwards are not public, although they can be.&lt;br /&gt;
&lt;br /&gt;
''Note: To enable the Forward interface, you must uncomment the definition &amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt; in smsdk_config.h.''&lt;br /&gt;
==Managed Forwards==&lt;br /&gt;
Let's say we want to create a forward that will be called when a player uses say chat.  For simplicity, let's assume you already have a function that tells you when a player says say chat.  We will just be creating the forward for it.&lt;br /&gt;
&lt;br /&gt;
As we did before, first let's prototype our global forward.  In our include file, we add this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * @brief Called whenever a client says something in chat.&lt;br /&gt;
 *&lt;br /&gt;
 * @param client	Index of the client.&lt;br /&gt;
 * @param text		String containing the say text.&lt;br /&gt;
 * @return 		Pl_Handled to block text from printing, Pl_Continue otherwise.&lt;br /&gt;
 */&lt;br /&gt;
forward ResultType:OnPlayerSayChat(client, const String:text[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;forward&amp;lt;/tt&amp;gt; keyword tells the compiler that any function having this name must be declared exactly the same.  In a plugin, this would&lt;br /&gt;
&lt;br /&gt;
The next step is to declare your forward somewhere at the top of your &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; file.  This will look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;IForward *g_pSayChat = NULL&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, re-using our code from above, let's create this forward in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForward(&amp;quot;OnPlayerSayChat&amp;quot;, ET_Event, 2, NULL, Param_Cell, Param_String);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;quot;OnPlayerSayChat&amp;quot;&amp;lt;/tt&amp;gt; - The name of our forward.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Since forwards can execute multiple functions in multiple scripts, this is one of the ways of specifying what to do with the return value of each function.  &amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; means &amp;quot;return the highest value, do not allow stops.&amp;quot;  A stop refers to &amp;lt;tt&amp;gt;Pl_Stop&amp;lt;/tt&amp;gt;, which lets a plugin block the rest of the event chain.&lt;br /&gt;
*&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; - This is the number of parameters our forward will have.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; - Not used in our example.  This lets you pass parameters by array rather than variable arguments.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - The first parameter is a cell (integer).&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - The second parameter is a string.&lt;br /&gt;
&lt;br /&gt;
Now, we write a quick function in our module to call this forward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;/** Fires the say chat event in plugins.  Returns true to allow the text, false to block. */&lt;br /&gt;
bool FireChatEvent(int client, const char *text)&lt;br /&gt;
{&lt;br /&gt;
	if (!g_pSayChat)&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cell_t result = 0;&lt;br /&gt;
	g_pSayChat-&amp;gt;PushCell(client);&lt;br /&gt;
	g_pSayChat-&amp;gt;PushString(text);&lt;br /&gt;
	g_pSayChat-&amp;gt;Execute(&amp;amp;result);&lt;br /&gt;
	&lt;br /&gt;
	if (result == Pl_Handled)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, this was pretty simple.  Each parameter is &amp;quot;pushed&amp;quot; one at a time, in ascending order.  First we push the client index as a cell, then the text as a string.  Once done, we execute, and the value will be returned by reference.&lt;br /&gt;
&lt;br /&gt;
Lastly, there is a caveat.  Unlike natives, SourceMod does not automatically clean up forwards for us when are done.  We have to make sure we destroy them.  Uncomment &amp;lt;tt&amp;gt;SDK_OnUnload&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it like so:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnUnload()&lt;br /&gt;
{&lt;br /&gt;
	forwards-&amp;gt;ReleaseForward(g_pSayChat);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unmanaged Forwards==&lt;br /&gt;
Now things get a bit more complicated.  However, unmanaged forwards are essentially the same -- they just give you more flexibility.  Let's consider the managed example with a new twist.  We want to let users add and remove hooks from their plugins, rather than having one global forward.  The standard way to do this is with ''function IDs''.  &lt;br /&gt;
&lt;br /&gt;
Example prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;funcenum SayChatHook&lt;br /&gt;
{&lt;br /&gt;
	forward(client, const String:text[]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
native AddSayChatHook(SayChatHook:hook);&lt;br /&gt;
native RemoveSayChatHook(SayChatHook:hook);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;funcenum&amp;lt;/tt&amp;gt; syntax lets you define all the valid prototypes for your hook.  In this example, the only valid method is a function declared like this (only MyHook can be changed):&lt;br /&gt;
&amp;lt;pawn&amp;gt;MyHook(client, const String:text[])&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How do we make such a beast?  The first step is setting up our forward.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IChangeableForward *g_pSayChat = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForwardEx(NULL, ET_Hook, 2, NULL, Param_Cell, Param_String); &lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice two big differences.  We now use &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, and we use &amp;lt;tt&amp;gt;CreateForwardEx&amp;lt;/tt&amp;gt; instead.  The initial first parameter specifies a name for our forward - we're going to ignore this.&lt;br /&gt;
&lt;br /&gt;
Now, we need to create our natives.  These will be fairly simple:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t AddSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat-&amp;gt;AddFunction(pContext, static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cell_t RemoveSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	IPluginFunction *pFunction = pContext-&amp;gt;GetFunctionById(static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	g_pSayChat-&amp;gt;RemoveFunction(pFunction);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: These natives must be added -- that step is removed here and explained earlier.''&lt;br /&gt;
&lt;br /&gt;
You do not need to worry about a plugin unloading - Core will automatically remove the functions for you.  Since an &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; is also an &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, the &amp;lt;tt&amp;gt;FireChatEvent&amp;lt;/tt&amp;gt; function from earlier does not need to change.  We're done!&lt;br /&gt;
&lt;br /&gt;
==Creating Interfaces==&lt;br /&gt;
Do you want your extension to share an interface?  If so, first you should create an ''interface file''.  This file should contain everything your interface needs - this way other authors can easily reference it.  Your interface must inherit the &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt; class.  It must also declare two global macros that uniquely identify your interface.  It must also implement two functions: &amp;lt;tt&amp;gt;GetInterfaceName&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GetInterfaceVersion&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two defines must start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt; respectively.  The first must be a string and the second must be an unsigned integer.  This integer represents your interface's version number.  While you are free to use it however you please, by default it should be linearly increased.  If you make breaking changes or change the versioning scheme, you must overload the &amp;lt;tt&amp;gt;IsVersionCompat&amp;lt;/tt&amp;gt; function in &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#ifndef _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
#define _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;IShareSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_NAME	&amp;quot;IMyInterface&amp;quot;&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_VERSION	1&lt;br /&gt;
&lt;br /&gt;
class IMyInterface : public SourceMod::SMInterface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	virtual const char *GetInterfaceName()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_NAME;&lt;br /&gt;
	}&lt;br /&gt;
	virtual unsigned int GetInterfaceVersion()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_VERSION;&lt;br /&gt;
	}&lt;br /&gt;
public:&lt;br /&gt;
	/**&lt;br /&gt;
	 * @brief This function does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	virtual void DoNothingAtAll() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif //_INCLUDE_MYINTERFACE_FILE_H_&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice, of course, that our interface is ''pure virtual''.  This means it must be implemented in the extension.  Assuming you know C++, this should be fairly straight forward, so let's skip right to how to add this interface to the SourceMod shared system:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddInterface(myself, &amp;amp;g_MyInterface);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: We do this in &amp;lt;tt&amp;gt;SDK_OnLoad()&amp;lt;/tT&amp;gt; instead of &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;.  Otherwise, an extension might try to search for your interface during &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;, and it might fail depending on the load order.''&lt;br /&gt;
&lt;br /&gt;
That simple?  Yup!  Now other extensions can use your interface.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using Interfaces/Other Extensions=&lt;br /&gt;
There are a variety of interfaces that are available, but not loaded by default in the Extension SDK.  These interfaces can be retrieved and used in your extension.&lt;br /&gt;
&lt;br /&gt;
==Core Interfaces==&lt;br /&gt;
If they are provided by Core, getting them is very simple.  Many interfaces can simply be uncommented in &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; and they will become usable.  See the &amp;quot;Available Interfaces&amp;quot; list below for the exposure list.&lt;br /&gt;
&lt;br /&gt;
Otherwise, most of the &amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt; interface files in the root of the &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; folder in the SDK are Core interfaces.  For example, code to use the IPluginManager interface might look like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;IPluginSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPluginManager *g_pPlugins = NULL;&lt;br /&gt;
&lt;br /&gt;
bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(PLUGINSYSTEM, g_pPlugins);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where did we get &amp;lt;tt&amp;gt;PLUGINSYSTEM&amp;lt;/tt&amp;gt; from?  Observe the two lines in &amp;lt;tt&amp;gt;IPluginSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#define SMINTERFACE_PLUGINSYSTEM_NAME		&amp;quot;IPluginManager&amp;quot;&lt;br /&gt;
#define SMINTERFACE_PLUGINSYSTEM_VERSION	1&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;SM_GET_IFACE&amp;lt;/tt&amp;gt; macro uses the text in between the &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; characters.  It also uses the version for compatibility checking.  If it can't find the interface, it automatically prints to the error buffer and returns false.&lt;br /&gt;
&lt;br /&gt;
===Default Interfaces===&lt;br /&gt;
There are interfaces which are grabbed by the Extension SDK by default.  You do not need to query for them on load, or even check if they are valid or not.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;IShareSys&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;sharesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IShareSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;HANDLESYSTEM&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IHandleSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SOURCEMOD&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;g_pSM&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;ISourceMod.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;FORWARDMANAGER&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IForwardSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Available Interfaces===&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_HANDLESYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_PLAYERHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;playerhelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_DBMANAGER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;dbi&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMECONF&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gameconfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_MEMUTILS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;memutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMEHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gamehelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_TIMERSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;timersys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_THREADER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Interfaces==&lt;br /&gt;
The situation changes if your extension requires ''another extension'', since extensions may load in a completely random order.  The first step is to mark the other extension as a dependency.  Let's say you want to use the &amp;lt;tt&amp;gt;IThreader.h&amp;lt;/tt&amp;gt; interfaces from &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt;.  First, we declare it as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddDependency(myself, &amp;quot;thread.ext&amp;quot;, true, true);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two boolean parameters to &amp;lt;tt&amp;gt;AddDependency&amp;lt;/tt&amp;gt; mean, respectively: &amp;quot;try to automatically load this extension&amp;quot; and &amp;quot;this extension cannot work without the dependency.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Second, we query for the interface in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;.  Since we don't know when &amp;lt;tt&amp;gt;thread.ext&amp;lt;/tt&amp;gt; will actually be loaded, we have to wait until everything is definitely loaded.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IThreader *g_pThreader = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_LATE_IFACE(THREADER, g_pThreader);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Third, we need to find a way to fail if this interface was never found.  The way to do this is by uncommenting &amp;lt;tt&amp;gt;QueryRunning&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implementing it:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::QueryRunning(char *error, size_t err_max)&lt;br /&gt;
{&lt;br /&gt;
	SM_CHECK_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SourceMod queries your extension, the macro above will either validate the pointer or return false.  If it returns false, SourceMod marks your extension as failed.&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
===NULL Interfaces===&lt;br /&gt;
There are a few ways that external interfaces can make your code complicated.  The first is simple but a common oversight.  Don't assume interfaces will be okay.  For example, say we want to create a thread once we get the &amp;lt;tt&amp;gt;IThreader&amp;lt;/tt&amp;gt; interface.  Our code should something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	&lt;br /&gt;
	if (QueryRunning(NULL, 0))&lt;br /&gt;
	{&lt;br /&gt;
		g_pThreader-&amp;gt;MakeThread(/* stuff */);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we ''query ourself'' in order to find if it's safe to continue executing code.  We could also have simply checked if &amp;lt;tt&amp;gt;g_pThreader&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, but self-querying has a bonus: if your extension continues to do things like hook events or add listeners, you will be preventing your extension from entirely initializing itself while one interface is bad.  Always make sure you have sanity checks like this where needed.&lt;br /&gt;
&lt;br /&gt;
===Dynamic Unloading===&lt;br /&gt;
The second major caveat is that extensions can be dynamically unloaded.  If you specified yourself as having a dependency and that each dependency is required, you will have no problem.  Your extension will be unloaded before the interface is removed, and you can clean up memory/hooks in your &amp;lt;tt&amp;gt;SDK_OnUnload()&amp;lt;/tt&amp;gt; code.  There are two situations where this is a different story.&lt;br /&gt;
&lt;br /&gt;
====Optional Interfaces====&lt;br /&gt;
The first situation is if you are not requiring an extension that contains an interface.  Now, when the extension unloads, your extension will not be unloaded first.  This creates a small problem, as you must clean up without being unloaded.  There are two functions you can implement in your extension class to resolve this, both documented in &amp;lt;tt&amp;gt;IExtensionSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*&amp;lt;tt&amp;gt;QueryInterfaceDrop&amp;lt;/tt&amp;gt; - Allows you to request unloading when a specific interface is unloaded.  This is the default behavior for all interfaces.  If you want to block this functionality, continue reading.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; - This is called when an interface is dropped.  If your plugin will not be unloaded, you can use this to clean up any resources on a specific interface being removed.&lt;br /&gt;
&lt;br /&gt;
====Circular Dependencies====&lt;br /&gt;
The second situation is a bit more complicated.  It is possible for two extensions to have circular dependencies.  For example:&lt;br /&gt;
*Extension &amp;quot;A&amp;quot; requires extension &amp;quot;B.&amp;quot;&lt;br /&gt;
*Extension &amp;quot;B&amp;quot; requires extension &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If either extension is unloaded, the opposite extension is unloaded normally.  The first extension then receives the interface drop callbacks.  In this situation, it is essential that the &amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; function be implemented and used with the circular interface.  Otherwise, you risk crashing when your extension unloads (or at the very least, leaking memory).  Since the actual drop order is undefined, it means both extensions must implement this function to be safe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Automatic Loading=&lt;br /&gt;
There are two types of automatic loading: Dynamic and Global.  Dynamic loading means your extension is only loaded when a plugin requires it.  Global loading means your extension loads no matter what.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Autoloading==&lt;br /&gt;
Dynamic loading requires that you create an include file for plugins.  Plugins that include your file will automatically load your extension.  This requires implementing the &amp;lt;tt&amp;gt;Extension&amp;lt;/tt&amp;gt; structure found in &amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;.  You must expose the structure as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt;, and the name must start with &amp;quot;&amp;lt;tt&amp;gt;__ext_&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Do not edit below this line!&lt;br /&gt;
 */&lt;br /&gt;
public Extension:__ext_geoip = &lt;br /&gt;
{&lt;br /&gt;
	name = &amp;quot;GeoIP&amp;quot;,&lt;br /&gt;
	file = &amp;quot;geoip.ext&amp;quot;,&lt;br /&gt;
#if defined AUTOLOAD_EXTENSIONS&lt;br /&gt;
	autoload = 1,&lt;br /&gt;
#else&lt;br /&gt;
	autoload = 0,&lt;br /&gt;
#endif&lt;br /&gt;
#if defined REQUIRE_EXTENSIONS&lt;br /&gt;
	required = 1,&lt;br /&gt;
#else&lt;br /&gt;
	required = 0,&lt;br /&gt;
#endif&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanations:&lt;br /&gt;
*&amp;lt;b&amp;gt;name&amp;lt;/b&amp;gt;: The name of your module as written in &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;: The platform-inspecific portion of your extension's file name.&lt;br /&gt;
*&amp;lt;b&amp;gt;autoload&amp;lt;/b&amp;gt;: Specifies that your module should always dynamically autoload by default.  You can tweak this to either never autoload or always autoload (without letting the user toggle).&lt;br /&gt;
*&amp;lt;b&amp;gt;required&amp;lt;/b&amp;gt;: Specifies whether or not this extension is '''required''' by your plugin.  If for some reason your extension fails to load (or is not found), the plugin will also fail to load.  This is changeable if you wish to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this example, but remember to modify the following portions:&lt;br /&gt;
*&amp;lt;b&amp;gt;__ext_geoip&amp;lt;/b&amp;gt;: Change the &amp;quot;geoip&amp;quot; portion to your own unique variable name.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;GeoIP&amp;lt;/b&amp;gt;: Change the GeoIP portion to your extension's name.  This should match the name you chose as &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;geoip.ext&amp;quot;&amp;lt;/b&amp;gt;: Change this to your extension's file name, without the .dll/.so portion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global Autoloading==&lt;br /&gt;
To have your extension always autoload, you must create a ''.autoload'' file in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder.  For example, to have the &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;threader.ext.so&amp;lt;/tt&amp;gt; extensions autoload, you'd create the following file in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader.autoload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
*This only works for extensions using the .ext.&amp;lt;platform&amp;gt; convention.  SourceMod cuts off the &amp;quot;.autoload&amp;quot; portion of the file, then adds the appropriate extension just as if 'sm exts load' was used.&lt;br /&gt;
*The file does not need to contain anything, it simply needs to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conventions=&lt;br /&gt;
&lt;br /&gt;
==Designing API/Natives==&lt;br /&gt;
*Start interface names with the capital letter 'I'.&lt;br /&gt;
*Use a consistent naming convention.  SourceMod uses [http://msdn2.microsoft.com/en-us/library/ms229002.aspx Microsoft/Pascal] naming.  Avoid Java/Camel casing for both API and natives.&lt;br /&gt;
*When exposing interfaces, make sure your exposure defines start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Naming==&lt;br /&gt;
*Logtags (&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt;) should be short names (under 10 characters or so) in all capital letters.&lt;br /&gt;
*Your extension file name should never have &amp;lt;tt&amp;gt;_i486&amp;lt;/tt&amp;gt; or other unnecessary platform-specific notations in its name.&lt;br /&gt;
*Your extension file name should always end in &amp;lt;tt&amp;gt;.ext.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; depending on the platform.  The &amp;lt;tt&amp;gt;.ext.&amp;lt;/tt&amp;gt; is SourceMod convention.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setting up Visual Studio=&lt;br /&gt;
&lt;br /&gt;
{{qnotice|It is recommended that you make a copy of the sample_ext project and modify that rather than create your own project, as it will set up most of this for you}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Project ==&lt;br /&gt;
&lt;br /&gt;
Instead of manually creating a project, you can make a copy of the sample_ext project and modify it.&lt;br /&gt;
&lt;br /&gt;
The sample_ext project assumes that it is located in a subdirectory inside the SourceMod public directory.  To change this, modify all references to ..\.. to $(SOURCEMOD15)\public and specify the SOURCEMOD15 variable as mentioned in the Optional Environment variables.&lt;br /&gt;
&lt;br /&gt;
The sample_ext projectuses the following environment variables to locate the various source code parts.  To set environment variables:&lt;br /&gt;
&lt;br /&gt;
'''Windows XP''': Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
'''Windows Vista/7''': Start -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced system properties -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
The environment variables used are:&lt;br /&gt;
&lt;br /&gt;
* '''MMSOURCE17''': Path to MetaMod: Source source code for version 1.7 or newer. Used to compile SourceMod itself.  &lt;br /&gt;
* '''MMSOURCE18''': Path to MetaMod: Source source code for version 1.8 or newer. Used in SourceMod 1.4 projects.  &lt;br /&gt;
* '''MMSOURCE19''': Path to MetaMod: Source source code for version 1.9 or newer. Used in SourceMod 1.5 projects.  &lt;br /&gt;
* '''HL2SDK''': Path to the Episode 1 SDK  &lt;br /&gt;
* '''HL2SDK-SWARM''': Path to the Alien Swarm SDK  &lt;br /&gt;
* '''HL2SDK-DARKM''': Path to the Dark Messiah SDK  &lt;br /&gt;
* '''HL2SDKCSGO''': Path to the Counter-Strike: Global Offensive SDK  &lt;br /&gt;
* '''HL2SDKCSS''': Path to the Counter-Strike: Source SDK  &lt;br /&gt;
* '''HL2SDKL4D''': Path to the Left 4 Dead SDK  &lt;br /&gt;
* '''HL2SDKL4D2''': Path to the Left 4 Dead 2 SDK  &lt;br /&gt;
* '''HL2SDKOB''': Path to the Orange Box SDK (not Source 2009)  &lt;br /&gt;
* '''HL2SDKOBVALVE''': Path to the Orange Box Valve / Source 2009 SDK (Half-Life 2: Deathmatch, Day of Defeat: Source, Team Fortress 2)&lt;br /&gt;
&lt;br /&gt;
Optional environment variables:&lt;br /&gt;
&lt;br /&gt;
* '''SOURCEMOD15'': Optional path to SourceMod 1.5 or newer source code&lt;br /&gt;
&lt;br /&gt;
==Manually configuring a project==&lt;br /&gt;
&lt;br /&gt;
===Paths===&lt;br /&gt;
'''Visual Studio 2003''': Tools -&amp;gt; Options -&amp;gt; Projects, VC++ Directories&lt;br /&gt;
&lt;br /&gt;
'''Visual Studio 2005''': Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; VC++ Directories&lt;br /&gt;
&lt;br /&gt;
====Include Paths====&lt;br /&gt;
*SourceMod only:&lt;br /&gt;
**sdk\public\extensions&lt;br /&gt;
**sdk\public\sourcepawn&lt;br /&gt;
**sdk\public&lt;br /&gt;
*SourceMM (Note that sourcemm might be 'trunk' for you):&lt;br /&gt;
**sourcemm\core&lt;br /&gt;
**sourcemm\core\sourcehook&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**game\shared&lt;br /&gt;
**public\vstdlib&lt;br /&gt;
**public\tier1&lt;br /&gt;
**public\tier0&lt;br /&gt;
**public\engine&lt;br /&gt;
**public&lt;br /&gt;
**dlls&lt;br /&gt;
&lt;br /&gt;
====Link Paths====&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**lib\public for version 2005&lt;br /&gt;
**lib-vc7\public for version 2003&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options are set by default in the sample Extension SDK.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options should be set for every build (Release/Debug/others).&lt;br /&gt;
&lt;br /&gt;
For VS 2005, goto Project-&amp;gt;Properties.&lt;br /&gt;
&lt;br /&gt;
*General&lt;br /&gt;
**&amp;lt;tt&amp;gt;Character Set&amp;lt;/tt&amp;gt;: '''Use Multi-Byte Character Set'''&lt;br /&gt;
*C/C++&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Detect 64-bit Portability Issues&amp;lt;/tt&amp;gt;: '''No'''&lt;br /&gt;
**Preprocessor&lt;br /&gt;
***&amp;lt;tt&amp;gt;Preprocessor Defines&amp;lt;/tt&amp;gt;: Add &amp;lt;tt&amp;gt;_CRT_SECURE_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;_CRT_NONSTDC_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SOURCEMOD_BUILD&amp;lt;/tt&amp;gt;  and &amp;lt;tt&amp;gt;WIN32&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Code Generation&lt;br /&gt;
***&amp;lt;tt&amp;gt;Runtime Library&amp;lt;/tt&amp;gt;: Multi-threaded or /MT (for Release), Multi-threaded Debug or /MTd (for Debug)&lt;br /&gt;
*Linker&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt;: Change &amp;lt;tt&amp;gt;$(ProjectName)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;$(ProjectName).ext&amp;lt;/tt&amp;gt;, or use your own custom string.&lt;br /&gt;
**Input&lt;br /&gt;
***&amp;lt;tt&amp;gt;Additional Dependencies&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;tier0.lib tier1.lib vstdlib.lib&amp;lt;/tt&amp;gt; (for SourceMM attached extensions only)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10131</id>
		<title>Writing Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10131"/>
		<updated>2016-04-11T19:20:41Z</updated>

		<summary type="html">&lt;p&gt;Darkid: /* Starting an Extension */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod's Extension System is a powerful way to greatly enhance the flexibility of your SourceMod plugins.  You can take full advantage of SourceMod's Core, using the interfaces it provides, to create C++ plugins, plugin events, plugin native functions, and shared interfaces.  Extensions can also hook into Metamod:Source.&lt;br /&gt;
&lt;br /&gt;
This article goes into the details of creating a SourceMod Extension.  Knowledge of C++ is required.&lt;br /&gt;
&lt;br /&gt;
=SDK Structure=&lt;br /&gt;
First, download the [[SourceMod SDK]] from the [[SourceMod]] github: [https://github.com/alliedmodders/sourcemod/releases].  The directory structure looks like this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;geoip/&amp;lt;/tt&amp;gt; - Source code to the GeoIP extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;mysql/&amp;lt;/tt&amp;gt; - Source code to the MySQL extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;threader/&amp;lt;/tt&amp;gt; - Source code to the Threader extension&lt;br /&gt;
*&amp;lt;tt&amp;gt;plugins/&amp;lt;/tt&amp;gt; - Source code to all of SourceMod's plugins&lt;br /&gt;
**&amp;lt;tt&amp;gt;include/&amp;lt;/tt&amp;gt; - The include files which document plugin API&lt;br /&gt;
*&amp;lt;tt&amp;gt;public/&amp;lt;/tt&amp;gt; - Interface files for SourceMod's Core Interfaces&lt;br /&gt;
**&amp;lt;tt&amp;gt;extensions/&amp;lt;/tt&amp;gt; - Interfaces that are provided by extensions&lt;br /&gt;
**&amp;lt;tt&amp;gt;sample_ext/&amp;lt;/tt&amp;gt; - The Sample Extension SDK&lt;br /&gt;
**&amp;lt;tt&amp;gt;sourcepawn&amp;lt;/tt&amp;gt; - The include/interface files for SourcePawn&lt;br /&gt;
*&amp;lt;tt&amp;gt;sourcepawn/&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;compiler/&amp;lt;/tt&amp;gt; - The SourcePawn Compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Starting an Extension=&lt;br /&gt;
For simplicity, this article will assume you are using the SDK base files (&amp;lt;code&amp;gt;public/sample_ext&amp;lt;/code).  These are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_config.h&amp;lt;/tt&amp;gt; - Configuration settings (we will be editing this)&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.h&amp;lt;/tt&amp;gt; - Header for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.cpp&amp;lt;/tt&amp;gt; - Source for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; - User file for main extension header&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; - User file for main extension code&lt;br /&gt;
&lt;br /&gt;
''The &amp;lt;tt&amp;gt;extension.*&amp;lt;/tt&amp;gt; files are not technically part of the SDK.  However, they are provided to give users a starting point and some documentation.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' For help setting up Visual Studio, please see [[#Setting up Visual Studio|Setting up Visual Studio]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step of creating your extension is to configure it.  Open the &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; file and edit each of the following defines.  Use the information below to guide you.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt; - The general name for your Extension (should be short).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DESCRIPTION&amp;lt;/tt&amp;gt; - A short description of what your extension does.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_VERSION&amp;lt;/tt&amp;gt; - A version number string.  By convention, SourceMod uses the four set build number notation.  I.e. for 1.2.3.4:&lt;br /&gt;
**&amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; is the &amp;quot;Major&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; is the &amp;quot;Minor&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; is the &amp;quot;Maintenance&amp;quot; or &amp;quot;Revision&amp;quot; version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; is the &amp;quot;Build,&amp;quot; usually an internal source control number.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_AUTHOR&amp;lt;/tt&amp;gt; - Your name (or whoever/whatever authored the plugin).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_URL&amp;lt;/tt&amp;gt; - The URL/homepage of this extension.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt; - The logtag your extension will use for SourceMod logging.  By convention, try to keep this under ten characters or so, and to make it all caps.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LICENSE&amp;lt;/tt&amp;gt; - Right now, the SourceMod Dev Team mandates that 3rd party extensions must be under an Open Source license.  Putting a license abbreviation or very short message here is appropriate.  For more information, see [[SourceMod License]].&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DATESTRING&amp;lt;/tt&amp;gt; - You do not need to modify this.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_METAMOD&amp;lt;/tt&amp;gt; - If your plugin requires using SourceHook or Metamod:Source, uncomment this line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you may want to change the name of the default class that &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; declares.  To do this...&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and change &amp;quot;Sample&amp;quot; in this line:&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Sample : public SDKExtension&amp;lt;/cpp&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; and change the two lines to correspond to your new class name.  You can also change the global singleton that's declared, although you cannot remove the &amp;lt;tt&amp;gt;SMEXT_LINK&amp;lt;/tt&amp;gt; line (this lets SourceMod load your extension).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Studio Users==&lt;br /&gt;
Make sure you change the name of your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file.  The naming convention for SourceMod extensions is &amp;lt;tt&amp;gt;name.ext.dll&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is a short name for your extension.  You are free to change this, but it is highly recommended that you keep the &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
You can do this by going to &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Configuration Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Linker&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;General&amp;lt;/tt&amp;gt;.  Set the &amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt; option appropriately.&lt;br /&gt;
&lt;br /&gt;
==Linux Users==&lt;br /&gt;
Simply edit the &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; and change the &amp;lt;tt&amp;gt;BINARY&amp;lt;/tt&amp;gt; line near the top.  Make sure you do not add any trailing spaces at the end of the name, or the build won't come out right.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile a blank extension!&lt;br /&gt;
&lt;br /&gt;
=Creating Native Functions=&lt;br /&gt;
''Main article: [[Natives (SourceMod Development)]]''&lt;br /&gt;
&lt;br /&gt;
Most of the time, an extension exists to add &amp;quot;native functions&amp;quot; to the plugin system.  Native functions are simply the functions that plugins can use in SourceMod.  They are coded in C++ and have a short prototype declaration in an include file.&lt;br /&gt;
&lt;br /&gt;
==Prototyping==&lt;br /&gt;
The first step to creating a native is to &amp;lt;tt&amp;gt;spec it&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;prototype&amp;lt;/tt&amp;gt; it.  This is a simple but often time consuming process, but if you get in the habit of it, your documentation will be much better.  Let's first create a very simply native.  Here is a prototype for it, which we will place in &amp;lt;tt&amp;gt;sample.inc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the square of a number.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num	Number to square.&lt;br /&gt;
 * @return	The square of num.&lt;br /&gt;
 */&lt;br /&gt;
native SquareNumber(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;native&amp;lt;/tt&amp;gt; keyword tells the compiler that this function exists in an outside source.  The comment style is similar to [http://www.stack.nl/~dimitri/doxygen/ doxygen] or [http://java.sun.com/j2se/javadoc/ Javadoc], and is preferred by the SourceMod Development Team.&lt;br /&gt;
&lt;br /&gt;
==Implementing==&lt;br /&gt;
Now that our function is documented, it's time to create it!  Each native function is bound to a C++ function.  The prototype for this function looks like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t Function(IPluginContext *pContext, const cell_t *params);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A quick explanation of these types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; - This is a 32bit signed integer, the generic data type for Pawn.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IPluginContext&amp;lt;/tt&amp;gt; - This interface provides Virtual Machine functions for retrieving or modifying memory in the plugin.&lt;br /&gt;
*&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; - This is the &amp;quot;stack&amp;quot; of parameters that the plugin passed.  It is an array from [0..N] where 0 contains N. This means &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains the number of arguments passed to the native.&lt;br /&gt;
**For example, if one parameter was passed, and the parameter is 25:&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; == 1&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; == 25&lt;br /&gt;
**Even though it tells you how many parameters are passed, you do not need to verify this number.  The compiler will always pass the correct number of parameters in.  The only time you need to verify it is for backwards compatibility or variable parameter lists, which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
Now, let's write our native function:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t SquareNumber(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t number = params[1];&lt;br /&gt;
	return number * number;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding==&lt;br /&gt;
Now, the final step is to bind our native.  Natives are bound in ''native lists''.  Each list must be terminated by a &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; bind.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;const sp_nativeinfo_t MyNatives[] = &lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;SquareNumber&amp;quot;,	SquareNumber},&lt;br /&gt;
	{NULL,			NULL},&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first column/member is a string containing the name you've assigned to the native.  The second column/member is the C++ function you're binding to.  Here, both contain the same name, but it is certainly possible to bind a function to any valid Pawn function name, and likewise, you can bind one function to more than one name.&lt;br /&gt;
&lt;br /&gt;
Lastly, you must tell Core about your native list.  There are two places that are good to do this.  Whichever you choose, you must uncomment the function in &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it in &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnLoad&amp;lt;/tt&amp;gt; - This is called when your extension is first loaded.  If you do not require any outside interfaces, it is safe to add natives here.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt; - This is called when all extensions have been loaded.  This is generally a better place to add natives.&lt;br /&gt;
&lt;br /&gt;
Let's say we choose &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;, we'd then have code like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: &amp;lt;tt&amp;gt;myself&amp;lt;/tt&amp;gt; is a global variable declared in the SDK.  It is a pointer that identifies your extension.''&lt;br /&gt;
&lt;br /&gt;
For more information on writing natives, see [[Natives (SourceMod Development)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Events/Forwards=&lt;br /&gt;
Events are an integral part to SourceMod.  An Event is formally called a ''Forward''.  Forwards are functions inside a plugin which are not called by the plugin itself, but are triggered from an external source.  For example, &amp;lt;tt&amp;gt;OnClientConnect&amp;lt;/tt&amp;gt; is a forward which is triggered when a player connects to a server.&lt;br /&gt;
&lt;br /&gt;
There are two major types of forwards:&lt;br /&gt;
*'''Managed''': This forward is global and has a name.  To use this forward, the function must be declared as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; inside the user's script.  Any plugin having this public function will receive the event.&lt;br /&gt;
*'''Unmanaged''': This forward is private in nature.  For example, the &amp;lt;tt&amp;gt;HookUserMessage&amp;lt;/tt&amp;gt; native lets users specify a function to be called when a specific user message is sent.  This is done with an unmanaged forward, and adding functions to this forward is not automatic.  In general, function calls for unmanaged forwards are not public, although they can be.&lt;br /&gt;
&lt;br /&gt;
''Note: To enable the Forward interface, you must uncomment the definition &amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt; in smsdk_config.h.''&lt;br /&gt;
==Managed Forwards==&lt;br /&gt;
Let's say we want to create a forward that will be called when a player uses say chat.  For simplicity, let's assume you already have a function that tells you when a player says say chat.  We will just be creating the forward for it.&lt;br /&gt;
&lt;br /&gt;
As we did before, first let's prototype our global forward.  In our include file, we add this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * @brief Called whenever a client says something in chat.&lt;br /&gt;
 *&lt;br /&gt;
 * @param client	Index of the client.&lt;br /&gt;
 * @param text		String containing the say text.&lt;br /&gt;
 * @return 		Pl_Handled to block text from printing, Pl_Continue otherwise.&lt;br /&gt;
 */&lt;br /&gt;
forward ResultType:OnPlayerSayChat(client, const String:text[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;forward&amp;lt;/tt&amp;gt; keyword tells the compiler that any function having this name must be declared exactly the same.  In a plugin, this would&lt;br /&gt;
&lt;br /&gt;
The next step is to declare your forward somewhere at the top of your &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; file.  This will look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;IForward *g_pSayChat = NULL&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, re-using our code from above, let's create this forward in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForward(&amp;quot;OnPlayerSayChat&amp;quot;, ET_Event, 2, NULL, Param_Cell, Param_String);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;quot;OnPlayerSayChat&amp;quot;&amp;lt;/tt&amp;gt; - The name of our forward.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Since forwards can execute multiple functions in multiple scripts, this is one of the ways of specifying what to do with the return value of each function.  &amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; means &amp;quot;return the highest value, do not allow stops.&amp;quot;  A stop refers to &amp;lt;tt&amp;gt;Pl_Stop&amp;lt;/tt&amp;gt;, which lets a plugin block the rest of the event chain.&lt;br /&gt;
*&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; - This is the number of parameters our forward will have.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; - Not used in our example.  This lets you pass parameters by array rather than variable arguments.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - The first parameter is a cell (integer).&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - The second parameter is a string.&lt;br /&gt;
&lt;br /&gt;
Now, we write a quick function in our module to call this forward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;/** Fires the say chat event in plugins.  Returns true to allow the text, false to block. */&lt;br /&gt;
bool FireChatEvent(int client, const char *text)&lt;br /&gt;
{&lt;br /&gt;
	if (!g_pSayChat)&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cell_t result = 0;&lt;br /&gt;
	g_pSayChat-&amp;gt;PushCell(client);&lt;br /&gt;
	g_pSayChat-&amp;gt;PushString(text);&lt;br /&gt;
	g_pSayChat-&amp;gt;Execute(&amp;amp;result);&lt;br /&gt;
	&lt;br /&gt;
	if (result == Pl_Handled)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, this was pretty simple.  Each parameter is &amp;quot;pushed&amp;quot; one at a time, in ascending order.  First we push the client index as a cell, then the text as a string.  Once done, we execute, and the value will be returned by reference.&lt;br /&gt;
&lt;br /&gt;
Lastly, there is a caveat.  Unlike natives, SourceMod does not automatically clean up forwards for us when are done.  We have to make sure we destroy them.  Uncomment &amp;lt;tt&amp;gt;SDK_OnUnload&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it like so:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnUnload()&lt;br /&gt;
{&lt;br /&gt;
	forwards-&amp;gt;ReleaseForward(g_pSayChat);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unmanaged Forwards==&lt;br /&gt;
Now things get a bit more complicated.  However, unmanaged forwards are essentially the same -- they just give you more flexibility.  Let's consider the managed example with a new twist.  We want to let users add and remove hooks from their plugins, rather than having one global forward.  The standard way to do this is with ''function IDs''.  &lt;br /&gt;
&lt;br /&gt;
Example prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;funcenum SayChatHook&lt;br /&gt;
{&lt;br /&gt;
	forward(client, const String:text[]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
native AddSayChatHook(SayChatHook:hook);&lt;br /&gt;
native RemoveSayChatHook(SayChatHook:hook);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;funcenum&amp;lt;/tt&amp;gt; syntax lets you define all the valid prototypes for your hook.  In this example, the only valid method is a function declared like this (only MyHook can be changed):&lt;br /&gt;
&amp;lt;pawn&amp;gt;MyHook(client, const String:text[])&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How do we make such a beast?  The first step is setting up our forward.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IChangeableForward *g_pSayChat = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForwardEx(NULL, ET_Hook, 2, NULL, Param_Cell, Param_String); &lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice two big differences.  We now use &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, and we use &amp;lt;tt&amp;gt;CreateForwardEx&amp;lt;/tt&amp;gt; instead.  The initial first parameter specifies a name for our forward - we're going to ignore this.&lt;br /&gt;
&lt;br /&gt;
Now, we need to create our natives.  These will be fairly simple:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t AddSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat-&amp;gt;AddFunction(pContext, static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cell_t RemoveSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	IPluginFunction *pFunction = pContext-&amp;gt;GetFunctionById(static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	g_pSayChat-&amp;gt;RemoveFunction(pFunction);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: These natives must be added -- that step is removed here and explained earlier.''&lt;br /&gt;
&lt;br /&gt;
You do not need to worry about a plugin unloading - Core will automatically remove the functions for you.  Since an &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; is also an &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, the &amp;lt;tt&amp;gt;FireChatEvent&amp;lt;/tt&amp;gt; function from earlier does not need to change.  We're done!&lt;br /&gt;
&lt;br /&gt;
==Creating Interfaces==&lt;br /&gt;
Do you want your extension to share an interface?  If so, first you should create an ''interface file''.  This file should contain everything your interface needs - this way other authors can easily reference it.  Your interface must inherit the &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt; class.  It must also declare two global macros that uniquely identify your interface.  It must also implement two functions: &amp;lt;tt&amp;gt;GetInterfaceName&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GetInterfaceVersion&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two defines must start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt; respectively.  The first must be a string and the second must be an unsigned integer.  This integer represents your interface's version number.  While you are free to use it however you please, by default it should be linearly increased.  If you make breaking changes or change the versioning scheme, you must overload the &amp;lt;tt&amp;gt;IsVersionCompat&amp;lt;/tt&amp;gt; function in &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#ifndef _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
#define _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;IShareSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_NAME	&amp;quot;IMyInterface&amp;quot;&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_VERSION	1&lt;br /&gt;
&lt;br /&gt;
class IMyInterface : public SourceMod::SMInterface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	virtual const char *GetInterfaceName()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_NAME;&lt;br /&gt;
	}&lt;br /&gt;
	virtual unsigned int GetInterfaceVersion()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_VERSION;&lt;br /&gt;
	}&lt;br /&gt;
public:&lt;br /&gt;
	/**&lt;br /&gt;
	 * @brief This function does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	virtual void DoNothingAtAll() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif //_INCLUDE_MYINTERFACE_FILE_H_&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice, of course, that our interface is ''pure virtual''.  This means it must be implemented in the extension.  Assuming you know C++, this should be fairly straight forward, so let's skip right to how to add this interface to the SourceMod shared system:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddInterface(myself, &amp;amp;g_MyInterface);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: We do this in &amp;lt;tt&amp;gt;SDK_OnLoad()&amp;lt;/tT&amp;gt; instead of &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;.  Otherwise, an extension might try to search for your interface during &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;, and it might fail depending on the load order.''&lt;br /&gt;
&lt;br /&gt;
That simple?  Yup!  Now other extensions can use your interface.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using Interfaces/Other Extensions=&lt;br /&gt;
There are a variety of interfaces that are available, but not loaded by default in the Extension SDK.  These interfaces can be retrieved and used in your extension.&lt;br /&gt;
&lt;br /&gt;
==Core Interfaces==&lt;br /&gt;
If they are provided by Core, getting them is very simple.  Many interfaces can simply be uncommented in &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; and they will become usable.  See the &amp;quot;Available Interfaces&amp;quot; list below for the exposure list.&lt;br /&gt;
&lt;br /&gt;
Otherwise, most of the &amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt; interface files in the root of the &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; folder in the SDK are Core interfaces.  For example, code to use the IPluginManager interface might look like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;IPluginSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPluginManager *g_pPlugins = NULL;&lt;br /&gt;
&lt;br /&gt;
bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(PLUGINSYSTEM, g_pPlugins);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where did we get &amp;lt;tt&amp;gt;PLUGINSYSTEM&amp;lt;/tt&amp;gt; from?  Observe the two lines in &amp;lt;tt&amp;gt;IPluginSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#define SMINTERFACE_PLUGINSYSTEM_NAME		&amp;quot;IPluginManager&amp;quot;&lt;br /&gt;
#define SMINTERFACE_PLUGINSYSTEM_VERSION	1&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;SM_GET_IFACE&amp;lt;/tt&amp;gt; macro uses the text in between the &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; characters.  It also uses the version for compatibility checking.  If it can't find the interface, it automatically prints to the error buffer and returns false.&lt;br /&gt;
&lt;br /&gt;
===Default Interfaces===&lt;br /&gt;
There are interfaces which are grabbed by the Extension SDK by default.  You do not need to query for them on load, or even check if they are valid or not.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;IShareSys&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;sharesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IShareSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;HANDLESYSTEM&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IHandleSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SOURCEMOD&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;g_pSM&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;ISourceMod.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;FORWARDMANAGER&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IForwardSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Available Interfaces===&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_HANDLESYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_PLAYERHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;playerhelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_DBMANAGER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;dbi&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMECONF&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gameconfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_MEMUTILS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;memutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMEHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gamehelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_TIMERSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;timersys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_THREADER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Interfaces==&lt;br /&gt;
The situation changes if your extension requires ''another extension'', since extensions may load in a completely random order.  The first step is to mark the other extension as a dependency.  Let's say you want to use the &amp;lt;tt&amp;gt;IThreader.h&amp;lt;/tt&amp;gt; interfaces from &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt;.  First, we declare it as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddDependency(myself, &amp;quot;thread.ext&amp;quot;, true, true);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two boolean parameters to &amp;lt;tt&amp;gt;AddDependency&amp;lt;/tt&amp;gt; mean, respectively: &amp;quot;try to automatically load this extension&amp;quot; and &amp;quot;this extension cannot work without the dependency.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Second, we query for the interface in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;.  Since we don't know when &amp;lt;tt&amp;gt;thread.ext&amp;lt;/tt&amp;gt; will actually be loaded, we have to wait until everything is definitely loaded.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IThreader *g_pThreader = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_LATE_IFACE(THREADER, g_pThreader);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Third, we need to find a way to fail if this interface was never found.  The way to do this is by uncommenting &amp;lt;tt&amp;gt;QueryRunning&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implementing it:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::QueryRunning(char *error, size_t err_max)&lt;br /&gt;
{&lt;br /&gt;
	SM_CHECK_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SourceMod queries your extension, the macro above will either validate the pointer or return false.  If it returns false, SourceMod marks your extension as failed.&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
===NULL Interfaces===&lt;br /&gt;
There are a few ways that external interfaces can make your code complicated.  The first is simple but a common oversight.  Don't assume interfaces will be okay.  For example, say we want to create a thread once we get the &amp;lt;tt&amp;gt;IThreader&amp;lt;/tt&amp;gt; interface.  Our code should something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	&lt;br /&gt;
	if (QueryRunning(NULL, 0))&lt;br /&gt;
	{&lt;br /&gt;
		g_pThreader-&amp;gt;MakeThread(/* stuff */);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we ''query ourself'' in order to find if it's safe to continue executing code.  We could also have simply checked if &amp;lt;tt&amp;gt;g_pThreader&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, but self-querying has a bonus: if your extension continues to do things like hook events or add listeners, you will be preventing your extension from entirely initializing itself while one interface is bad.  Always make sure you have sanity checks like this where needed.&lt;br /&gt;
&lt;br /&gt;
===Dynamic Unloading===&lt;br /&gt;
The second major caveat is that extensions can be dynamically unloaded.  If you specified yourself as having a dependency and that each dependency is required, you will have no problem.  Your extension will be unloaded before the interface is removed, and you can clean up memory/hooks in your &amp;lt;tt&amp;gt;SDK_OnUnload()&amp;lt;/tt&amp;gt; code.  There are two situations where this is a different story.&lt;br /&gt;
&lt;br /&gt;
====Optional Interfaces====&lt;br /&gt;
The first situation is if you are not requiring an extension that contains an interface.  Now, when the extension unloads, your extension will not be unloaded first.  This creates a small problem, as you must clean up without being unloaded.  There are two functions you can implement in your extension class to resolve this, both documented in &amp;lt;tt&amp;gt;IExtensionSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*&amp;lt;tt&amp;gt;QueryInterfaceDrop&amp;lt;/tt&amp;gt; - Allows you to request unloading when a specific interface is unloaded.  This is the default behavior for all interfaces.  If you want to block this functionality, continue reading.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; - This is called when an interface is dropped.  If your plugin will not be unloaded, you can use this to clean up any resources on a specific interface being removed.&lt;br /&gt;
&lt;br /&gt;
====Circular Dependencies====&lt;br /&gt;
The second situation is a bit more complicated.  It is possible for two extensions to have circular dependencies.  For example:&lt;br /&gt;
*Extension &amp;quot;A&amp;quot; requires extension &amp;quot;B.&amp;quot;&lt;br /&gt;
*Extension &amp;quot;B&amp;quot; requires extension &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If either extension is unloaded, the opposite extension is unloaded normally.  The first extension then receives the interface drop callbacks.  In this situation, it is essential that the &amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; function be implemented and used with the circular interface.  Otherwise, you risk crashing when your extension unloads (or at the very least, leaking memory).  Since the actual drop order is undefined, it means both extensions must implement this function to be safe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Automatic Loading=&lt;br /&gt;
There are two types of automatic loading: Dynamic and Global.  Dynamic loading means your extension is only loaded when a plugin requires it.  Global loading means your extension loads no matter what.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Autoloading==&lt;br /&gt;
Dynamic loading requires that you create an include file for plugins.  Plugins that include your file will automatically load your extension.  This requires implementing the &amp;lt;tt&amp;gt;Extension&amp;lt;/tt&amp;gt; structure found in &amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;.  You must expose the structure as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt;, and the name must start with &amp;quot;&amp;lt;tt&amp;gt;__ext_&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Do not edit below this line!&lt;br /&gt;
 */&lt;br /&gt;
public Extension:__ext_geoip = &lt;br /&gt;
{&lt;br /&gt;
	name = &amp;quot;GeoIP&amp;quot;,&lt;br /&gt;
	file = &amp;quot;geoip.ext&amp;quot;,&lt;br /&gt;
#if defined AUTOLOAD_EXTENSIONS&lt;br /&gt;
	autoload = 1,&lt;br /&gt;
#else&lt;br /&gt;
	autoload = 0,&lt;br /&gt;
#endif&lt;br /&gt;
#if defined REQUIRE_EXTENSIONS&lt;br /&gt;
	required = 1,&lt;br /&gt;
#else&lt;br /&gt;
	required = 0,&lt;br /&gt;
#endif&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanations:&lt;br /&gt;
*&amp;lt;b&amp;gt;name&amp;lt;/b&amp;gt;: The name of your module as written in &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;: The platform-inspecific portion of your extension's file name.&lt;br /&gt;
*&amp;lt;b&amp;gt;autoload&amp;lt;/b&amp;gt;: Specifies that your module should always dynamically autoload by default.  You can tweak this to either never autoload or always autoload (without letting the user toggle).&lt;br /&gt;
*&amp;lt;b&amp;gt;required&amp;lt;/b&amp;gt;: Specifies whether or not this extension is '''required''' by your plugin.  If for some reason your extension fails to load (or is not found), the plugin will also fail to load.  This is changeable if you wish to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this example, but remember to modify the following portions:&lt;br /&gt;
*&amp;lt;b&amp;gt;__ext_geoip&amp;lt;/b&amp;gt;: Change the &amp;quot;geoip&amp;quot; portion to your own unique variable name.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;GeoIP&amp;lt;/b&amp;gt;: Change the GeoIP portion to your extension's name.  This should match the name you chose as &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;geoip.ext&amp;quot;&amp;lt;/b&amp;gt;: Change this to your extension's file name, without the .dll/.so portion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global Autoloading==&lt;br /&gt;
To have your extension always autoload, you must create a ''.autoload'' file in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder.  For example, to have the &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;threader.ext.so&amp;lt;/tt&amp;gt; extensions autoload, you'd create the following file in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader.autoload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
*This only works for extensions using the .ext.&amp;lt;platform&amp;gt; convention.  SourceMod cuts off the &amp;quot;.autoload&amp;quot; portion of the file, then adds the appropriate extension just as if 'sm exts load' was used.&lt;br /&gt;
*The file does not need to contain anything, it simply needs to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conventions=&lt;br /&gt;
&lt;br /&gt;
==Designing API/Natives==&lt;br /&gt;
*Start interface names with the capital letter 'I'.&lt;br /&gt;
*Use a consistent naming convention.  SourceMod uses [http://msdn2.microsoft.com/en-us/library/ms229002.aspx Microsoft/Pascal] naming.  Avoid Java/Camel casing for both API and natives.&lt;br /&gt;
*When exposing interfaces, make sure your exposure defines start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Naming==&lt;br /&gt;
*Logtags (&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt;) should be short names (under 10 characters or so) in all capital letters.&lt;br /&gt;
*Your extension file name should never have &amp;lt;tt&amp;gt;_i486&amp;lt;/tt&amp;gt; or other unnecessary platform-specific notations in its name.&lt;br /&gt;
*Your extension file name should always end in &amp;lt;tt&amp;gt;.ext.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; depending on the platform.  The &amp;lt;tt&amp;gt;.ext.&amp;lt;/tt&amp;gt; is SourceMod convention.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setting up Visual Studio=&lt;br /&gt;
&lt;br /&gt;
{{qnotice|It is recommended that you make a copy of the sample_ext project and modify that rather than create your own project, as it will set up most of this for you}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Project ==&lt;br /&gt;
&lt;br /&gt;
Instead of manually creating a project, you can make a copy of the sample_ext project and modify it.&lt;br /&gt;
&lt;br /&gt;
The sample_ext project assumes that it is located in a subdirectory inside the SourceMod public directory.  To change this, modify all references to ..\.. to $(SOURCEMOD15)\public and specify the SOURCEMOD15 variable as mentioned in the Optional Environment variables.&lt;br /&gt;
&lt;br /&gt;
The sample_ext projectuses the following environment variables to locate the various source code parts.  To set environment variables:&lt;br /&gt;
&lt;br /&gt;
'''Windows XP''': Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
'''Windows Vista/7''': Start -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced system properties -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
The environment variables used are:&lt;br /&gt;
&lt;br /&gt;
* '''MMSOURCE17''': Path to MetaMod: Source source code for version 1.7 or newer. Used to compile SourceMod itself.  &lt;br /&gt;
* '''MMSOURCE18''': Path to MetaMod: Source source code for version 1.8 or newer. Used in SourceMod 1.4 projects.  &lt;br /&gt;
* '''MMSOURCE19''': Path to MetaMod: Source source code for version 1.9 or newer. Used in SourceMod 1.5 projects.  &lt;br /&gt;
* '''HL2SDK''': Path to the Episode 1 SDK  &lt;br /&gt;
* '''HL2SDK-SWARM''': Path to the Alien Swarm SDK  &lt;br /&gt;
* '''HL2SDK-DARKM''': Path to the Dark Messiah SDK  &lt;br /&gt;
* '''HL2SDKCSGO''': Path to the Counter-Strike: Global Offensive SDK  &lt;br /&gt;
* '''HL2SDKCSS''': Path to the Counter-Strike: Source SDK  &lt;br /&gt;
* '''HL2SDKL4D''': Path to the Left 4 Dead SDK  &lt;br /&gt;
* '''HL2SDKL4D2''': Path to the Left 4 Dead 2 SDK  &lt;br /&gt;
* '''HL2SDKOB''': Path to the Orange Box SDK (not Source 2009)  &lt;br /&gt;
* '''HL2SDKOBVALVE''': Path to the Orange Box Valve / Source 2009 SDK (Half-Life 2: Deathmatch, Day of Defeat: Source, Team Fortress 2)&lt;br /&gt;
&lt;br /&gt;
Optional environment variables:&lt;br /&gt;
&lt;br /&gt;
* '''SOURCEMOD15'': Optional path to SourceMod 1.5 or newer source code&lt;br /&gt;
&lt;br /&gt;
==Manually configuring a project==&lt;br /&gt;
&lt;br /&gt;
===Paths===&lt;br /&gt;
'''Visual Studio 2003''': Tools -&amp;gt; Options -&amp;gt; Projects, VC++ Directories&lt;br /&gt;
&lt;br /&gt;
'''Visual Studio 2005''': Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; VC++ Directories&lt;br /&gt;
&lt;br /&gt;
====Include Paths====&lt;br /&gt;
*SourceMod only:&lt;br /&gt;
**sdk\public\extensions&lt;br /&gt;
**sdk\public\sourcepawn&lt;br /&gt;
**sdk\public&lt;br /&gt;
*SourceMM (Note that sourcemm might be 'trunk' for you):&lt;br /&gt;
**sourcemm\core&lt;br /&gt;
**sourcemm\core\sourcehook&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**game\shared&lt;br /&gt;
**public\vstdlib&lt;br /&gt;
**public\tier1&lt;br /&gt;
**public\tier0&lt;br /&gt;
**public\engine&lt;br /&gt;
**public&lt;br /&gt;
**dlls&lt;br /&gt;
&lt;br /&gt;
====Link Paths====&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**lib\public for version 2005&lt;br /&gt;
**lib-vc7\public for version 2003&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options are set by default in the sample Extension SDK.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options should be set for every build (Release/Debug/others).&lt;br /&gt;
&lt;br /&gt;
For VS 2005, goto Project-&amp;gt;Properties.&lt;br /&gt;
&lt;br /&gt;
*General&lt;br /&gt;
**&amp;lt;tt&amp;gt;Character Set&amp;lt;/tt&amp;gt;: '''Use Multi-Byte Character Set'''&lt;br /&gt;
*C/C++&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Detect 64-bit Portability Issues&amp;lt;/tt&amp;gt;: '''No'''&lt;br /&gt;
**Preprocessor&lt;br /&gt;
***&amp;lt;tt&amp;gt;Preprocessor Defines&amp;lt;/tt&amp;gt;: Add &amp;lt;tt&amp;gt;_CRT_SECURE_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;_CRT_NONSTDC_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SOURCEMOD_BUILD&amp;lt;/tt&amp;gt;  and &amp;lt;tt&amp;gt;WIN32&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Code Generation&lt;br /&gt;
***&amp;lt;tt&amp;gt;Runtime Library&amp;lt;/tt&amp;gt;: Multi-threaded or /MT (for Release), Multi-threaded Debug or /MTd (for Debug)&lt;br /&gt;
*Linker&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt;: Change &amp;lt;tt&amp;gt;$(ProjectName)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;$(ProjectName).ext&amp;lt;/tt&amp;gt;, or use your own custom string.&lt;br /&gt;
**Input&lt;br /&gt;
***&amp;lt;tt&amp;gt;Additional Dependencies&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;tier0.lib tier1.lib vstdlib.lib&amp;lt;/tt&amp;gt; (for SourceMM attached extensions only)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10130</id>
		<title>Writing Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Writing_Extensions&amp;diff=10130"/>
		<updated>2016-04-11T18:16:41Z</updated>

		<summary type="html">&lt;p&gt;Darkid: I assume this is the correct link, please update if wrong.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod's Extension System is a powerful way to greatly enhance the flexibility of your SourceMod plugins.  You can take full advantage of SourceMod's Core, using the interfaces it provides, to create C++ plugins, plugin events, plugin native functions, and shared interfaces.  Extensions can also hook into Metamod:Source.&lt;br /&gt;
&lt;br /&gt;
This article goes into the details of creating a SourceMod Extension.  Knowledge of C++ is required.&lt;br /&gt;
&lt;br /&gt;
=SDK Structure=&lt;br /&gt;
First, download the [[SourceMod SDK]] from the [[SourceMod]] github: [https://github.com/alliedmodders/sourcemod/releases].  The directory structure looks like this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;geoip/&amp;lt;/tt&amp;gt; - Source code to the GeoIP extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;mysql/&amp;lt;/tt&amp;gt; - Source code to the MySQL extension&lt;br /&gt;
**&amp;lt;tt&amp;gt;threader/&amp;lt;/tt&amp;gt; - Source code to the Threader extension&lt;br /&gt;
*&amp;lt;tt&amp;gt;plugins/&amp;lt;/tt&amp;gt; - Source code to all of SourceMod's plugins&lt;br /&gt;
**&amp;lt;tt&amp;gt;include/&amp;lt;/tt&amp;gt; - The include files which document plugin API&lt;br /&gt;
*&amp;lt;tt&amp;gt;public/&amp;lt;/tt&amp;gt; - Interface files for SourceMod's Core Interfaces&lt;br /&gt;
**&amp;lt;tt&amp;gt;extensions/&amp;lt;/tt&amp;gt; - Interfaces that are provided by extensions&lt;br /&gt;
**&amp;lt;tt&amp;gt;sample_ext/&amp;lt;/tt&amp;gt; - The Sample Extension SDK&lt;br /&gt;
**&amp;lt;tt&amp;gt;sourcepawn&amp;lt;/tt&amp;gt; - The include/interface files for SourcePawn&lt;br /&gt;
*&amp;lt;tt&amp;gt;sourcepawn/&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;compiler/&amp;lt;/tt&amp;gt; - The SourcePawn Compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Starting an Extension=&lt;br /&gt;
For simplicity, this article will assume you are using the SDK base files.  These are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_config.h&amp;lt;/tt&amp;gt; - Configuration settings (we will be editing this)&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.h&amp;lt;/tt&amp;gt; - Header for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;sdk/smsdk_ext.cpp&amp;lt;/tt&amp;gt; - Source for SDK wrappers (usually never needs to be edited)&lt;br /&gt;
**''Note: Sometimes, this may be updated by the SourceMod Dev Team.  Using a newest version is recommended.'&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; - User file for main extension header&lt;br /&gt;
*&amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; - User file for main extension code&lt;br /&gt;
&lt;br /&gt;
''The &amp;lt;tt&amp;gt;extension.*&amp;lt;/tt&amp;gt; files are not technically part of the SDK.  However, they are provided to give users a starting point and some documentation.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' For help setting up Visual Studio, please see [[#Setting up Visual Studio|Setting up Visual Studio]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step of creating your extension is to configure it.  Open the &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; file and edit each of the following defines.  Use the information below to guide you.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt; - The general name for your Extension (should be short).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DESCRIPTION&amp;lt;/tt&amp;gt; - A short description of what your extension does.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_VERSION&amp;lt;/tt&amp;gt; - A version number string.  By convention, SourceMod uses the four set build number notation.  I.e. for 1.2.3.4:&lt;br /&gt;
**&amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; is the &amp;quot;Major&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; is the &amp;quot;Minor&amp;quot; release version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; is the &amp;quot;Maintenance&amp;quot; or &amp;quot;Revision&amp;quot; version.&lt;br /&gt;
**&amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; is the &amp;quot;Build,&amp;quot; usually an internal source control number.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_AUTHOR&amp;lt;/tt&amp;gt; - Your name (or whoever/whatever authored the plugin).&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_URL&amp;lt;/tt&amp;gt; - The URL/homepage of this extension.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt; - The logtag your extension will use for SourceMod logging.  By convention, try to keep this under ten characters or so, and to make it all caps.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_LICENSE&amp;lt;/tt&amp;gt; - Right now, the SourceMod Dev Team mandates that 3rd party extensions must be under an Open Source license.  Putting a license abbreviation or very short message here is appropriate.  For more information, see [[SourceMod License]].&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_DATESTRING&amp;lt;/tt&amp;gt; - You do not need to modify this.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_CONF_METAMOD&amp;lt;/tt&amp;gt; - If your plugin requires using SourceHook or Metamod:Source, uncomment this line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you may want to change the name of the default class that &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; declares.  To do this...&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and change &amp;quot;Sample&amp;quot; in this line:&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Sample : public SDKExtension&amp;lt;/cpp&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; and change the two lines to correspond to your new class name.  You can also change the global singleton that's declared, although you cannot remove the &amp;lt;tt&amp;gt;SMEXT_LINK&amp;lt;/tt&amp;gt; line (this lets SourceMod load your extension).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Studio Users==&lt;br /&gt;
Make sure you change the name of your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file.  The naming convention for SourceMod extensions is &amp;lt;tt&amp;gt;name.ext.dll&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is a short name for your extension.  You are free to change this, but it is highly recommended that you keep the &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
You can do this by going to &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Configuration Properties&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;Linker&amp;lt;/tt&amp;gt; -&amp;gt; &amp;lt;tt&amp;gt;General&amp;lt;/tt&amp;gt;.  Set the &amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt; option appropriately.&lt;br /&gt;
&lt;br /&gt;
==Linux Users==&lt;br /&gt;
Simply edit the &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; and change the &amp;lt;tt&amp;gt;BINARY&amp;lt;/tt&amp;gt; line near the top.  Make sure you do not add any trailing spaces at the end of the name, or the build won't come out right.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile a blank extension!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Native Functions=&lt;br /&gt;
''Main article: [[Natives (SourceMod Development)]]''&lt;br /&gt;
&lt;br /&gt;
Most of the time, an extension exists to add &amp;quot;native functions&amp;quot; to the plugin system.  Native functions are simply the functions that plugins can use in SourceMod.  They are coded in C++ and have a short prototype declaration in an include file.&lt;br /&gt;
&lt;br /&gt;
==Prototyping==&lt;br /&gt;
The first step to creating a native is to &amp;lt;tt&amp;gt;spec it&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;prototype&amp;lt;/tt&amp;gt; it.  This is a simple but often time consuming process, but if you get in the habit of it, your documentation will be much better.  Let's first create a very simply native.  Here is a prototype for it, which we will place in &amp;lt;tt&amp;gt;sample.inc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the square of a number.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num	Number to square.&lt;br /&gt;
 * @return	The square of num.&lt;br /&gt;
 */&lt;br /&gt;
native SquareNumber(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;native&amp;lt;/tt&amp;gt; keyword tells the compiler that this function exists in an outside source.  The comment style is similar to [http://www.stack.nl/~dimitri/doxygen/ doxygen] or [http://java.sun.com/j2se/javadoc/ Javadoc], and is preferred by the SourceMod Development Team.&lt;br /&gt;
&lt;br /&gt;
==Implementing==&lt;br /&gt;
Now that our function is documented, it's time to create it!  Each native function is bound to a C++ function.  The prototype for this function looks like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t Function(IPluginContext *pContext, const cell_t *params);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A quick explanation of these types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; - This is a 32bit signed integer, the generic data type for Pawn.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IPluginContext&amp;lt;/tt&amp;gt; - This interface provides Virtual Machine functions for retrieving or modifying memory in the plugin.&lt;br /&gt;
*&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; - This is the &amp;quot;stack&amp;quot; of parameters that the plugin passed.  It is an array from [0..N] where 0 contains N. This means &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains the number of arguments passed to the native.&lt;br /&gt;
**For example, if one parameter was passed, and the parameter is 25:&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; == 1&lt;br /&gt;
***&amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; == 25&lt;br /&gt;
**Even though it tells you how many parameters are passed, you do not need to verify this number.  The compiler will always pass the correct number of parameters in.  The only time you need to verify it is for backwards compatibility or variable parameter lists, which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
Now, let's write our native function:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t SquareNumber(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t number = params[1];&lt;br /&gt;
	return number * number;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding==&lt;br /&gt;
Now, the final step is to bind our native.  Natives are bound in ''native lists''.  Each list must be terminated by a &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; bind.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;const sp_nativeinfo_t MyNatives[] = &lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;SquareNumber&amp;quot;,	SquareNumber},&lt;br /&gt;
	{NULL,			NULL},&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first column/member is a string containing the name you've assigned to the native.  The second column/member is the C++ function you're binding to.  Here, both contain the same name, but it is certainly possible to bind a function to any valid Pawn function name, and likewise, you can bind one function to more than one name.&lt;br /&gt;
&lt;br /&gt;
Lastly, you must tell Core about your native list.  There are two places that are good to do this.  Whichever you choose, you must uncomment the function in &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it in &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnLoad&amp;lt;/tt&amp;gt; - This is called when your extension is first loaded.  If you do not require any outside interfaces, it is safe to add natives here.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt; - This is called when all extensions have been loaded.  This is generally a better place to add natives.&lt;br /&gt;
&lt;br /&gt;
Let's say we choose &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;, we'd then have code like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: &amp;lt;tt&amp;gt;myself&amp;lt;/tt&amp;gt; is a global variable declared in the SDK.  It is a pointer that identifies your extension.''&lt;br /&gt;
&lt;br /&gt;
For more information on writing natives, see [[Natives (SourceMod Development)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Creating Events/Forwards=&lt;br /&gt;
Events are an integral part to SourceMod.  An Event is formally called a ''Forward''.  Forwards are functions inside a plugin which are not called by the plugin itself, but are triggered from an external source.  For example, &amp;lt;tt&amp;gt;OnClientConnect&amp;lt;/tt&amp;gt; is a forward which is triggered when a player connects to a server.&lt;br /&gt;
&lt;br /&gt;
There are two major types of forwards:&lt;br /&gt;
*'''Managed''': This forward is global and has a name.  To use this forward, the function must be declared as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; inside the user's script.  Any plugin having this public function will receive the event.&lt;br /&gt;
*'''Unmanaged''': This forward is private in nature.  For example, the &amp;lt;tt&amp;gt;HookUserMessage&amp;lt;/tt&amp;gt; native lets users specify a function to be called when a specific user message is sent.  This is done with an unmanaged forward, and adding functions to this forward is not automatic.  In general, function calls for unmanaged forwards are not public, although they can be.&lt;br /&gt;
&lt;br /&gt;
''Note: To enable the Forward interface, you must uncomment the definition &amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt; in smsdk_config.h.''&lt;br /&gt;
==Managed Forwards==&lt;br /&gt;
Let's say we want to create a forward that will be called when a player uses say chat.  For simplicity, let's assume you already have a function that tells you when a player says say chat.  We will just be creating the forward for it.&lt;br /&gt;
&lt;br /&gt;
As we did before, first let's prototype our global forward.  In our include file, we add this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * @brief Called whenever a client says something in chat.&lt;br /&gt;
 *&lt;br /&gt;
 * @param client	Index of the client.&lt;br /&gt;
 * @param text		String containing the say text.&lt;br /&gt;
 * @return 		Pl_Handled to block text from printing, Pl_Continue otherwise.&lt;br /&gt;
 */&lt;br /&gt;
forward ResultType:OnPlayerSayChat(client, const String:text[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;forward&amp;lt;/tt&amp;gt; keyword tells the compiler that any function having this name must be declared exactly the same.  In a plugin, this would&lt;br /&gt;
&lt;br /&gt;
The next step is to declare your forward somewhere at the top of your &amp;lt;tt&amp;gt;extension.cpp&amp;lt;/tt&amp;gt; file.  This will look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;IForward *g_pSayChat = NULL&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, re-using our code from above, let's create this forward in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddNatives(myself, MyNatives);&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForward(&amp;quot;OnPlayerSayChat&amp;quot;, ET_Event, 2, NULL, Param_Cell, Param_String);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;quot;OnPlayerSayChat&amp;quot;&amp;lt;/tt&amp;gt; - The name of our forward.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Since forwards can execute multiple functions in multiple scripts, this is one of the ways of specifying what to do with the return value of each function.  &amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; means &amp;quot;return the highest value, do not allow stops.&amp;quot;  A stop refers to &amp;lt;tt&amp;gt;Pl_Stop&amp;lt;/tt&amp;gt;, which lets a plugin block the rest of the event chain.&lt;br /&gt;
*&amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; - This is the number of parameters our forward will have.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; - Not used in our example.  This lets you pass parameters by array rather than variable arguments.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - The first parameter is a cell (integer).&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - The second parameter is a string.&lt;br /&gt;
&lt;br /&gt;
Now, we write a quick function in our module to call this forward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;/** Fires the say chat event in plugins.  Returns true to allow the text, false to block. */&lt;br /&gt;
bool FireChatEvent(int client, const char *text)&lt;br /&gt;
{&lt;br /&gt;
	if (!g_pSayChat)&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cell_t result = 0;&lt;br /&gt;
	g_pSayChat-&amp;gt;PushCell(client);&lt;br /&gt;
	g_pSayChat-&amp;gt;PushString(text);&lt;br /&gt;
	g_pSayChat-&amp;gt;Execute(&amp;amp;result);&lt;br /&gt;
	&lt;br /&gt;
	if (result == Pl_Handled)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, this was pretty simple.  Each parameter is &amp;quot;pushed&amp;quot; one at a time, in ascending order.  First we push the client index as a cell, then the text as a string.  Once done, we execute, and the value will be returned by reference.&lt;br /&gt;
&lt;br /&gt;
Lastly, there is a caveat.  Unlike natives, SourceMod does not automatically clean up forwards for us when are done.  We have to make sure we destroy them.  Uncomment &amp;lt;tt&amp;gt;SDK_OnUnload&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implement it like so:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnUnload()&lt;br /&gt;
{&lt;br /&gt;
	forwards-&amp;gt;ReleaseForward(g_pSayChat);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unmanaged Forwards==&lt;br /&gt;
Now things get a bit more complicated.  However, unmanaged forwards are essentially the same -- they just give you more flexibility.  Let's consider the managed example with a new twist.  We want to let users add and remove hooks from their plugins, rather than having one global forward.  The standard way to do this is with ''function IDs''.  &lt;br /&gt;
&lt;br /&gt;
Example prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;funcenum SayChatHook&lt;br /&gt;
{&lt;br /&gt;
	forward(client, const String:text[]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
native AddSayChatHook(SayChatHook:hook);&lt;br /&gt;
native RemoveSayChatHook(SayChatHook:hook);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;funcenum&amp;lt;/tt&amp;gt; syntax lets you define all the valid prototypes for your hook.  In this example, the only valid method is a function declared like this (only MyHook can be changed):&lt;br /&gt;
&amp;lt;pawn&amp;gt;MyHook(client, const String:text[])&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How do we make such a beast?  The first step is setting up our forward.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IChangeableForward *g_pSayChat = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat = forwards-&amp;gt;CreateForwardEx(NULL, ET_Hook, 2, NULL, Param_Cell, Param_String); &lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice two big differences.  We now use &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, and we use &amp;lt;tt&amp;gt;CreateForwardEx&amp;lt;/tt&amp;gt; instead.  The initial first parameter specifies a name for our forward - we're going to ignore this.&lt;br /&gt;
&lt;br /&gt;
Now, we need to create our natives.  These will be fairly simple:&lt;br /&gt;
&amp;lt;cpp&amp;gt;cell_t AddSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	g_pSayChat-&amp;gt;AddFunction(pContext, static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cell_t RemoveSayChatHook(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	IPluginFunction *pFunction = pContext-&amp;gt;GetFunctionById(static_cast&amp;lt;funcid_t&amp;gt;(params[1]));&lt;br /&gt;
	g_pSayChat-&amp;gt;RemoveFunction(pFunction);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: These natives must be added -- that step is removed here and explained earlier.''&lt;br /&gt;
&lt;br /&gt;
You do not need to worry about a plugin unloading - Core will automatically remove the functions for you.  Since an &amp;lt;tt&amp;gt;IChangeableForward&amp;lt;/tt&amp;gt; is also an &amp;lt;tt&amp;gt;IForward&amp;lt;/tt&amp;gt;, the &amp;lt;tt&amp;gt;FireChatEvent&amp;lt;/tt&amp;gt; function from earlier does not need to change.  We're done!&lt;br /&gt;
&lt;br /&gt;
==Creating Interfaces==&lt;br /&gt;
Do you want your extension to share an interface?  If so, first you should create an ''interface file''.  This file should contain everything your interface needs - this way other authors can easily reference it.  Your interface must inherit the &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt; class.  It must also declare two global macros that uniquely identify your interface.  It must also implement two functions: &amp;lt;tt&amp;gt;GetInterfaceName&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GetInterfaceVersion&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two defines must start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt; respectively.  The first must be a string and the second must be an unsigned integer.  This integer represents your interface's version number.  While you are free to use it however you please, by default it should be linearly increased.  If you make breaking changes or change the versioning scheme, you must overload the &amp;lt;tt&amp;gt;IsVersionCompat&amp;lt;/tt&amp;gt; function in &amp;lt;tt&amp;gt;SMInterface&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#ifndef _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
#define _INCLUDE_MYINTERFACE_FILE_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;IShareSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_NAME	&amp;quot;IMyInterface&amp;quot;&lt;br /&gt;
#define SMINTERFACE_MYINTERFACE_VERSION	1&lt;br /&gt;
&lt;br /&gt;
class IMyInterface : public SourceMod::SMInterface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	virtual const char *GetInterfaceName()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_NAME;&lt;br /&gt;
	}&lt;br /&gt;
	virtual unsigned int GetInterfaceVersion()&lt;br /&gt;
	{&lt;br /&gt;
		return SMINTERFACE_MYINTERFACE_VERSION;&lt;br /&gt;
	}&lt;br /&gt;
public:&lt;br /&gt;
	/**&lt;br /&gt;
	 * @brief This function does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	virtual void DoNothingAtAll() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif //_INCLUDE_MYINTERFACE_FILE_H_&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice, of course, that our interface is ''pure virtual''.  This means it must be implemented in the extension.  Assuming you know C++, this should be fairly straight forward, so let's skip right to how to add this interface to the SourceMod shared system:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddInterface(myself, &amp;amp;g_MyInterface);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: We do this in &amp;lt;tt&amp;gt;SDK_OnLoad()&amp;lt;/tT&amp;gt; instead of &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;.  Otherwise, an extension might try to search for your interface during &amp;lt;tt&amp;gt;SDK_OnAllLoaded()&amp;lt;/tt&amp;gt;, and it might fail depending on the load order.''&lt;br /&gt;
&lt;br /&gt;
That simple?  Yup!  Now other extensions can use your interface.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using Interfaces/Other Extensions=&lt;br /&gt;
There are a variety of interfaces that are available, but not loaded by default in the Extension SDK.  These interfaces can be retrieved and used in your extension.&lt;br /&gt;
&lt;br /&gt;
==Core Interfaces==&lt;br /&gt;
If they are provided by Core, getting them is very simple.  Many interfaces can simply be uncommented in &amp;lt;tt&amp;gt;smsdk_config.h&amp;lt;/tt&amp;gt; and they will become usable.  See the &amp;quot;Available Interfaces&amp;quot; list below for the exposure list.&lt;br /&gt;
&lt;br /&gt;
Otherwise, most of the &amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt; interface files in the root of the &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt; folder in the SDK are Core interfaces.  For example, code to use the IPluginManager interface might look like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;IPluginSys.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPluginManager *g_pPlugins = NULL;&lt;br /&gt;
&lt;br /&gt;
bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(PLUGINSYSTEM, g_pPlugins);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where did we get &amp;lt;tt&amp;gt;PLUGINSYSTEM&amp;lt;/tt&amp;gt; from?  Observe the two lines in &amp;lt;tt&amp;gt;IPluginSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#define SMINTERFACE_PLUGINSYSTEM_NAME		&amp;quot;IPluginManager&amp;quot;&lt;br /&gt;
#define SMINTERFACE_PLUGINSYSTEM_VERSION	1&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;SM_GET_IFACE&amp;lt;/tt&amp;gt; macro uses the text in between the &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; characters.  It also uses the version for compatibility checking.  If it can't find the interface, it automatically prints to the error buffer and returns false.&lt;br /&gt;
&lt;br /&gt;
===Default Interfaces===&lt;br /&gt;
There are interfaces which are grabbed by the Extension SDK by default.  You do not need to query for them on load, or even check if they are valid or not.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;IShareSys&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;sharesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IShareSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;HANDLESYSTEM&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IHandleSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SOURCEMOD&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;g_pSM&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;ISourceMod.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;FORWARDMANAGER&amp;lt;/tt&amp;gt; - Exposed as &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;, found in &amp;lt;tt&amp;gt;IForwardSys.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Available Interfaces===&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_FORWARDSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;forwards&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_HANDLESYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;handlesys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_PLAYERHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;playerhelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_DBMANAGER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;dbi&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMECONF&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gameconfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_MEMUTILS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;memutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_GAMEHELPERS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;gamehelpers&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_TIMERSYS&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;timersys&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SMEXT_ENABLE_THREADER&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Interfaces==&lt;br /&gt;
The situation changes if your extension requires ''another extension'', since extensions may load in a completely random order.  The first step is to mark the other extension as a dependency.  Let's say you want to use the &amp;lt;tt&amp;gt;IThreader.h&amp;lt;/tt&amp;gt; interfaces from &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt;.  First, we declare it as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::SDK_OnLoad(char *error, size_t err_max, bool late)&lt;br /&gt;
{&lt;br /&gt;
	sharesys-&amp;gt;AddDependency(myself, &amp;quot;thread.ext&amp;quot;, true, true);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two boolean parameters to &amp;lt;tt&amp;gt;AddDependency&amp;lt;/tt&amp;gt; mean, respectively: &amp;quot;try to automatically load this extension&amp;quot; and &amp;quot;this extension cannot work without the dependency.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Second, we query for the interface in &amp;lt;tt&amp;gt;SDK_OnAllLoaded&amp;lt;/tt&amp;gt;.  Since we don't know when &amp;lt;tt&amp;gt;thread.ext&amp;lt;/tt&amp;gt; will actually be loaded, we have to wait until everything is definitely loaded.&lt;br /&gt;
&amp;lt;cpp&amp;gt;IThreader *g_pThreader = NULL;&lt;br /&gt;
/* ... */&lt;br /&gt;
void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_LATE_IFACE(THREADER, g_pThreader);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Third, we need to find a way to fail if this interface was never found.  The way to do this is by uncommenting &amp;lt;tt&amp;gt;QueryRunning&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;extension.h&amp;lt;/tt&amp;gt; and implementing it:&lt;br /&gt;
&amp;lt;cpp&amp;gt;bool Sample::QueryRunning(char *error, size_t err_max)&lt;br /&gt;
{&lt;br /&gt;
	SM_CHECK_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	return true;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SourceMod queries your extension, the macro above will either validate the pointer or return false.  If it returns false, SourceMod marks your extension as failed.&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
===NULL Interfaces===&lt;br /&gt;
There are a few ways that external interfaces can make your code complicated.  The first is simple but a common oversight.  Don't assume interfaces will be okay.  For example, say we want to create a thread once we get the &amp;lt;tt&amp;gt;IThreader&amp;lt;/tt&amp;gt; interface.  Our code should something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Sample::SDK_OnAllLoaded()&lt;br /&gt;
{&lt;br /&gt;
	SM_GET_IFACE(THREADER, g_pThreader);&lt;br /&gt;
	&lt;br /&gt;
	if (QueryRunning(NULL, 0))&lt;br /&gt;
	{&lt;br /&gt;
		g_pThreader-&amp;gt;MakeThread(/* stuff */);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we ''query ourself'' in order to find if it's safe to continue executing code.  We could also have simply checked if &amp;lt;tt&amp;gt;g_pThreader&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, but self-querying has a bonus: if your extension continues to do things like hook events or add listeners, you will be preventing your extension from entirely initializing itself while one interface is bad.  Always make sure you have sanity checks like this where needed.&lt;br /&gt;
&lt;br /&gt;
===Dynamic Unloading===&lt;br /&gt;
The second major caveat is that extensions can be dynamically unloaded.  If you specified yourself as having a dependency and that each dependency is required, you will have no problem.  Your extension will be unloaded before the interface is removed, and you can clean up memory/hooks in your &amp;lt;tt&amp;gt;SDK_OnUnload()&amp;lt;/tt&amp;gt; code.  There are two situations where this is a different story.&lt;br /&gt;
&lt;br /&gt;
====Optional Interfaces====&lt;br /&gt;
The first situation is if you are not requiring an extension that contains an interface.  Now, when the extension unloads, your extension will not be unloaded first.  This creates a small problem, as you must clean up without being unloaded.  There are two functions you can implement in your extension class to resolve this, both documented in &amp;lt;tt&amp;gt;IExtensionSys.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*&amp;lt;tt&amp;gt;QueryInterfaceDrop&amp;lt;/tt&amp;gt; - Allows you to request unloading when a specific interface is unloaded.  This is the default behavior for all interfaces.  If you want to block this functionality, continue reading.&lt;br /&gt;
*&amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; - This is called when an interface is dropped.  If your plugin will not be unloaded, you can use this to clean up any resources on a specific interface being removed.&lt;br /&gt;
&lt;br /&gt;
====Circular Dependencies====&lt;br /&gt;
The second situation is a bit more complicated.  It is possible for two extensions to have circular dependencies.  For example:&lt;br /&gt;
*Extension &amp;quot;A&amp;quot; requires extension &amp;quot;B.&amp;quot;&lt;br /&gt;
*Extension &amp;quot;B&amp;quot; requires extension &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If either extension is unloaded, the opposite extension is unloaded normally.  The first extension then receives the interface drop callbacks.  In this situation, it is essential that the &amp;lt;tt&amp;gt;NotifyInterfaceDrop&amp;lt;/tt&amp;gt; function be implemented and used with the circular interface.  Otherwise, you risk crashing when your extension unloads (or at the very least, leaking memory).  Since the actual drop order is undefined, it means both extensions must implement this function to be safe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Automatic Loading=&lt;br /&gt;
There are two types of automatic loading: Dynamic and Global.  Dynamic loading means your extension is only loaded when a plugin requires it.  Global loading means your extension loads no matter what.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Autoloading==&lt;br /&gt;
Dynamic loading requires that you create an include file for plugins.  Plugins that include your file will automatically load your extension.  This requires implementing the &amp;lt;tt&amp;gt;Extension&amp;lt;/tt&amp;gt; structure found in &amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;.  You must expose the structure as &amp;lt;tt&amp;gt;public&amp;lt;/tt&amp;gt;, and the name must start with &amp;quot;&amp;lt;tt&amp;gt;__ext_&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Do not edit below this line!&lt;br /&gt;
 */&lt;br /&gt;
public Extension:__ext_geoip = &lt;br /&gt;
{&lt;br /&gt;
	name = &amp;quot;GeoIP&amp;quot;,&lt;br /&gt;
	file = &amp;quot;geoip.ext&amp;quot;,&lt;br /&gt;
#if defined AUTOLOAD_EXTENSIONS&lt;br /&gt;
	autoload = 1,&lt;br /&gt;
#else&lt;br /&gt;
	autoload = 0,&lt;br /&gt;
#endif&lt;br /&gt;
#if defined REQUIRE_EXTENSIONS&lt;br /&gt;
	required = 1,&lt;br /&gt;
#else&lt;br /&gt;
	required = 0,&lt;br /&gt;
#endif&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanations:&lt;br /&gt;
*&amp;lt;b&amp;gt;name&amp;lt;/b&amp;gt;: The name of your module as written in &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;: The platform-inspecific portion of your extension's file name.&lt;br /&gt;
*&amp;lt;b&amp;gt;autoload&amp;lt;/b&amp;gt;: Specifies that your module should always dynamically autoload by default.  You can tweak this to either never autoload or always autoload (without letting the user toggle).&lt;br /&gt;
*&amp;lt;b&amp;gt;required&amp;lt;/b&amp;gt;: Specifies whether or not this extension is '''required''' by your plugin.  If for some reason your extension fails to load (or is not found), the plugin will also fail to load.  This is changeable if you wish to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this example, but remember to modify the following portions:&lt;br /&gt;
*&amp;lt;b&amp;gt;__ext_geoip&amp;lt;/b&amp;gt;: Change the &amp;quot;geoip&amp;quot; portion to your own unique variable name.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;GeoIP&amp;lt;/b&amp;gt;: Change the GeoIP portion to your extension's name.  This should match the name you chose as &amp;lt;tt&amp;gt;SMEXT_CONF_NAME&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;&amp;quot;geoip.ext&amp;quot;&amp;lt;/b&amp;gt;: Change this to your extension's file name, without the .dll/.so portion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global Autoloading==&lt;br /&gt;
To have your extension always autoload, you must create a ''.autoload'' file in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder.  For example, to have the &amp;lt;tt&amp;gt;threader.ext.dll&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;threader.ext.so&amp;lt;/tt&amp;gt; extensions autoload, you'd create the following file in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;threader.autoload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
*This only works for extensions using the .ext.&amp;lt;platform&amp;gt; convention.  SourceMod cuts off the &amp;quot;.autoload&amp;quot; portion of the file, then adds the appropriate extension just as if 'sm exts load' was used.&lt;br /&gt;
*The file does not need to contain anything, it simply needs to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conventions=&lt;br /&gt;
&lt;br /&gt;
==Designing API/Natives==&lt;br /&gt;
*Start interface names with the capital letter 'I'.&lt;br /&gt;
*Use a consistent naming convention.  SourceMod uses [http://msdn2.microsoft.com/en-us/library/ms229002.aspx Microsoft/Pascal] naming.  Avoid Java/Camel casing for both API and natives.&lt;br /&gt;
*When exposing interfaces, make sure your exposure defines start with &amp;lt;tt&amp;gt;SMINTERFACE_&amp;lt;/tt&amp;gt; and end with &amp;lt;tt&amp;gt;_NAME&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;_VERSION&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Naming==&lt;br /&gt;
*Logtags (&amp;lt;tt&amp;gt;SMEXT_CONF_LOGTAG&amp;lt;/tt&amp;gt;) should be short names (under 10 characters or so) in all capital letters.&lt;br /&gt;
*Your extension file name should never have &amp;lt;tt&amp;gt;_i486&amp;lt;/tt&amp;gt; or other unnecessary platform-specific notations in its name.&lt;br /&gt;
*Your extension file name should always end in &amp;lt;tt&amp;gt;.ext.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.ext.dll&amp;lt;/tt&amp;gt; depending on the platform.  The &amp;lt;tt&amp;gt;.ext.&amp;lt;/tt&amp;gt; is SourceMod convention.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setting up Visual Studio=&lt;br /&gt;
&lt;br /&gt;
{{qnotice|It is recommended that you make a copy of the sample_ext project and modify that rather than create your own project, as it will set up most of this for you}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Project ==&lt;br /&gt;
&lt;br /&gt;
Instead of manually creating a project, you can make a copy of the sample_ext project and modify it.&lt;br /&gt;
&lt;br /&gt;
The sample_ext project assumes that it is located in a subdirectory inside the SourceMod public directory.  To change this, modify all references to ..\.. to $(SOURCEMOD15)\public and specify the SOURCEMOD15 variable as mentioned in the Optional Environment variables.&lt;br /&gt;
&lt;br /&gt;
The sample_ext projectuses the following environment variables to locate the various source code parts.  To set environment variables:&lt;br /&gt;
&lt;br /&gt;
'''Windows XP''': Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
'''Windows Vista/7''': Start -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced system properties -&amp;gt; Advanced -&amp;gt; Environment Variables&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
The environment variables used are:&lt;br /&gt;
&lt;br /&gt;
* '''MMSOURCE17''': Path to MetaMod: Source source code for version 1.7 or newer. Used to compile SourceMod itself.  &lt;br /&gt;
* '''MMSOURCE18''': Path to MetaMod: Source source code for version 1.8 or newer. Used in SourceMod 1.4 projects.  &lt;br /&gt;
* '''MMSOURCE19''': Path to MetaMod: Source source code for version 1.9 or newer. Used in SourceMod 1.5 projects.  &lt;br /&gt;
* '''HL2SDK''': Path to the Episode 1 SDK  &lt;br /&gt;
* '''HL2SDK-SWARM''': Path to the Alien Swarm SDK  &lt;br /&gt;
* '''HL2SDK-DARKM''': Path to the Dark Messiah SDK  &lt;br /&gt;
* '''HL2SDKCSGO''': Path to the Counter-Strike: Global Offensive SDK  &lt;br /&gt;
* '''HL2SDKCSS''': Path to the Counter-Strike: Source SDK  &lt;br /&gt;
* '''HL2SDKL4D''': Path to the Left 4 Dead SDK  &lt;br /&gt;
* '''HL2SDKL4D2''': Path to the Left 4 Dead 2 SDK  &lt;br /&gt;
* '''HL2SDKOB''': Path to the Orange Box SDK (not Source 2009)  &lt;br /&gt;
* '''HL2SDKOBVALVE''': Path to the Orange Box Valve / Source 2009 SDK (Half-Life 2: Deathmatch, Day of Defeat: Source, Team Fortress 2)&lt;br /&gt;
&lt;br /&gt;
Optional environment variables:&lt;br /&gt;
&lt;br /&gt;
* '''SOURCEMOD15'': Optional path to SourceMod 1.5 or newer source code&lt;br /&gt;
&lt;br /&gt;
==Manually configuring a project==&lt;br /&gt;
&lt;br /&gt;
===Paths===&lt;br /&gt;
'''Visual Studio 2003''': Tools -&amp;gt; Options -&amp;gt; Projects, VC++ Directories&lt;br /&gt;
&lt;br /&gt;
'''Visual Studio 2005''': Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; VC++ Directories&lt;br /&gt;
&lt;br /&gt;
====Include Paths====&lt;br /&gt;
*SourceMod only:&lt;br /&gt;
**sdk\public\extensions&lt;br /&gt;
**sdk\public\sourcepawn&lt;br /&gt;
**sdk\public&lt;br /&gt;
*SourceMM (Note that sourcemm might be 'trunk' for you):&lt;br /&gt;
**sourcemm\core&lt;br /&gt;
**sourcemm\core\sourcehook&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**game\shared&lt;br /&gt;
**public\vstdlib&lt;br /&gt;
**public\tier1&lt;br /&gt;
**public\tier0&lt;br /&gt;
**public\engine&lt;br /&gt;
**public&lt;br /&gt;
**dlls&lt;br /&gt;
&lt;br /&gt;
====Link Paths====&lt;br /&gt;
*HL2SDK:&lt;br /&gt;
**lib\public for version 2005&lt;br /&gt;
**lib-vc7\public for version 2003&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options are set by default in the sample Extension SDK.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; These options should be set for every build (Release/Debug/others).&lt;br /&gt;
&lt;br /&gt;
For VS 2005, goto Project-&amp;gt;Properties.&lt;br /&gt;
&lt;br /&gt;
*General&lt;br /&gt;
**&amp;lt;tt&amp;gt;Character Set&amp;lt;/tt&amp;gt;: '''Use Multi-Byte Character Set'''&lt;br /&gt;
*C/C++&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Detect 64-bit Portability Issues&amp;lt;/tt&amp;gt;: '''No'''&lt;br /&gt;
**Preprocessor&lt;br /&gt;
***&amp;lt;tt&amp;gt;Preprocessor Defines&amp;lt;/tt&amp;gt;: Add &amp;lt;tt&amp;gt;_CRT_SECURE_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;_CRT_NONSTDC_NO_DEPRECATE&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SOURCEMOD_BUILD&amp;lt;/tt&amp;gt;  and &amp;lt;tt&amp;gt;WIN32&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Code Generation&lt;br /&gt;
***&amp;lt;tt&amp;gt;Runtime Library&amp;lt;/tt&amp;gt;: Multi-threaded or /MT (for Release), Multi-threaded Debug or /MTd (for Debug)&lt;br /&gt;
*Linker&lt;br /&gt;
**General&lt;br /&gt;
***&amp;lt;tt&amp;gt;Output File&amp;lt;/tt&amp;gt;: Change &amp;lt;tt&amp;gt;$(ProjectName)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;$(ProjectName).ext&amp;lt;/tt&amp;gt;, or use your own custom string.&lt;br /&gt;
**Input&lt;br /&gt;
***&amp;lt;tt&amp;gt;Additional Dependencies&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;tier0.lib tier1.lib vstdlib.lib&amp;lt;/tt&amp;gt; (for SourceMM attached extensions only)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Events&amp;diff=10053</id>
		<title>Team Fortress 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Events&amp;diff=10053"/>
		<updated>2015-11-14T08:17:54Z</updated>

		<summary type="html">&lt;p&gt;Darkid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
The following events can also be found in '''tf\tf2_misc_dir\resource\modevents.res'''&lt;br /&gt;
&lt;br /&gt;
=== intro_finish ===&lt;br /&gt;
{{begin-hl2msg|intro_finish|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== intro_nextcamera ===&lt;br /&gt;
{{begin-hl2msg|intro_nextcamera|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_chat ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_chat|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who said the thing}}&lt;br /&gt;
{{hl2msg|string|text|Their chat message}}&lt;br /&gt;
{{hl2msg|short|type|What sort of message?  (Some &amp;quot;system&amp;quot; messages are sent by lobby leader)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_member_join ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_member_join|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who joined}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_member_leave ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_member_leave|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who joined}}&lt;br /&gt;
{{hl2msg|long|flags|Bitfield of EChatMemberStateChange flags describing who entered or left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== player_changeclass ===&lt;br /&gt;
{{qnotice|When a player changes their class}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_changeclass|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who changed class}}&lt;br /&gt;
{{hl2msg|short|class|class that they changed to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|When a player dies}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|dominated, assister_dominated, revenge, assister_revenge, first_blood, and feign_death no longer exist in this event }}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|short|playerpenetratecount|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{hl2msg|short|kill_streak_total|Kill streak count (level)}}&lt;br /&gt;
{{hl2msg|short|kill_streak_wep|Kill streak for killing weapon}}&lt;br /&gt;
{{hl2msg|short|kill_streak_assist|Kill streak for assister count}}&lt;br /&gt;
{{hl2msg|short|kill_streak_victim|Victims kill streak}}&lt;br /&gt;
{{hl2msg|short|ducks_streaked|Duck streak increment from this kill}}&lt;br /&gt;
{{hl2msg|short|duck_streak_total|Duck streak count for attacker}}&lt;br /&gt;
{{hl2msg|short|duck_streak_assist|Duck streak count for assister}}&lt;br /&gt;
{{hl2msg|short|duck_streak_victim|(former) duck streak count for victim}}&lt;br /&gt;
{{hl2msg|bool|rocket_jump|was the victim rocket jumping}}&lt;br /&gt;
{{hl2msg|short|weapon_def_index|item def index of weapon killer used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tf_map_time_remaining ===&lt;br /&gt;
{{begin-hl2msg|tf_map_time_remaining|string}}&lt;br /&gt;
{{hl2msg|long|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tf_game_over ===&lt;br /&gt;
{{qnotice|When a tf game ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tf_game_over|string}}&lt;br /&gt;
{{hl2msg|string|reason|why the game is over ( timelimit, winlimit )}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== ctf_flag_captured ===&lt;br /&gt;
{{qnotice|When a flag is captured by a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ctf_flag_captured|string}}&lt;br /&gt;
{{hl2msg|short|capping_team|}}&lt;br /&gt;
{{hl2msg|short|capping_team_score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_initialized ===&lt;br /&gt;
{{qnotice|When a player begins to capture a control point}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_initialized|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updateimages ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updateimages|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updatelayout ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updatelayout|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updatecapping ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updatecapping|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updateowner ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updateowner|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_starttouch ===&lt;br /&gt;
{{qnotice|When a player enters a capture point zone}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_starttouch|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|area|index of the control point area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_endtouch ===&lt;br /&gt;
{{qnotice|When a player leaves a capture point zone}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_endtouch|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|area|index of the control point area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_pulse_element ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_pulse_element|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_fake_capture ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_fake_capture|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|int_data|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_fake_capture_mult ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_fake_capture_mult|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|int_data|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_selected ===&lt;br /&gt;
{{qnotice|When a round is selected.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_selected|string}}&lt;br /&gt;
{{hl2msg|string|round|name of the round selected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_start ===&lt;br /&gt;
{{qnotice|round restart}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|teamplay_round_start|string}}&lt;br /&gt;
{{hl2msg|bool|full_reset|is this a full reset of the map}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_active ===&lt;br /&gt;
{{qnotice|called when round is active, players can move}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|teamplay_round_active|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_begins ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_begins|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_ends ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_ends|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_abouttoend ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round is about to end}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_abouttoend|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_restart_round ===&lt;br /&gt;
{{qnotice|When a round is restarted}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_restart_round|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_ready_restart ===&lt;br /&gt;
{{begin-hl2msg|teamplay_ready_restart|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_restart_seconds ===&lt;br /&gt;
{{begin-hl2msg|teamplay_round_restart_seconds|string}}&lt;br /&gt;
{{hl2msg|short|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_team_ready ===&lt;br /&gt;
{{begin-hl2msg|teamplay_team_ready|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team is ready}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_win ===&lt;br /&gt;
{{qnotice|When a team wins a round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_win|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team won the round}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
&lt;br /&gt;
{{hl2msg|short|full_round|was this a full round or a mini-round}}&lt;br /&gt;
{{hl2msg|float|round_time|elapsed time of this round}}&lt;br /&gt;
{{hl2msg|short|losing_team_num_caps|# of caps this round by losing team}}&lt;br /&gt;
{{hl2msg|byte|was_sudden_death|did a team win this after entering sudden death}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_update_timer ===&lt;br /&gt;
{{begin-hl2msg|teamplay_update_timer|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_stalemate ===&lt;br /&gt;
{{qnotice|When a game ends in a stalemate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_stalemate|string}}&lt;br /&gt;
{{hl2msg|byte|reason|why the stalemate is occuring}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_overtime_begin ===&lt;br /&gt;
{{qnotice|When an overtime round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_overtime_begin|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_overtime_end ===&lt;br /&gt;
{{qnotice|When an overtime round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_overtime_end|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_suddendeath_begin ===&lt;br /&gt;
{{qnotice|When a sudden death round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_suddendeath_begin|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_suddendeath_end ===&lt;br /&gt;
{{qnotice|When a sudden death round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_suddendeath_end|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_game_over ===&lt;br /&gt;
{{qnotice|When a teamplay game ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_game_over|string}}&lt;br /&gt;
{{hl2msg|string|reason|why the game is over ( timelimit, winlimit )}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_map_time_remaining ===&lt;br /&gt;
{{begin-hl2msg|teamplay_map_time_remaining|string}}&lt;br /&gt;
{{hl2msg|short|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_broadcast_audio ===&lt;br /&gt;
{{qnotice|Broadcast an audio file by game_sound name. Audio files are documented in the game_sound files inside tf2_misc_dir.vpk.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_broadcast_audio|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team should hear the broadcast. -1 will make everyone hear it.}}&lt;br /&gt;
{{hl2msg|string|sound|sound to play}}&lt;br /&gt;
{{hl2msg|short|additional_flags|additional sound flags to pass through to sound system}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_timer_flash ===&lt;br /&gt;
{{begin-hl2msg|teamplay_timer_flash|string}}&lt;br /&gt;
{{hl2msg|short|time_remaining|how many seconds until the round ends}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_timer_time_added ===&lt;br /&gt;
{{begin-hl2msg|teamplay_timer_time_added|string}}&lt;br /&gt;
{{hl2msg|short|timer|entindex of the timer}}&lt;br /&gt;
{{hl2msg|short|seconds_added|how many seconds were added to the round timer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_startcapture ===&lt;br /&gt;
{{qnotice|When a point is beginning to be captured}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_point_startcapture|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{hl2msg|byte|capteam|which team is capping}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone capping}}&lt;br /&gt;
{{hl2msg|float|captime|time between when this cap started and when the point last changed hands}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_captured ===&lt;br /&gt;
{{qnotice|When a control point is captured by a team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_point_captured|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point that was captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team capped}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_locked ===&lt;br /&gt;
{{begin-hl2msg|teamplay_point_locked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_unlocked ===&lt;br /&gt;
{{begin-hl2msg|teamplay_point_unlocked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_capture_broken ===&lt;br /&gt;
{{begin-hl2msg|teamplay_capture_broken|string}}&lt;br /&gt;
{{hl2msg|byte|cp|}}&lt;br /&gt;
{{hl2msg|string|cpname|}}&lt;br /&gt;
{{hl2msg|float|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_capture_blocked ===&lt;br /&gt;
{{qnotice|When a player blocks the capture of a control point}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_capture_blocked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point that was blocked}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|blocker|index of the player that blocked the cap}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the player that died, causing the block}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_flag_event ===&lt;br /&gt;
{{begin-hl2msg|teamplay_flag_event|string}}&lt;br /&gt;
{{hl2msg|short|player|player this event involves}}&lt;br /&gt;
{{hl2msg|short|carrier|the carrier if needed}}&lt;br /&gt;
{{hl2msg|short|eventtype|pick up, capture, defend, dropped}}&lt;br /&gt;
{{hl2msg|byte|home|whether or not the flag was home (only set for TF_FLAGEVENT_PICKUP)}}&lt;br /&gt;
{{hl2msg|byte|team|which team the flag belongs to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_win_panel ===&lt;br /&gt;
{{qnotice|When the win-game panel is displayed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
{{hl2msg|short|blue_score|red team score}}&lt;br /&gt;
{{hl2msg|short|red_score|blue team score}}&lt;br /&gt;
{{hl2msg|short|blue_score_prev|previous red team score}}&lt;br /&gt;
{{hl2msg|short|red_score_prev|previous blue team score}}&lt;br /&gt;
{{hl2msg|short|round_complete|is this a complete round, or the end of a mini-round}}&lt;br /&gt;
{{hl2msg|short|rounds_remaining|# of rounds remaining for wining team, if mini-round}}&lt;br /&gt;
{{hl2msg|short|player_1|}}&lt;br /&gt;
{{hl2msg|short|player_1_points|}}&lt;br /&gt;
{{hl2msg|short|player_2|}}&lt;br /&gt;
{{hl2msg|short|player_2_points|}}&lt;br /&gt;
{{hl2msg|short|player_3|}}&lt;br /&gt;
{{hl2msg|short|player_3_points|}}&lt;br /&gt;
{{hl2msg|short|killstreak_player_1|}}&lt;br /&gt;
{{hl2msg|short|killstreak_player_1_count|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_teambalanced_player ===&lt;br /&gt;
{{qnotice|When a player is balanced to another team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_teambalanced_player|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|byte|team|which team the player is being moved to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_setup_finished ===&lt;br /&gt;
{{qnotice|When the setup round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_setup_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_alert ===&lt;br /&gt;
{{qnotice|When an alert is shown to a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_alert|string}}&lt;br /&gt;
{{hl2msg|short|alert_type|which alert type is this (scramble, etc)?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== training_complete ===&lt;br /&gt;
{{begin-hl2msg|training_complete|string}}&lt;br /&gt;
{{hl2msg|string|next_map|next map (if any)}}&lt;br /&gt;
{{hl2msg|string|map|the name of the map this screen is on.}}&lt;br /&gt;
{{hl2msg|string|text|text to show}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== show_freezepanel ===&lt;br /&gt;
{{qnotice|When the death-snapshot panel is shown}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|show_freezepanel|string}}&lt;br /&gt;
{{hl2msg|short|killer|entindex of the killer entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hide_freezepanel ===&lt;br /&gt;
{{qnotice|When the death-snapshot panel is hidden}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hide_freezepanel|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== freezecam_started ===&lt;br /&gt;
{{qnotice|When a player enters the death-snapshot view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|freezecam_started|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changeteam ===&lt;br /&gt;
{{qnotice|When a LAN player changes team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changeteam|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_score_changed ===&lt;br /&gt;
{{begin-hl2msg|localplayer_score_changed|string}}&lt;br /&gt;
{{hl2msg|short|score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changeclass ===&lt;br /&gt;
{{qnotice|When a LAN player changes class}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changeclass|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_respawn ===&lt;br /&gt;
{{qnotice|When a LAN player respawns}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_respawn|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== building_info_changed ===&lt;br /&gt;
{{begin-hl2msg|building_info_changed|string}}&lt;br /&gt;
{{hl2msg|byte|building_type|}}&lt;br /&gt;
{{hl2msg|byte|object_mode|}}&lt;br /&gt;
{{hl2msg|byte|remove|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changedisguise ===&lt;br /&gt;
{{qnotice|When a LAN player changes their disguise as a spy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changedisguise|string}}&lt;br /&gt;
{{hl2msg|bool|disguised|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_account_changed ===&lt;br /&gt;
{{begin-hl2msg|player_account_changed|string}}&lt;br /&gt;
{{hl2msg|short|old_value|}}&lt;br /&gt;
{{hl2msg|short|new_value|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== spy_pda_reset ===&lt;br /&gt;
{{begin-hl2msg|spy_pda_reset|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== flagstatus_update ===&lt;br /&gt;
{{begin-hl2msg|flagstatus_update|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player who now has the flag}}&lt;br /&gt;
{{hl2msg|long|entindex|ent index of flag}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stats_updated ===&lt;br /&gt;
{{qnotice|When a players stats are updated}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_stats_updated|string}}&lt;br /&gt;
{{hl2msg|bool|forceupload|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== playing_commentary ===&lt;br /&gt;
{{qnotice|When a commentary is being played}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|playing_commentary|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_chargedeployed ===&lt;br /&gt;
{{qnotice|When an uber is deployed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_chargedeployed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of medic who deployed charge}}&lt;br /&gt;
{{hl2msg|short|targetid|user ID of who the medic charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_builtobject ===&lt;br /&gt;
{{qnotice|When a player builds an object}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_builtobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the builder}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|index of the object}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_upgradedobject ===&lt;br /&gt;
{{begin-hl2msg|player_upgradedobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{hl2msg|bool|isbuilder|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_carryobject ===&lt;br /&gt;
{{begin-hl2msg|player_carryobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_dropobject ===&lt;br /&gt;
{{begin-hl2msg|player_dropobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_removed ===&lt;br /&gt;
{{begin-hl2msg|object_removed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the object owner}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object removed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object removed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_destroyed ===&lt;br /&gt;
{{qnotice|When a player destroys an object}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|object_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|id of the weapon used}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object destroyed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object destroyed}}&lt;br /&gt;
{{hl2msg|bool|was_building|object was being built when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_detonated ===&lt;br /&gt;
{{begin-hl2msg|object_detonated|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the object owner}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object removed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object removed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|When a player earns an achievement}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tournament_stateupdate ===&lt;br /&gt;
{{begin-hl2msg|tournament_stateupdate|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|bool|namechange|}}&lt;br /&gt;
{{hl2msg|short|readystate|}}&lt;br /&gt;
{{hl2msg|string|newname|players new name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tournament_enablecountdown ===&lt;br /&gt;
{{begin-hl2msg|tournament_enablecountdown|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_calledformedic ===&lt;br /&gt;
{{qnotice|When a player calls for a medic. This does not appear to fire for the server.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_calledformedic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_askedforball ===&lt;br /&gt;
{{qnotice|When a player asks for the ball in PASStime.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_askedforball|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== localplayer_becameobserver ===&lt;br /&gt;
{{begin-hl2msg|localplayer_becameobserver|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_ignited_inv ===&lt;br /&gt;
{{qnotice|sent when a player is ignited by a pyro who is being invulned, only to the medic who's doing the invulning}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_ignited_inv|string}}&lt;br /&gt;
{{hl2msg|byte|pyro_entindex|entindex of the pyro who ignited the victim}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player ignited by the pyro}}&lt;br /&gt;
{{hl2msg|byte|medic_entindex|entindex of the medic releasing the invuln}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_ignited ===&lt;br /&gt;
{{qnotice|sent when a player is ignited, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_ignited|string}}&lt;br /&gt;
{{hl2msg|byte|pyro_entindex|entindex of the pyro who ignited the victim}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player ignited by the pyro}}&lt;br /&gt;
{{hl2msg|byte|weaponid|weaponid of the weapon used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_extinguished ===&lt;br /&gt;
{{qnotice|sent when a burning player is extinguished by a medic}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_extinguished|string}}&lt;br /&gt;
{{hl2msg|byte|victim|entindex of the player that was extinguished}}&lt;br /&gt;
{{hl2msg|byte|healer|entindex of the player who did the extinguishing}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_teleported ===&lt;br /&gt;
{{qnotice|Sent when a player is teleported}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_teleported|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player}}&lt;br /&gt;
{{hl2msg|short|builderid|userid of the player who built the teleporter}}&lt;br /&gt;
{{hl2msg|float|dist|distance the player was teleported}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healedmediccall ===&lt;br /&gt;
{{qnotice|local player heals someone who called for medic.}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_healedmediccall|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of person who got healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_chargeready ===&lt;br /&gt;
{{qnotice|local player has full medic charge}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|localplayer_chargeready|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_winddown ===&lt;br /&gt;
{{qnotice|local player minigun winddown}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|localplayer_winddown|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_invulned ===&lt;br /&gt;
{{qnotice|Send when a player is made invulnerable}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_invulned|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|medic_userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== escort_speed ===&lt;br /&gt;
{{begin-hl2msg|escort_speed|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|byte|speed|}}&lt;br /&gt;
{{hl2msg|byte|players|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== escort_progress ===&lt;br /&gt;
{{begin-hl2msg|escort_progress|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|float|progress|}}&lt;br /&gt;
{{hl2msg|bool|reset|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== escort_recede ===&lt;br /&gt;
{{begin-hl2msg|escort_recede|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|float|recedetime|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== gameui_activated ===&lt;br /&gt;
{{begin-hl2msg|gameui_activated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== gameui_hidden ===&lt;br /&gt;
{{begin-hl2msg|gameui_hidden|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_escort_score ===&lt;br /&gt;
{{begin-hl2msg|player_escort_score|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|byte|points|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healonhit ===&lt;br /&gt;
{{begin-hl2msg|player_healonhit|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{hl2msg|byte|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stealsandvich ===&lt;br /&gt;
{{begin-hl2msg|player_stealsandvich|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|target|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== show_class_layout ===&lt;br /&gt;
{{begin-hl2msg|show_class_layout|string}}&lt;br /&gt;
{{hl2msg|bool|show|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== show_vs_panel ===&lt;br /&gt;
{{begin-hl2msg|show_vs_panel|string}}&lt;br /&gt;
{{hl2msg|bool|show|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_damaged ===&lt;br /&gt;
{{begin-hl2msg|player_damaged|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{hl2msg|long|type|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{hl2msg|short|damageamount|}}&lt;br /&gt;
{{hl2msg|short|custom|}}&lt;br /&gt;
{{hl2msg|bool|showdisguisedcrit|if our attribute specifically crits disguised enemies we need to show it on the client}}&lt;br /&gt;
{{hl2msg|bool|crit|}}&lt;br /&gt;
{{hl2msg|bool|minicrit|}}&lt;br /&gt;
{{hl2msg|bool|allseecrit|}}&lt;br /&gt;
{{hl2msg|short|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|bonuseffect|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== arena_player_notification ===&lt;br /&gt;
{{begin-hl2msg|arena_player_notification|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|byte|message|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_match_maxstreak ===&lt;br /&gt;
{{begin-hl2msg|arena_match_maxstreak|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|byte|streak|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_round_start ===&lt;br /&gt;
{{qnotice|called when round is active, players can move}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|arena_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_win_panel ===&lt;br /&gt;
{{begin-hl2msg|arena_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won - 1 (someone capped) 2 (entire team was killed)}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
{{hl2msg|short|blue_score|red team score}}&lt;br /&gt;
{{hl2msg|short|red_score|blue team score}}&lt;br /&gt;
{{hl2msg|short|blue_score_prev|previous red team score}}&lt;br /&gt;
{{hl2msg|short|red_score_prev|previous blue team score}}&lt;br /&gt;
{{hl2msg|short|round_complete|is this a complete round, or the end of a mini-round}}&lt;br /&gt;
{{hl2msg|short|player_1|}}&lt;br /&gt;
{{hl2msg|short|player_1_damage|}}&lt;br /&gt;
{{hl2msg|short|player_1_healing|}}&lt;br /&gt;
{{hl2msg|short|player_1_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_1_kills|}}&lt;br /&gt;
{{hl2msg|short|player_2|}}&lt;br /&gt;
{{hl2msg|short|player_2_damage|}}&lt;br /&gt;
{{hl2msg|short|player_2_healing|}}&lt;br /&gt;
{{hl2msg|short|player_2_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_2_kills|}}&lt;br /&gt;
{{hl2msg|short|player_3|}}&lt;br /&gt;
{{hl2msg|short|player_3_damage|}}&lt;br /&gt;
{{hl2msg|short|player_3_healing|}}&lt;br /&gt;
{{hl2msg|short|player_3_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_3_kills|}}&lt;br /&gt;
{{hl2msg|short|player_4|}}&lt;br /&gt;
{{hl2msg|short|player_4_damage|}}&lt;br /&gt;
{{hl2msg|short|player_4_healing|}}&lt;br /&gt;
{{hl2msg|short|player_4_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_4_kills|}}&lt;br /&gt;
{{hl2msg|short|player_5|}}&lt;br /&gt;
{{hl2msg|short|player_5_damage|}}&lt;br /&gt;
{{hl2msg|short|player_5_healing|}}&lt;br /&gt;
{{hl2msg|short|player_5_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_5_kills|}}&lt;br /&gt;
{{hl2msg|short|player_6|}}&lt;br /&gt;
{{hl2msg|short|player_6_damage|}}&lt;br /&gt;
{{hl2msg|short|player_6_healing|}}&lt;br /&gt;
{{hl2msg|short|player_6_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_6_kills|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pve_win_panel ===&lt;br /&gt;
{{qnotice|MvM Win Panel}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|pve_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== air_dash ===&lt;br /&gt;
{{qnotice|Called when a scout Performs Double Jump}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|air_dash|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== landed ===&lt;br /&gt;
{{begin-hl2msg|landed|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_damage_dodged ===&lt;br /&gt;
{{qnotice|When a Player Evades Damage with Bonk}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_damage_dodged|string}}&lt;br /&gt;
{{hl2msg|short|damage|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stunned ===&lt;br /&gt;
{{qnotice|When a Player is Stunned}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_stunned|string}}&lt;br /&gt;
{{hl2msg|short|stunner|}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|bool|victim_capping|}}&lt;br /&gt;
{{hl2msg|bool|big_stun|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== scout_grand_slam ===&lt;br /&gt;
{{qnotice|When a Player is Killed by the Scout Taunt}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scout_grand_slam|string}}&lt;br /&gt;
{{hl2msg|short|scout_id|}}&lt;br /&gt;
{{hl2msg|short|target_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== scout_slamdoll_landed ===&lt;br /&gt;
{{begin-hl2msg|scout_slamdoll_landed|string}}&lt;br /&gt;
{{hl2msg|short|target_index|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arrow_impact ===&lt;br /&gt;
{{qnotice|When a player is hit by a Sniper's Huntsman arrow or Medic's Crusader's Crossbow arrow}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|arrow_impact|string}}&lt;br /&gt;
{{hl2msg|short|attachedEntity|}}&lt;br /&gt;
{{hl2msg|short|shooter|}}&lt;br /&gt;
{{hl2msg|short|boneIndexAttached|}}&lt;br /&gt;
{{hl2msg|float|bonePositionX|}}&lt;br /&gt;
{{hl2msg|float|bonePositionY|}}&lt;br /&gt;
{{hl2msg|float|bonePositionZ|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesX|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesY|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesZ|}}&lt;br /&gt;
{{hl2msg|short|projectileType|}}&lt;br /&gt;
{{hl2msg|bool|isCrit|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_jarated ===&lt;br /&gt;
{{qnotice|sent when a player is jarated, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_jarated|string}}&lt;br /&gt;
{{hl2msg|byte|thrower_entindex|entindex of the player who threw the jarate}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player receiving it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_jarated_fade ===&lt;br /&gt;
{{qnotice|sent when a player is jarated, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_jarated_fade|string}}&lt;br /&gt;
{{hl2msg|byte|thrower_entindex|entindex of the player who threw the jarate}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player receiving it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_shield_blocked ===&lt;br /&gt;
{{qnotice|Sent when a Razorback blocks a backstab}}&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_shield_blocked|string}}&lt;br /&gt;
{{hl2msg|byte|attacker_entindex|entindex of the player who attacked}}&lt;br /&gt;
{{hl2msg|byte|blocker_entindex|entindex of the player whose shield blocked the stab}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_pinned ===&lt;br /&gt;
{{qnotice|When a player is pinned to a wall}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_pinned|string}}&lt;br /&gt;
{{hl2msg|byte|pinned|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healedbymedic ===&lt;br /&gt;
{{begin-hl2msg|player_healedbymedic|string}}&lt;br /&gt;
{{hl2msg|byte|medic|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_spawn ===&lt;br /&gt;
{{begin-hl2msg|player_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who spawned}}&lt;br /&gt;
{{hl2msg|short|team|team they spawned on}}&lt;br /&gt;
{{hl2msg|short|class|class they spawned as}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_sapped_object ===&lt;br /&gt;
{{begin-hl2msg|player_sapped_object|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the spy}}&lt;br /&gt;
{{hl2msg|short|ownerid|user ID of the building owner}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|sapperid|index of the sapper}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== item_found ===&lt;br /&gt;
{{qnotice|When a player finds an item}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_found|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|byte|quality|quality of the item}}&lt;br /&gt;
{{hl2msg|byte|method|method by which we acquired the item (TODO: Show which numbers represent which method of finding.)}}&lt;br /&gt;
{{hl2msg|long|itemdef|the item definition index}}&lt;br /&gt;
{{hl2msg|byte|isstrange|}}&lt;br /&gt;
{{hl2msg|long|isunusual|}}&lt;br /&gt;
{{hl2msg|float|wear|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== show_annotation ===&lt;br /&gt;
{{begin-hl2msg|show_annotation|string}}&lt;br /&gt;
{{hl2msg|float|worldPosX|}}&lt;br /&gt;
{{hl2msg|float|worldPosY|}}&lt;br /&gt;
{{hl2msg|float|worldPosZ|}}&lt;br /&gt;
{{hl2msg|float|worldNormalX|}}&lt;br /&gt;
{{hl2msg|float|worldNormalY|}}&lt;br /&gt;
{{hl2msg|float|worldNormalZ|}}&lt;br /&gt;
{{hl2msg|long|id|}}&lt;br /&gt;
{{hl2msg|string|text|name (unlocalized)}}&lt;br /&gt;
{{hl2msg|float|lifetime|}}&lt;br /&gt;
{{hl2msg|long|visibilityBitfield|bitfield of the players that can see this}}&lt;br /&gt;
{{hl2msg|long|follow_entindex|if this is set, follow this entity}}&lt;br /&gt;
{{hl2msg|bool|show_distance|}}&lt;br /&gt;
{{hl2msg|string|play_sound|}}&lt;br /&gt;
{{hl2msg|bool|show_effect|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hide_annotation ===&lt;br /&gt;
{{begin-hl2msg|hide_annotation|string}}&lt;br /&gt;
{{hl2msg|long|id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== post_inventory_application ===&lt;br /&gt;
{{qnotice|sent when a player gets a whole new set of items, aka touches a resupply locker / respawn cabinet or spawns in.}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|post_inventory_application|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_unlock_updated ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_unlock_updated|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{hl2msg|float|time|time}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== deploy_buff_banner ===&lt;br /&gt;
{{begin-hl2msg|deploy_buff_banner|string}}&lt;br /&gt;
{{hl2msg|byte|buff_type|type of buff (skin index)}}&lt;br /&gt;
{{hl2msg|short|buff_owner|user ID of the person who gets the banner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_buff ===&lt;br /&gt;
{{begin-hl2msg|player_buff|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player the buff is being applied to}}&lt;br /&gt;
{{hl2msg|short|buff_owner|user ID of the player with the banner}}&lt;br /&gt;
{{hl2msg|byte|buff_type|type of buff}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== medic_death ===&lt;br /&gt;
{{qnotice|When a medic dies}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|medic_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|healing|amount healed in this life}}&lt;br /&gt;
{{hl2msg|bool|charged|had a full ubercharge?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== overtime_nag ===&lt;br /&gt;
{{begin-hl2msg|overtime_nag|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teams_changed ===&lt;br /&gt;
{{begin-hl2msg|teams_changed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== halloween_pumpkin_grab ===&lt;br /&gt;
{{begin-hl2msg|halloween_pumpkin_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rocket_jump ===&lt;br /&gt;
{{begin-hl2msg|rocket_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|playsound|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== rocket_jump_landed ===&lt;br /&gt;
{{begin-hl2msg|rocket_jump_landed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== sticky_jump ===&lt;br /&gt;
{{begin-hl2msg|sticky_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|playsound|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== sticky_jump_landed ===&lt;br /&gt;
{{begin-hl2msg|sticky_jump_landed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== medic_defended ===&lt;br /&gt;
{{begin-hl2msg|medic_defended|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|medic|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_healed ===&lt;br /&gt;
{{begin-hl2msg|localplayer_healed|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_destroyed_pipebomb ===&lt;br /&gt;
{{begin-hl2msg|player_destroyed_pipebomb|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== object_deflected ===&lt;br /&gt;
{{begin-hl2msg|object_deflected|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who deflected the object}}&lt;br /&gt;
{{hl2msg|short|ownerid|owner of the object}}&lt;br /&gt;
{{hl2msg|short|weaponid|weapon id (0 means the player in ownerid was pushed)}}&lt;br /&gt;
{{hl2msg|byte|object_entindex|entindex of the object that got deflected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_mvp ===&lt;br /&gt;
{{begin-hl2msg|player_mvp|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== raid_spawn_mob ===&lt;br /&gt;
{{begin-hl2msg|raid_spawn_mob|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== raid_spawn_squad ===&lt;br /&gt;
{{begin-hl2msg|raid_spawn_squad|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== path_track_passed ===&lt;br /&gt;
{{begin-hl2msg|path_track_passed|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the node being passed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== num_cappers_changed ===&lt;br /&gt;
{{begin-hl2msg|num_cappers_changed|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the trigger}}&lt;br /&gt;
{{hl2msg|byte|count|number of cappers (-1 for blocked)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_regenerate ===&lt;br /&gt;
{{begin-hl2msg|player_regenerate|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== update_status_item ===&lt;br /&gt;
{{begin-hl2msg|update_status_item|string}}&lt;br /&gt;
{{hl2msg|byte|index|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== stats_resetround ===&lt;br /&gt;
{{begin-hl2msg|stats_resetround|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scorestats_accumulated_update ===&lt;br /&gt;
{{begin-hl2msg|scorestats_accumulated_update|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scorestats_accumulated_reset ===&lt;br /&gt;
{{begin-hl2msg|scorestats_accumulated_reset|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_earned_local ===&lt;br /&gt;
{{begin-hl2msg|achievement_earned_local|string}}&lt;br /&gt;
{{hl2msg|short|achievement|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_healed ===&lt;br /&gt;
{{begin-hl2msg|player_healed|string}}&lt;br /&gt;
{{hl2msg|short|patient|}}&lt;br /&gt;
{{hl2msg|short|healer|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== building_healed ===&lt;br /&gt;
{{begin-hl2msg|building_healed|string}}&lt;br /&gt;
{{hl2msg|short|building|}}&lt;br /&gt;
{{hl2msg|short|healer|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== duel_status ===&lt;br /&gt;
{{begin-hl2msg|duel_status|string}}&lt;br /&gt;
{{hl2msg|short|killer|}}&lt;br /&gt;
{{hl2msg|short|score_type|}}&lt;br /&gt;
{{hl2msg|short|initiator|}}&lt;br /&gt;
{{hl2msg|short|target|}}&lt;br /&gt;
{{hl2msg|short|initiator_score|}}&lt;br /&gt;
{{hl2msg|short|target_score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== fish_notice ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;player_death&amp;quot;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|fish_notice|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== fish_notice__arm ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;fish_notice&amp;quot; (...clone of &amp;quot;player_death&amp;quot;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|fish_notice__arm|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== throwable_hit ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;player_death&amp;quot; with added counts}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|throwable_hit|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{hl2msg|short|totalhits|Number of hits his player has done}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pumpkin_lord_summoned ===&lt;br /&gt;
{{begin-hl2msg|pumpkin_lord_summoned|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pumpkin_lord_killed ===&lt;br /&gt;
{{begin-hl2msg|pumpkin_lord_killed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_summoned ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_killed ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_escape_warning ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_escaped ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_summoned ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_stunned ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_stunned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|player_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_killed ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_killed|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_killer ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_killer|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|player_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_escape_imminent ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_escape_imminent|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_escaped ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_escaped|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== npc_hurt ===&lt;br /&gt;
{{begin-hl2msg|npc_hurt|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{hl2msg|short|attacker_player|}}&lt;br /&gt;
{{hl2msg|short|weaponid|}}&lt;br /&gt;
{{hl2msg|short|damageamount|}}&lt;br /&gt;
{{hl2msg|bool|crit|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== controlpoint_timer_updated ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_timer_updated|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{hl2msg|float|time|time}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_start ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_start|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_cancel ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_cancel|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_success ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_success|string}}&lt;br /&gt;
{{hl2msg|byte|initiator_entindex|}}&lt;br /&gt;
{{hl2msg|byte|partner_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_bonuspoints ===&lt;br /&gt;
{{begin-hl2msg|player_bonuspoints|string}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{hl2msg|short|player_entindex|}}&lt;br /&gt;
{{hl2msg|short|source_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_upgraded ===&lt;br /&gt;
{{qnotice|This event appears to be missing an argument for which player upgraded}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_upgraded|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_buyback ===&lt;br /&gt;
{{begin-hl2msg|player_buyback|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|cost|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_used_powerup_bottle ===&lt;br /&gt;
{{begin-hl2msg|player_used_powerup_bottle|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|type|}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== christmas_gift_grab ===&lt;br /&gt;
{{begin-hl2msg|christmas_gift_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_killed_achievement_zone ===&lt;br /&gt;
{{begin-hl2msg|player_killed_achievement_zone|string}}&lt;br /&gt;
{{hl2msg|short|attacker|entindex of the attacker}}&lt;br /&gt;
{{hl2msg|short|victim|entindex of the victim}}&lt;br /&gt;
{{hl2msg|short|zone_id|type of area (0 for general, 1 for capture zone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== party_updated ===&lt;br /&gt;
{{begin-hl2msg|party_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lobby_updated ===&lt;br /&gt;
{{begin-hl2msg|lobby_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mission_update ===&lt;br /&gt;
{{begin-hl2msg|mvm_mission_update|string}}&lt;br /&gt;
{{hl2msg|short|class|}}&lt;br /&gt;
{{hl2msg|short|count|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== recalculate_holidays ===&lt;br /&gt;
{{begin-hl2msg|recalculate_holidays|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_currency_changed ===&lt;br /&gt;
{{begin-hl2msg|player_currency_changed|string}}&lt;br /&gt;
{{hl2msg|short|currency|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== doomsday_rocket_open ===&lt;br /&gt;
{{begin-hl2msg|doomsday_rocket_open|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team opened the rocket}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== remove_nemesis_relationship ===&lt;br /&gt;
{{begin-hl2msg|remove_nemesis_relationship|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player who should reset}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_wave ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_wave|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_all ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_all|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_all_advanced ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_all|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_quick_sentry_upgrade ===&lt;br /&gt;
{{begin-hl2msg|mvm_quick_sentry_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_tank_destroyed_by_players ===&lt;br /&gt;
{{begin-hl2msg|mvm_tank_destroyed_by_players|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_kill_robot_delivering_bomb ===&lt;br /&gt;
{{begin-hl2msg|mvm_kill_robot_delivering_bomb|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_pickup_currency ===&lt;br /&gt;
{{begin-hl2msg|mvm_pickup_currency|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|currency|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_carrier_killed ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_carrier_killed|string}}&lt;br /&gt;
{{hl2msg|short|level|upgrade level of the carrier}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sentrybuster_detonate ===&lt;br /&gt;
{{begin-hl2msg|mvm_sentrybuster_detonate|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the target playerr}}&lt;br /&gt;
{{hl2msg|float|det_x|origin of the sentry buster}}&lt;br /&gt;
{{hl2msg|float|det_y|}}&lt;br /&gt;
{{hl2msg|float|det_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_scout_marked_for_death ===&lt;br /&gt;
{{begin-hl2msg|mvm_scout_marked_for_death|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_medic_powerup_shared ===&lt;br /&gt;
{{begin-hl2msg|mvm_medic_powerup_shared|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_begin_wave ===&lt;br /&gt;
{{begin-hl2msg|mvm_begin_wave|string}}&lt;br /&gt;
{{hl2msg|short|wave_index|}}&lt;br /&gt;
{{hl2msg|short|max_waves|}}&lt;br /&gt;
{{hl2msg|short|advanced|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_wave_complete ===&lt;br /&gt;
{{begin-hl2msg|mvm_wave_complete|string}}&lt;br /&gt;
{{hl2msg|bool|advanced|is this an advanced popfile}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mission_complete ===&lt;br /&gt;
{{begin-hl2msg|mvm_mission_complete|string}}&lt;br /&gt;
{{hl2msg|string|mission|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_reset_by_player ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_reset_by_player|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_alarm_triggered ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_alarm_triggered|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_deploy_reset_by_player ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_deploy_reset_by_player|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_wave_failed ===&lt;br /&gt;
{{begin-hl2msg|mvm_wave_failed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_reset_stats ===&lt;br /&gt;
{{begin-hl2msg|mvm_reset_stats|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== damage_resisted ===&lt;br /&gt;
{{begin-hl2msg|damage_resisted|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_notify ===&lt;br /&gt;
{{begin-hl2msg|revive_player_notify|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|short|marker_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_stopped ===&lt;br /&gt;
{{begin-hl2msg|revive_player_stopped|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_complete ===&lt;br /&gt;
{{begin-hl2msg|revive_player_complete|string}}&lt;br /&gt;
{{hl2msg|short|entindex|entindex of the medic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_turned_to_ghost ===&lt;br /&gt;
{{begin-hl2msg|player_turned_to_ghost|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player who changed to a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== medigun_shield_blocked_damage ===&lt;br /&gt;
{{begin-hl2msg|medigun_shield_blocked_damage|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player using the shield}}&lt;br /&gt;
{{hl2msg|float|damage|damage that was blocked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_adv_wave_complete_no_gates ===&lt;br /&gt;
{{begin-hl2msg|mvm_adv_wave_complete_no_gates|string}}&lt;br /&gt;
{{hl2msg|short|index|wave index}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sniper_headshot_currency ===&lt;br /&gt;
{{begin-hl2msg|mvm_sniper_headshot_currency|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|currency|currency collected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mannhattan_pit ===&lt;br /&gt;
{{begin-hl2msg|mvm_mannhattan_pit|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== flag_carried_in_detection_zone ===&lt;br /&gt;
{{begin-hl2msg|flag_carried_in_detection_zone|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_adv_wave_killed_stun_radio ===&lt;br /&gt;
{{begin-hl2msg|mvm_adv_wave_killed_stun_radio|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_directhit_stun ===&lt;br /&gt;
{{begin-hl2msg|player_directhit_stun|string}}&lt;br /&gt;
{{hl2msg|short|attacker|entindex of the attacker}}&lt;br /&gt;
{{hl2msg|short|victim|entindex of the victim}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sentrybuster_killed ===&lt;br /&gt;
{{begin-hl2msg|mvm_sentrybuster_killed|string}}&lt;br /&gt;
{{hl2msg|short|sentry_buster|entindex}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrades_file_changed ===&lt;br /&gt;
{{begin-hl2msg|upgrades_file_changed|string}}&lt;br /&gt;
{{hl2msg|string|path|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_team_points_changed ===&lt;br /&gt;
{{begin-hl2msg|rd_team_points_changed|string}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|byte|method|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_rules_state_changed ===&lt;br /&gt;
{{begin-hl2msg|rd_rules_state_changed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_robot_killed ===&lt;br /&gt;
{{qnotice|this extends the original player_death}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|rd_robot_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_robot_impact ===&lt;br /&gt;
{{begin-hl2msg|rd_robot_impact|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|float|impulse_x|}}&lt;br /&gt;
{{hl2msg|float|impulse_y|}}&lt;br /&gt;
{{hl2msg|float|impulse_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_pre_round_time_left ===&lt;br /&gt;
{{begin-hl2msg|teamplay_pre_round_time_left|string}}&lt;br /&gt;
{{hl2msg|short|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== parachute_deploy ===&lt;br /&gt;
{{begin-hl2msg|parachute_deploy|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== parachute_holster ===&lt;br /&gt;
{{begin-hl2msg|parachute_holster|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== kill_refills_meter ===&lt;br /&gt;
{{begin-hl2msg|kill_refills_meter|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rps_taunt_event ===&lt;br /&gt;
{{begin-hl2msg|rps_taunt_event|string}}&lt;br /&gt;
{{hl2msg|short|winner|entindex of the winning player}}&lt;br /&gt;
{{hl2msg|byte|winner_rps|winner's selection}}&lt;br /&gt;
{{hl2msg|short|loser|entindex of the losing player}}&lt;br /&gt;
{{hl2msg|byte|loser_rps|loser's selection}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== conga_kill ===&lt;br /&gt;
{{begin-hl2msg|kill_refills_meter|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_initial_spawn ===&lt;br /&gt;
{{begin-hl2msg|player_initial_spawn|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== competitive_victory ===&lt;br /&gt;
{{begin-hl2msg|competitive_victory|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== competitive_skillrating_update ===&lt;br /&gt;
{{begin-hl2msg|competitive_skillrating_update|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|rating|skillrating}}&lt;br /&gt;
{{hl2msg|short|delta|skillrating adjustment}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== minigame_win ===&lt;br /&gt;
{{begin-hl2msg|minigame_win|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team won the minigame}}&lt;br /&gt;
{{hl2msg|byte|type|what type of minigame was won}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== sentry_on_go_active ===&lt;br /&gt;
{{begin-hl2msg|sentry_on_go_active|string}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== duck_xp_level_up ===&lt;br /&gt;
{{begin-hl2msg|duck_xp_level_up|string}}&lt;br /&gt;
{{hl2msg|short|level|leveled up to what}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== questlog_opened ===&lt;br /&gt;
{{begin-hl2msg|questlog_opened|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== schema_updated ===&lt;br /&gt;
{{begin-hl2msg|schema_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== localplayer_pickup_weapon ===&lt;br /&gt;
{{begin-hl2msg|localplayer_pickup_weapon|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_player_score_points ===&lt;br /&gt;
{{begin-hl2msg|rd_player_score_points|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|method|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== demoman_det_stickies ===&lt;br /&gt;
{{begin-hl2msg|demoman_det_stickies|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the detonating player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== quest_objective_completed ===&lt;br /&gt;
{{qnotice|For prediction}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|quest_objective_completed|string}}&lt;br /&gt;
{{hl2msg|long|quest_item_id_low|}}&lt;br /&gt;
{{hl2msg|long|quest_item_id_hi|}}&lt;br /&gt;
{{hl2msg|long|quest_objective_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_score_changed ===&lt;br /&gt;
{{begin-hl2msg|player_score_changed|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|short|delta|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== killed_capping_player ===&lt;br /&gt;
{{begin-hl2msg|killed_capping_player|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point}}&lt;br /&gt;
{{hl2msg|byte|killer|index of the killer}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the victim}}&lt;br /&gt;
{{hl2msg|byte|assister|index of the assister}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== environmental_death ===&lt;br /&gt;
{{begin-hl2msg|environmental_death|string}}&lt;br /&gt;
{{hl2msg|byte|killer|index of the killer}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the victim}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== projectile_direct_hit ===&lt;br /&gt;
{{begin-hl2msg|projectile_direct_hit|string}}&lt;br /&gt;
{{hl2msg|byte|attacker|index of the player who shot the projectile}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the player who got direct-ht}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_get ===&lt;br /&gt;
{{begin-hl2msg|pass_get|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_score ===&lt;br /&gt;
{{begin-hl2msg|pass_score|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_free ===&lt;br /&gt;
{{begin-hl2msg|pass_free|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_pass_caught ===&lt;br /&gt;
{{begin-hl2msg|pass_pass_caught|string}}&lt;br /&gt;
{{hl2msg|short|passer|}}&lt;br /&gt;
{{hl2msg|short|catcher|}}&lt;br /&gt;
{{hl2msg|float|dist|}}&lt;br /&gt;
{{hl2msg|float|duration|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_ball_stolen ===&lt;br /&gt;
{{begin-hl2msg|pass_ball_stolen|string}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_ball_blocked ===&lt;br /&gt;
{{begin-hl2msg|pass_ball_blocked|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|blocker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Events&amp;diff=10052</id>
		<title>Team Fortress 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Events&amp;diff=10052"/>
		<updated>2015-11-14T07:51:32Z</updated>

		<summary type="html">&lt;p&gt;Darkid: That was hard to find. Let's add some keywords to make it easier on the next guy.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
The following events can also be found in '''tf\tf2_misc_dir\resource\modevents.res'''&lt;br /&gt;
&lt;br /&gt;
=== intro_finish ===&lt;br /&gt;
{{begin-hl2msg|intro_finish|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== intro_nextcamera ===&lt;br /&gt;
{{begin-hl2msg|intro_nextcamera|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_chat ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_chat|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who said the thing}}&lt;br /&gt;
{{hl2msg|string|text|Their chat message}}&lt;br /&gt;
{{hl2msg|short|type|What sort of message?  (Some &amp;quot;system&amp;quot; messages are sent by lobby leader)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_member_join ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_member_join|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who joined}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mm_lobby_member_leave ===&lt;br /&gt;
{{begin-hl2msg|mm_lobby_member_leave|string}}&lt;br /&gt;
{{hl2msg|string|steamid|steamID (64-bit value converted to string) of user who joined}}&lt;br /&gt;
{{hl2msg|long|flags|Bitfield of EChatMemberStateChange flags describing who entered or left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== player_changeclass ===&lt;br /&gt;
{{qnotice|When a player changes their class}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_changeclass|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who changed class}}&lt;br /&gt;
{{hl2msg|short|class|class that they changed to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|When a player dies}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|dominated, assister_dominated, revenge, assister_revenge, first_blood, and feign_death no longer exist in this event }}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|short|playerpenetratecount|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{hl2msg|short|kill_streak_total|Kill streak count (level)}}&lt;br /&gt;
{{hl2msg|short|kill_streak_wep|Kill streak for killing weapon}}&lt;br /&gt;
{{hl2msg|short|kill_streak_assist|Kill streak for assister count}}&lt;br /&gt;
{{hl2msg|short|kill_streak_victim|Victims kill streak}}&lt;br /&gt;
{{hl2msg|short|ducks_streaked|Duck streak increment from this kill}}&lt;br /&gt;
{{hl2msg|short|duck_streak_total|Duck streak count for attacker}}&lt;br /&gt;
{{hl2msg|short|duck_streak_assist|Duck streak count for assister}}&lt;br /&gt;
{{hl2msg|short|duck_streak_victim|(former) duck streak count for victim}}&lt;br /&gt;
{{hl2msg|bool|rocket_jump|was the victim rocket jumping}}&lt;br /&gt;
{{hl2msg|short|weapon_def_index|item def index of weapon killer used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tf_map_time_remaining ===&lt;br /&gt;
{{begin-hl2msg|tf_map_time_remaining|string}}&lt;br /&gt;
{{hl2msg|long|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tf_game_over ===&lt;br /&gt;
{{qnotice|When a tf game ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tf_game_over|string}}&lt;br /&gt;
{{hl2msg|string|reason|why the game is over ( timelimit, winlimit )}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== ctf_flag_captured ===&lt;br /&gt;
{{qnotice|When a flag is captured by a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ctf_flag_captured|string}}&lt;br /&gt;
{{hl2msg|short|capping_team|}}&lt;br /&gt;
{{hl2msg|short|capping_team_score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_initialized ===&lt;br /&gt;
{{qnotice|When a player begins to capture a control point}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_initialized|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updateimages ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updateimages|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updatelayout ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updatelayout|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updatecapping ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updatecapping|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_updateowner ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_updateowner|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_starttouch ===&lt;br /&gt;
{{qnotice|When a player enters a capture point zone}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_starttouch|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|area|index of the control point area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_endtouch ===&lt;br /&gt;
{{qnotice|When a player leaves a capture point zone}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|controlpoint_endtouch|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|area|index of the control point area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_pulse_element ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_pulse_element|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_fake_capture ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_fake_capture|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|int_data|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_fake_capture_mult ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_fake_capture_mult|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|int_data|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_selected ===&lt;br /&gt;
{{qnotice|When a round is selected.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_selected|string}}&lt;br /&gt;
{{hl2msg|string|round|name of the round selected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_start ===&lt;br /&gt;
{{qnotice|round restart}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|teamplay_round_start|string}}&lt;br /&gt;
{{hl2msg|bool|full_reset|is this a full reset of the map}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_active ===&lt;br /&gt;
{{qnotice|called when round is active, players can move}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|teamplay_round_active|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_begins ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_begins|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_ends ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_ends|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_waiting_abouttoend ===&lt;br /&gt;
{{qnotice|When the &amp;quot;waiting for players&amp;quot; pre-round is about to end}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_waiting_abouttoend|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_restart_round ===&lt;br /&gt;
{{qnotice|When a round is restarted}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_restart_round|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_ready_restart ===&lt;br /&gt;
{{begin-hl2msg|teamplay_ready_restart|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_restart_seconds ===&lt;br /&gt;
{{begin-hl2msg|teamplay_round_restart_seconds|string}}&lt;br /&gt;
{{hl2msg|short|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_team_ready ===&lt;br /&gt;
{{begin-hl2msg|teamplay_team_ready|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team is ready}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_win ===&lt;br /&gt;
{{qnotice|When a team wins a round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_win|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team won the round}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
&lt;br /&gt;
{{hl2msg|short|full_round|was this a full round or a mini-round}}&lt;br /&gt;
{{hl2msg|float|round_time|elapsed time of this round}}&lt;br /&gt;
{{hl2msg|short|losing_team_num_caps|# of caps this round by losing team}}&lt;br /&gt;
{{hl2msg|byte|was_sudden_death|did a team win this after entering sudden death}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_update_timer ===&lt;br /&gt;
{{begin-hl2msg|teamplay_update_timer|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_round_stalemate ===&lt;br /&gt;
{{qnotice|When a game ends in a stalemate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_round_stalemate|string}}&lt;br /&gt;
{{hl2msg|byte|reason|why the stalemate is occuring}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_overtime_begin ===&lt;br /&gt;
{{qnotice|When an overtime round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_overtime_begin|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_overtime_end ===&lt;br /&gt;
{{qnotice|When an overtime round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_overtime_end|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_suddendeath_begin ===&lt;br /&gt;
{{qnotice|When a sudden death round begins}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_suddendeath_begin|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_suddendeath_end ===&lt;br /&gt;
{{qnotice|When a sudden death round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_suddendeath_end|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_game_over ===&lt;br /&gt;
{{qnotice|When a teamplay game ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_game_over|string}}&lt;br /&gt;
{{hl2msg|string|reason|why the game is over ( timelimit, winlimit )}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_map_time_remaining ===&lt;br /&gt;
{{begin-hl2msg|teamplay_map_time_remaining|string}}&lt;br /&gt;
{{hl2msg|short|seconds|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_broadcast_audio ===&lt;br /&gt;
{{qnotice|Broadcast an audio file by game_sound name. Audio files are documented in the game_sound files inside tf2_misc_dir.vpk.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_broadcast_audio|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team should hear the broadcast. -1 will make everyone hear it.}}&lt;br /&gt;
{{hl2msg|string|sound|sound to play}}&lt;br /&gt;
{{hl2msg|short|additional_flags|additional sound flags to pass through to sound system}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_timer_flash ===&lt;br /&gt;
{{begin-hl2msg|teamplay_timer_flash|string}}&lt;br /&gt;
{{hl2msg|short|time_remaining|how many seconds until the round ends}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_timer_time_added ===&lt;br /&gt;
{{begin-hl2msg|teamplay_timer_time_added|string}}&lt;br /&gt;
{{hl2msg|short|timer|entindex of the timer}}&lt;br /&gt;
{{hl2msg|short|seconds_added|how many seconds were added to the round timer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_startcapture ===&lt;br /&gt;
{{qnotice|When a point is beginning to be captured}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_point_startcapture|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{hl2msg|byte|capteam|which team is capping}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone capping}}&lt;br /&gt;
{{hl2msg|float|captime|time between when this cap started and when the point last changed hands}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_captured ===&lt;br /&gt;
{{qnotice|When a control point is captured by a team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_point_captured|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point that was captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team capped}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_locked ===&lt;br /&gt;
{{begin-hl2msg|teamplay_point_locked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_point_unlocked ===&lt;br /&gt;
{{begin-hl2msg|teamplay_point_unlocked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point being captured}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|team|which team currently owns the point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_capture_broken ===&lt;br /&gt;
{{begin-hl2msg|teamplay_capture_broken|string}}&lt;br /&gt;
{{hl2msg|byte|cp|}}&lt;br /&gt;
{{hl2msg|string|cpname|}}&lt;br /&gt;
{{hl2msg|float|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_capture_blocked ===&lt;br /&gt;
{{qnotice|When a player blocks the capture of a control point}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_capture_blocked|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point that was blocked}}&lt;br /&gt;
{{hl2msg|string|cpname|name of the point}}&lt;br /&gt;
{{hl2msg|byte|blocker|index of the player that blocked the cap}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the player that died, causing the block}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_flag_event ===&lt;br /&gt;
{{begin-hl2msg|teamplay_flag_event|string}}&lt;br /&gt;
{{hl2msg|short|player|player this event involves}}&lt;br /&gt;
{{hl2msg|short|carrier|the carrier if needed}}&lt;br /&gt;
{{hl2msg|short|eventtype|pick up, capture, defend, dropped}}&lt;br /&gt;
{{hl2msg|byte|home|whether or not the flag was home (only set for TF_FLAGEVENT_PICKUP)}}&lt;br /&gt;
{{hl2msg|byte|team|which team the flag belongs to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_win_panel ===&lt;br /&gt;
{{qnotice|When the win-game panel is displayed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
{{hl2msg|short|blue_score|red team score}}&lt;br /&gt;
{{hl2msg|short|red_score|blue team score}}&lt;br /&gt;
{{hl2msg|short|blue_score_prev|previous red team score}}&lt;br /&gt;
{{hl2msg|short|red_score_prev|previous blue team score}}&lt;br /&gt;
{{hl2msg|short|round_complete|is this a complete round, or the end of a mini-round}}&lt;br /&gt;
{{hl2msg|short|rounds_remaining|# of rounds remaining for wining team, if mini-round}}&lt;br /&gt;
{{hl2msg|short|player_1|}}&lt;br /&gt;
{{hl2msg|short|player_1_points|}}&lt;br /&gt;
{{hl2msg|short|player_2|}}&lt;br /&gt;
{{hl2msg|short|player_2_points|}}&lt;br /&gt;
{{hl2msg|short|player_3|}}&lt;br /&gt;
{{hl2msg|short|player_3_points|}}&lt;br /&gt;
{{hl2msg|short|killstreak_player_1|}}&lt;br /&gt;
{{hl2msg|short|killstreak_player_1_count|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_teambalanced_player ===&lt;br /&gt;
{{qnotice|When a player is balanced to another team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_teambalanced_player|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|byte|team|which team the player is being moved to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teamplay_setup_finished ===&lt;br /&gt;
{{qnotice|When the setup round ends}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_setup_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_alert ===&lt;br /&gt;
{{qnotice|When an alert is shown to a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|teamplay_alert|string}}&lt;br /&gt;
{{hl2msg|short|alert_type|which alert type is this (scramble, etc)?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== training_complete ===&lt;br /&gt;
{{begin-hl2msg|training_complete|string}}&lt;br /&gt;
{{hl2msg|string|next_map|next map (if any)}}&lt;br /&gt;
{{hl2msg|string|map|the name of the map this screen is on.}}&lt;br /&gt;
{{hl2msg|string|text|text to show}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== show_freezepanel ===&lt;br /&gt;
{{qnotice|When the death-snapshot panel is shown}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|show_freezepanel|string}}&lt;br /&gt;
{{hl2msg|short|killer|entindex of the killer entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hide_freezepanel ===&lt;br /&gt;
{{qnotice|When the death-snapshot panel is hidden}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hide_freezepanel|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== freezecam_started ===&lt;br /&gt;
{{qnotice|When a player enters the death-snapshot view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|freezecam_started|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changeteam ===&lt;br /&gt;
{{qnotice|When a LAN player changes team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changeteam|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_score_changed ===&lt;br /&gt;
{{begin-hl2msg|localplayer_score_changed|string}}&lt;br /&gt;
{{hl2msg|short|score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changeclass ===&lt;br /&gt;
{{qnotice|When a LAN player changes class}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changeclass|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_respawn ===&lt;br /&gt;
{{qnotice|When a LAN player respawns}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_respawn|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== building_info_changed ===&lt;br /&gt;
{{begin-hl2msg|building_info_changed|string}}&lt;br /&gt;
{{hl2msg|byte|building_type|}}&lt;br /&gt;
{{hl2msg|byte|object_mode|}}&lt;br /&gt;
{{hl2msg|byte|remove|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_changedisguise ===&lt;br /&gt;
{{qnotice|When a LAN player changes their disguise as a spy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|localplayer_changedisguise|string}}&lt;br /&gt;
{{hl2msg|bool|disguised|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_account_changed ===&lt;br /&gt;
{{begin-hl2msg|player_account_changed|string}}&lt;br /&gt;
{{hl2msg|short|old_value|}}&lt;br /&gt;
{{hl2msg|short|new_value|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== spy_pda_reset ===&lt;br /&gt;
{{begin-hl2msg|spy_pda_reset|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== flagstatus_update ===&lt;br /&gt;
{{begin-hl2msg|flagstatus_update|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player who now has the flag}}&lt;br /&gt;
{{hl2msg|long|entindex|ent index of flag}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stats_updated ===&lt;br /&gt;
{{qnotice|When a players stats are updated}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_stats_updated|string}}&lt;br /&gt;
{{hl2msg|bool|forceupload|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== playing_commentary ===&lt;br /&gt;
{{qnotice|When a commentary is being played}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|playing_commentary|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_chargedeployed ===&lt;br /&gt;
{{qnotice|When an uber is deployed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_chargedeployed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of medic who deployed charge}}&lt;br /&gt;
{{hl2msg|short|targetid|user ID of who the medic charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_builtobject ===&lt;br /&gt;
{{qnotice|When a player builds an object}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_builtobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the builder}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|index of the object}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_upgradedobject ===&lt;br /&gt;
{{begin-hl2msg|player_upgradedobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{hl2msg|bool|isbuilder|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_carryobject ===&lt;br /&gt;
{{begin-hl2msg|player_carryobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_dropobject ===&lt;br /&gt;
{{begin-hl2msg|player_dropobject|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_removed ===&lt;br /&gt;
{{begin-hl2msg|object_removed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the object owner}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object removed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object removed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_destroyed ===&lt;br /&gt;
{{qnotice|When a player destroys an object}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|object_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|id of the weapon used}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object destroyed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object destroyed}}&lt;br /&gt;
{{hl2msg|bool|was_building|object was being built when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== object_detonated ===&lt;br /&gt;
{{begin-hl2msg|object_detonated|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the object owner}}&lt;br /&gt;
{{hl2msg|short|objecttype|type of object removed}}&lt;br /&gt;
{{hl2msg|short|index|index of the object removed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|When a player earns an achievement}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tournament_stateupdate ===&lt;br /&gt;
{{begin-hl2msg|tournament_stateupdate|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|bool|namechange|}}&lt;br /&gt;
{{hl2msg|short|readystate|}}&lt;br /&gt;
{{hl2msg|string|newname|players new name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== tournament_enablecountdown ===&lt;br /&gt;
{{begin-hl2msg|tournament_enablecountdown|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_calledformedic ===&lt;br /&gt;
{{qnotice|When a player calls for a medic. This does not appear to fire for the server.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_calledformedic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_askedforball ===&lt;br /&gt;
{{qnotice|When a player asks for the ball in PASStime.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_askedforball|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== localplayer_becameobserver ===&lt;br /&gt;
{{begin-hl2msg|localplayer_becameobserver|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_ignited_inv ===&lt;br /&gt;
{{qnotice|sent when a player is ignited by a pyro who is being invulned, only to the medic who's doing the invulning}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_ignited_inv|string}}&lt;br /&gt;
{{hl2msg|byte|pyro_entindex|entindex of the pyro who ignited the victim}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player ignited by the pyro}}&lt;br /&gt;
{{hl2msg|byte|medic_entindex|entindex of the medic releasing the invuln}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_ignited ===&lt;br /&gt;
{{qnotice|sent when a player is ignited, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_ignited|string}}&lt;br /&gt;
{{hl2msg|byte|pyro_entindex|entindex of the pyro who ignited the victim}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player ignited by the pyro}}&lt;br /&gt;
{{hl2msg|byte|weaponid|weaponid of the weapon used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_extinguished ===&lt;br /&gt;
{{qnotice|sent when a burning player is extinguished by a medic}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_extinguished|string}}&lt;br /&gt;
{{hl2msg|byte|victim|entindex of the player that was extinguished}}&lt;br /&gt;
{{hl2msg|byte|healer|entindex of the player who did the extinguishing}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_teleported ===&lt;br /&gt;
{{qnotice|Sent when a player is teleported}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_teleported|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player}}&lt;br /&gt;
{{hl2msg|short|builderid|userid of the player who built the teleporter}}&lt;br /&gt;
{{hl2msg|float|dist|distance the player was teleported}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healedmediccall ===&lt;br /&gt;
{{qnotice|local player heals someone who called for medic.}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_healedmediccall|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of person who got healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_chargeready ===&lt;br /&gt;
{{qnotice|local player has full medic charge}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|localplayer_chargeready|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_winddown ===&lt;br /&gt;
{{qnotice|local player minigun winddown}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|localplayer_winddown|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_invulned ===&lt;br /&gt;
{{qnotice|Send when a player is made invulnerable}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_invulned|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|medic_userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== escort_speed ===&lt;br /&gt;
{{begin-hl2msg|escort_speed|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|byte|speed|}}&lt;br /&gt;
{{hl2msg|byte|players|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== escort_progress ===&lt;br /&gt;
{{begin-hl2msg|escort_progress|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|float|progress|}}&lt;br /&gt;
{{hl2msg|bool|reset|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== escort_recede ===&lt;br /&gt;
{{begin-hl2msg|escort_recede|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team}}&lt;br /&gt;
{{hl2msg|float|recedetime|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== gameui_activated ===&lt;br /&gt;
{{begin-hl2msg|gameui_activated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== gameui_hidden ===&lt;br /&gt;
{{begin-hl2msg|gameui_hidden|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_escort_score ===&lt;br /&gt;
{{begin-hl2msg|player_escort_score|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|byte|points|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healonhit ===&lt;br /&gt;
{{begin-hl2msg|player_healonhit|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{hl2msg|byte|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stealsandvich ===&lt;br /&gt;
{{begin-hl2msg|player_stealsandvich|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|target|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== show_class_layout ===&lt;br /&gt;
{{begin-hl2msg|show_class_layout|string}}&lt;br /&gt;
{{hl2msg|bool|show|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== show_vs_panel ===&lt;br /&gt;
{{begin-hl2msg|show_vs_panel|string}}&lt;br /&gt;
{{hl2msg|bool|show|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_damaged ===&lt;br /&gt;
{{begin-hl2msg|player_damaged|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{hl2msg|long|type|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{hl2msg|short|damageamount|}}&lt;br /&gt;
{{hl2msg|short|custom|}}&lt;br /&gt;
{{hl2msg|bool|showdisguisedcrit|if our attribute specifically crits disguised enemies we need to show it on the client}}&lt;br /&gt;
{{hl2msg|bool|crit|}}&lt;br /&gt;
{{hl2msg|bool|minicrit|}}&lt;br /&gt;
{{hl2msg|bool|allseecrit|}}&lt;br /&gt;
{{hl2msg|short|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|bonuseffect|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== arena_player_notification ===&lt;br /&gt;
{{begin-hl2msg|arena_player_notification|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|byte|message|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_match_maxstreak ===&lt;br /&gt;
{{begin-hl2msg|arena_match_maxstreak|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|byte|streak|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_round_start ===&lt;br /&gt;
{{qnotice|called when round is active, players can move}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|arena_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arena_win_panel ===&lt;br /&gt;
{{begin-hl2msg|arena_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won - 1 (someone capped) 2 (entire team was killed)}}&lt;br /&gt;
{{hl2msg|string|cappers|string where each character is a player index of someone that capped}}&lt;br /&gt;
{{hl2msg|short|flagcaplimit|if win reason was flag cap limit, the value of the flag cap limit}}&lt;br /&gt;
{{hl2msg|short|blue_score|red team score}}&lt;br /&gt;
{{hl2msg|short|red_score|blue team score}}&lt;br /&gt;
{{hl2msg|short|blue_score_prev|previous red team score}}&lt;br /&gt;
{{hl2msg|short|red_score_prev|previous blue team score}}&lt;br /&gt;
{{hl2msg|short|round_complete|is this a complete round, or the end of a mini-round}}&lt;br /&gt;
{{hl2msg|short|player_1|}}&lt;br /&gt;
{{hl2msg|short|player_1_damage|}}&lt;br /&gt;
{{hl2msg|short|player_1_healing|}}&lt;br /&gt;
{{hl2msg|short|player_1_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_1_kills|}}&lt;br /&gt;
{{hl2msg|short|player_2|}}&lt;br /&gt;
{{hl2msg|short|player_2_damage|}}&lt;br /&gt;
{{hl2msg|short|player_2_healing|}}&lt;br /&gt;
{{hl2msg|short|player_2_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_2_kills|}}&lt;br /&gt;
{{hl2msg|short|player_3|}}&lt;br /&gt;
{{hl2msg|short|player_3_damage|}}&lt;br /&gt;
{{hl2msg|short|player_3_healing|}}&lt;br /&gt;
{{hl2msg|short|player_3_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_3_kills|}}&lt;br /&gt;
{{hl2msg|short|player_4|}}&lt;br /&gt;
{{hl2msg|short|player_4_damage|}}&lt;br /&gt;
{{hl2msg|short|player_4_healing|}}&lt;br /&gt;
{{hl2msg|short|player_4_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_4_kills|}}&lt;br /&gt;
{{hl2msg|short|player_5|}}&lt;br /&gt;
{{hl2msg|short|player_5_damage|}}&lt;br /&gt;
{{hl2msg|short|player_5_healing|}}&lt;br /&gt;
{{hl2msg|short|player_5_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_5_kills|}}&lt;br /&gt;
{{hl2msg|short|player_6|}}&lt;br /&gt;
{{hl2msg|short|player_6_damage|}}&lt;br /&gt;
{{hl2msg|short|player_6_healing|}}&lt;br /&gt;
{{hl2msg|short|player_6_lifetime|}}&lt;br /&gt;
{{hl2msg|short|player_6_kills|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pve_win_panel ===&lt;br /&gt;
{{qnotice|MvM Win Panel}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|pve_win_panel|string}}&lt;br /&gt;
{{hl2msg|byte|panel_style|for client to determine layout}}&lt;br /&gt;
{{hl2msg|byte|winning_team|}}&lt;br /&gt;
{{hl2msg|byte|winreason|the reason the team won}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== air_dash ===&lt;br /&gt;
{{qnotice|Called when a scout Performs Double Jump}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|air_dash|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== landed ===&lt;br /&gt;
{{begin-hl2msg|landed|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_damage_dodged ===&lt;br /&gt;
{{qnotice|When a Player Evades Damage with Bonk}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_damage_dodged|string}}&lt;br /&gt;
{{hl2msg|short|damage|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_stunned ===&lt;br /&gt;
{{qnotice|When a Player is Stunned}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_stunned|string}}&lt;br /&gt;
{{hl2msg|short|stunner|}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|bool|victim_capping|}}&lt;br /&gt;
{{hl2msg|bool|big_stun|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== scout_grand_slam ===&lt;br /&gt;
{{qnotice|When a Player is Killed by the Scout Taunt}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scout_grand_slam|string}}&lt;br /&gt;
{{hl2msg|short|scout_id|}}&lt;br /&gt;
{{hl2msg|short|target_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== scout_slamdoll_landed ===&lt;br /&gt;
{{begin-hl2msg|scout_slamdoll_landed|string}}&lt;br /&gt;
{{hl2msg|short|target_index|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== arrow_impact ===&lt;br /&gt;
{{qnotice|When a player is hit by a Sniper's Huntsman arrow or Medic's Crusader's Crossbow arrow}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|arrow_impact|string}}&lt;br /&gt;
{{hl2msg|short|attachedEntity|}}&lt;br /&gt;
{{hl2msg|short|shooter|}}&lt;br /&gt;
{{hl2msg|short|boneIndexAttached|}}&lt;br /&gt;
{{hl2msg|float|bonePositionX|}}&lt;br /&gt;
{{hl2msg|float|bonePositionY|}}&lt;br /&gt;
{{hl2msg|float|bonePositionZ|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesX|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesY|}}&lt;br /&gt;
{{hl2msg|float|boneAnglesZ|}}&lt;br /&gt;
{{hl2msg|short|projectileType|}}&lt;br /&gt;
{{hl2msg|bool|isCrit|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_jarated ===&lt;br /&gt;
{{qnotice|sent when a player is jarated, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|player_jarated|string}}&lt;br /&gt;
{{hl2msg|byte|thrower_entindex|entindex of the player who threw the jarate}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player receiving it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_jarated_fade ===&lt;br /&gt;
{{qnotice|sent when a player is jarated, only to the two players involved}}&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_jarated_fade|string}}&lt;br /&gt;
{{hl2msg|byte|thrower_entindex|entindex of the player who threw the jarate}}&lt;br /&gt;
{{hl2msg|byte|victim_entindex|entindex of the player receiving it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_shield_blocked ===&lt;br /&gt;
{{qnotice|Sent when a Razorback blocks a backstab}}&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|player_shield_blocked|string}}&lt;br /&gt;
{{hl2msg|byte|attacker_entindex|entindex of the player who attacked}}&lt;br /&gt;
{{hl2msg|byte|blocker_entindex|entindex of the player whose shield blocked the stab}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_pinned ===&lt;br /&gt;
{{qnotice|When a player is pinned to a wall}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_pinned|string}}&lt;br /&gt;
{{hl2msg|byte|pinned|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_healedbymedic ===&lt;br /&gt;
{{begin-hl2msg|player_healedbymedic|string}}&lt;br /&gt;
{{hl2msg|byte|medic|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_spawn ===&lt;br /&gt;
{{begin-hl2msg|player_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who spawned}}&lt;br /&gt;
{{hl2msg|short|team|team they spawned on}}&lt;br /&gt;
{{hl2msg|short|class|class they spawned as}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_sapped_object ===&lt;br /&gt;
{{begin-hl2msg|player_sapped_object|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the spy}}&lt;br /&gt;
{{hl2msg|short|ownerid|user ID of the building owner}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{hl2msg|short|sapperid|index of the sapper}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== item_found ===&lt;br /&gt;
{{qnotice|When a player finds an item}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_found|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|byte|quality|quality of the item}}&lt;br /&gt;
{{hl2msg|byte|method|method by which we acquired the item (TODO: Show which numbers represent which method of finding.)}}&lt;br /&gt;
{{hl2msg|long|itemdef|the item definition index}}&lt;br /&gt;
{{hl2msg|byte|isstrange|}}&lt;br /&gt;
{{hl2msg|long|isunusual|}}&lt;br /&gt;
{{hl2msg|float|wear|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== show_annotation ===&lt;br /&gt;
{{begin-hl2msg|show_annotation|string}}&lt;br /&gt;
{{hl2msg|float|worldPosX|}}&lt;br /&gt;
{{hl2msg|float|worldPosY|}}&lt;br /&gt;
{{hl2msg|float|worldPosZ|}}&lt;br /&gt;
{{hl2msg|float|worldNormalX|}}&lt;br /&gt;
{{hl2msg|float|worldNormalY|}}&lt;br /&gt;
{{hl2msg|float|worldNormalZ|}}&lt;br /&gt;
{{hl2msg|long|id|}}&lt;br /&gt;
{{hl2msg|string|text|name (unlocalized)}}&lt;br /&gt;
{{hl2msg|float|lifetime|}}&lt;br /&gt;
{{hl2msg|long|visibilityBitfield|bitfield of the players that can see this}}&lt;br /&gt;
{{hl2msg|long|follow_entindex|if this is set, follow this entity}}&lt;br /&gt;
{{hl2msg|bool|show_distance|}}&lt;br /&gt;
{{hl2msg|string|play_sound|}}&lt;br /&gt;
{{hl2msg|bool|show_effect|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hide_annotation ===&lt;br /&gt;
{{begin-hl2msg|hide_annotation|string}}&lt;br /&gt;
{{hl2msg|long|id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== post_inventory_application ===&lt;br /&gt;
{{qnotice|sent when a player gets a whole new set of items, aka touches a resupply locker / respawn cabinet}}&amp;lt;br&amp;gt; &lt;br /&gt;
{{begin-hl2msg|post_inventory_application|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== controlpoint_unlock_updated ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_unlock_updated|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{hl2msg|float|time|time}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== deploy_buff_banner ===&lt;br /&gt;
{{begin-hl2msg|deploy_buff_banner|string}}&lt;br /&gt;
{{hl2msg|byte|buff_type|type of buff (skin index)}}&lt;br /&gt;
{{hl2msg|short|buff_owner|user ID of the person who gets the banner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_buff ===&lt;br /&gt;
{{begin-hl2msg|player_buff|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player the buff is being applied to}}&lt;br /&gt;
{{hl2msg|short|buff_owner|user ID of the player with the banner}}&lt;br /&gt;
{{hl2msg|byte|buff_type|type of buff}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== medic_death ===&lt;br /&gt;
{{qnotice|When a medic dies}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|medic_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|healing|amount healed in this life}}&lt;br /&gt;
{{hl2msg|bool|charged|had a full ubercharge?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== overtime_nag ===&lt;br /&gt;
{{begin-hl2msg|overtime_nag|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== teams_changed ===&lt;br /&gt;
{{begin-hl2msg|teams_changed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== halloween_pumpkin_grab ===&lt;br /&gt;
{{begin-hl2msg|halloween_pumpkin_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rocket_jump ===&lt;br /&gt;
{{begin-hl2msg|rocket_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|playsound|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== rocket_jump_landed ===&lt;br /&gt;
{{begin-hl2msg|rocket_jump_landed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== sticky_jump ===&lt;br /&gt;
{{begin-hl2msg|sticky_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|playsound|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== sticky_jump_landed ===&lt;br /&gt;
{{begin-hl2msg|sticky_jump_landed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== medic_defended ===&lt;br /&gt;
{{begin-hl2msg|medic_defended|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|medic|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== localplayer_healed ===&lt;br /&gt;
{{begin-hl2msg|localplayer_healed|string}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_destroyed_pipebomb ===&lt;br /&gt;
{{begin-hl2msg|player_destroyed_pipebomb|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== object_deflected ===&lt;br /&gt;
{{begin-hl2msg|object_deflected|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who deflected the object}}&lt;br /&gt;
{{hl2msg|short|ownerid|owner of the object}}&lt;br /&gt;
{{hl2msg|short|weaponid|weapon id (0 means the player in ownerid was pushed)}}&lt;br /&gt;
{{hl2msg|byte|object_entindex|entindex of the object that got deflected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_mvp ===&lt;br /&gt;
{{begin-hl2msg|player_mvp|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== raid_spawn_mob ===&lt;br /&gt;
{{begin-hl2msg|raid_spawn_mob|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== raid_spawn_squad ===&lt;br /&gt;
{{begin-hl2msg|raid_spawn_squad|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== path_track_passed ===&lt;br /&gt;
{{begin-hl2msg|path_track_passed|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the node being passed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== num_cappers_changed ===&lt;br /&gt;
{{begin-hl2msg|num_cappers_changed|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the trigger}}&lt;br /&gt;
{{hl2msg|byte|count|number of cappers (-1 for blocked)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== player_regenerate ===&lt;br /&gt;
{{begin-hl2msg|player_regenerate|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== update_status_item ===&lt;br /&gt;
{{begin-hl2msg|update_status_item|string}}&lt;br /&gt;
{{hl2msg|byte|index|}}&lt;br /&gt;
{{hl2msg|byte|object|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
 &lt;br /&gt;
=== stats_resetround ===&lt;br /&gt;
{{begin-hl2msg|stats_resetround|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scorestats_accumulated_update ===&lt;br /&gt;
{{begin-hl2msg|scorestats_accumulated_update|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scorestats_accumulated_reset ===&lt;br /&gt;
{{begin-hl2msg|scorestats_accumulated_reset|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_earned_local ===&lt;br /&gt;
{{begin-hl2msg|achievement_earned_local|string}}&lt;br /&gt;
{{hl2msg|short|achievement|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_healed ===&lt;br /&gt;
{{begin-hl2msg|player_healed|string}}&lt;br /&gt;
{{hl2msg|short|patient|}}&lt;br /&gt;
{{hl2msg|short|healer|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== building_healed ===&lt;br /&gt;
{{begin-hl2msg|building_healed|string}}&lt;br /&gt;
{{hl2msg|short|building|}}&lt;br /&gt;
{{hl2msg|short|healer|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== duel_status ===&lt;br /&gt;
{{begin-hl2msg|duel_status|string}}&lt;br /&gt;
{{hl2msg|short|killer|}}&lt;br /&gt;
{{hl2msg|short|score_type|}}&lt;br /&gt;
{{hl2msg|short|initiator|}}&lt;br /&gt;
{{hl2msg|short|target|}}&lt;br /&gt;
{{hl2msg|short|initiator_score|}}&lt;br /&gt;
{{hl2msg|short|target_score|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== fish_notice ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;player_death&amp;quot;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|fish_notice|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== fish_notice__arm ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;fish_notice&amp;quot; (...clone of &amp;quot;player_death&amp;quot;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|fish_notice__arm|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== throwable_hit ===&lt;br /&gt;
{{qnotice|clone of &amp;quot;player_death&amp;quot; with added counts}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|throwable_hit|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|short|assister|user ID of assister}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{hl2msg|short|stun_flags|victim's stun flags at the moment of death}}&lt;br /&gt;
{{hl2msg|short|death_flags|death flags.}}&lt;br /&gt;
{{hl2msg|bool|silent_kill|}}&lt;br /&gt;
{{hl2msg|string|assister_fallback|contains a string to use if &amp;quot;assister&amp;quot; is -1}}&lt;br /&gt;
{{hl2msg|short|totalhits|Number of hits his player has done}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pumpkin_lord_summoned ===&lt;br /&gt;
{{begin-hl2msg|pumpkin_lord_summoned|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pumpkin_lord_killed ===&lt;br /&gt;
{{begin-hl2msg|pumpkin_lord_killed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_summoned ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_killed ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_escape_warning ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== merasmus_escaped ===&lt;br /&gt;
{{begin-hl2msg|merasmus_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_summoned ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_summoned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_stunned ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_stunned|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|player_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_killed ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_killed|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_killer ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_killer|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|player_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_escape_imminent ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_escape_imminent|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{hl2msg|byte|time_remaining|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== eyeball_boss_escaped ===&lt;br /&gt;
{{begin-hl2msg|eyeball_boss_escaped|string}}&lt;br /&gt;
{{hl2msg|short|level|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== npc_hurt ===&lt;br /&gt;
{{begin-hl2msg|npc_hurt|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{hl2msg|short|attacker_player|}}&lt;br /&gt;
{{hl2msg|short|weaponid|}}&lt;br /&gt;
{{hl2msg|short|damageamount|}}&lt;br /&gt;
{{hl2msg|bool|crit|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== controlpoint_timer_updated ===&lt;br /&gt;
{{begin-hl2msg|controlpoint_timer_updated|string}}&lt;br /&gt;
{{hl2msg|short|index|index of the cap being updated}}&lt;br /&gt;
{{hl2msg|float|time|time}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_start ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_start|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_cancel ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_cancel|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_highfive_success ===&lt;br /&gt;
{{begin-hl2msg|player_highfive_success|string}}&lt;br /&gt;
{{hl2msg|byte|initiator_entindex|}}&lt;br /&gt;
{{hl2msg|byte|partner_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_bonuspoints ===&lt;br /&gt;
{{begin-hl2msg|player_bonuspoints|string}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{hl2msg|short|player_entindex|}}&lt;br /&gt;
{{hl2msg|short|source_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_upgraded ===&lt;br /&gt;
{{qnotice|This event appears to be missing an argument for which player upgraded}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_upgraded|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_buyback ===&lt;br /&gt;
{{begin-hl2msg|player_buyback|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|cost|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_used_powerup_bottle ===&lt;br /&gt;
{{begin-hl2msg|player_used_powerup_bottle|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|type|}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== christmas_gift_grab ===&lt;br /&gt;
{{begin-hl2msg|christmas_gift_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_killed_achievement_zone ===&lt;br /&gt;
{{begin-hl2msg|player_killed_achievement_zone|string}}&lt;br /&gt;
{{hl2msg|short|attacker|entindex of the attacker}}&lt;br /&gt;
{{hl2msg|short|victim|entindex of the victim}}&lt;br /&gt;
{{hl2msg|short|zone_id|type of area (0 for general, 1 for capture zone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== party_updated ===&lt;br /&gt;
{{begin-hl2msg|party_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lobby_updated ===&lt;br /&gt;
{{begin-hl2msg|lobby_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mission_update ===&lt;br /&gt;
{{begin-hl2msg|mvm_mission_update|string}}&lt;br /&gt;
{{hl2msg|short|class|}}&lt;br /&gt;
{{hl2msg|short|count|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== recalculate_holidays ===&lt;br /&gt;
{{begin-hl2msg|recalculate_holidays|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_currency_changed ===&lt;br /&gt;
{{begin-hl2msg|player_currency_changed|string}}&lt;br /&gt;
{{hl2msg|short|currency|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== doomsday_rocket_open ===&lt;br /&gt;
{{begin-hl2msg|doomsday_rocket_open|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team opened the rocket}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== remove_nemesis_relationship ===&lt;br /&gt;
{{begin-hl2msg|remove_nemesis_relationship|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player who should reset}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_wave ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_wave|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_all ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_all|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_creditbonus_all_advanced ===&lt;br /&gt;
{{begin-hl2msg|mvm_creditbonus_all|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_quick_sentry_upgrade ===&lt;br /&gt;
{{begin-hl2msg|mvm_quick_sentry_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_tank_destroyed_by_players ===&lt;br /&gt;
{{begin-hl2msg|mvm_tank_destroyed_by_players|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_kill_robot_delivering_bomb ===&lt;br /&gt;
{{begin-hl2msg|mvm_kill_robot_delivering_bomb|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_pickup_currency ===&lt;br /&gt;
{{begin-hl2msg|mvm_pickup_currency|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|currency|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_carrier_killed ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_carrier_killed|string}}&lt;br /&gt;
{{hl2msg|short|level|upgrade level of the carrier}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sentrybuster_detonate ===&lt;br /&gt;
{{begin-hl2msg|mvm_sentrybuster_detonate|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the target playerr}}&lt;br /&gt;
{{hl2msg|float|det_x|origin of the sentry buster}}&lt;br /&gt;
{{hl2msg|float|det_y|}}&lt;br /&gt;
{{hl2msg|float|det_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_scout_marked_for_death ===&lt;br /&gt;
{{begin-hl2msg|mvm_scout_marked_for_death|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_medic_powerup_shared ===&lt;br /&gt;
{{begin-hl2msg|mvm_medic_powerup_shared|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_begin_wave ===&lt;br /&gt;
{{begin-hl2msg|mvm_begin_wave|string}}&lt;br /&gt;
{{hl2msg|short|wave_index|}}&lt;br /&gt;
{{hl2msg|short|max_waves|}}&lt;br /&gt;
{{hl2msg|short|advanced|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_wave_complete ===&lt;br /&gt;
{{begin-hl2msg|mvm_wave_complete|string}}&lt;br /&gt;
{{hl2msg|bool|advanced|is this an advanced popfile}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mission_complete ===&lt;br /&gt;
{{begin-hl2msg|mvm_mission_complete|string}}&lt;br /&gt;
{{hl2msg|string|mission|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_reset_by_player ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_reset_by_player|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_alarm_triggered ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_alarm_triggered|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_bomb_deploy_reset_by_player ===&lt;br /&gt;
{{begin-hl2msg|mvm_bomb_deploy_reset_by_player|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_wave_failed ===&lt;br /&gt;
{{begin-hl2msg|mvm_wave_failed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_reset_stats ===&lt;br /&gt;
{{begin-hl2msg|mvm_reset_stats|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== damage_resisted ===&lt;br /&gt;
{{begin-hl2msg|damage_resisted|string}}&lt;br /&gt;
{{hl2msg|byte|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_notify ===&lt;br /&gt;
{{begin-hl2msg|revive_player_notify|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|short|marker_entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_stopped ===&lt;br /&gt;
{{begin-hl2msg|revive_player_stopped|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== revive_player_complete ===&lt;br /&gt;
{{begin-hl2msg|revive_player_complete|string}}&lt;br /&gt;
{{hl2msg|short|entindex|entindex of the medic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_turned_to_ghost ===&lt;br /&gt;
{{begin-hl2msg|player_turned_to_ghost|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player who changed to a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== medigun_shield_blocked_damage ===&lt;br /&gt;
{{begin-hl2msg|medigun_shield_blocked_damage|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player using the shield}}&lt;br /&gt;
{{hl2msg|float|damage|damage that was blocked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_adv_wave_complete_no_gates ===&lt;br /&gt;
{{begin-hl2msg|mvm_adv_wave_complete_no_gates|string}}&lt;br /&gt;
{{hl2msg|short|index|wave index}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sniper_headshot_currency ===&lt;br /&gt;
{{begin-hl2msg|mvm_sniper_headshot_currency|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|currency|currency collected}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_mannhattan_pit ===&lt;br /&gt;
{{begin-hl2msg|mvm_mannhattan_pit|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== flag_carried_in_detection_zone ===&lt;br /&gt;
{{begin-hl2msg|flag_carried_in_detection_zone|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_adv_wave_killed_stun_radio ===&lt;br /&gt;
{{begin-hl2msg|mvm_adv_wave_killed_stun_radio|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_directhit_stun ===&lt;br /&gt;
{{begin-hl2msg|player_directhit_stun|string}}&lt;br /&gt;
{{hl2msg|short|attacker|entindex of the attacker}}&lt;br /&gt;
{{hl2msg|short|victim|entindex of the victim}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== mvm_sentrybuster_killed ===&lt;br /&gt;
{{begin-hl2msg|mvm_sentrybuster_killed|string}}&lt;br /&gt;
{{hl2msg|short|sentry_buster|entindex}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrades_file_changed ===&lt;br /&gt;
{{begin-hl2msg|upgrades_file_changed|string}}&lt;br /&gt;
{{hl2msg|string|path|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_team_points_changed ===&lt;br /&gt;
{{begin-hl2msg|rd_team_points_changed|string}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|byte|method|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_rules_state_changed ===&lt;br /&gt;
{{begin-hl2msg|rd_rules_state_changed|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_robot_killed ===&lt;br /&gt;
{{qnotice|this extends the original player_death}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|rd_robot_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|victim_entindex|}}&lt;br /&gt;
{{hl2msg|long|inflictor_entindex|ent index of inflictor (a sentry, for example)}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|short|weaponid|ID of weapon killed used}}&lt;br /&gt;
{{hl2msg|long|damagebits|bits of type of damage}}&lt;br /&gt;
{{hl2msg|short|customkill|type of custom kill}}&lt;br /&gt;
{{hl2msg|string|weapon_logclassname|weapon name that should be printed on the log}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_robot_impact ===&lt;br /&gt;
{{begin-hl2msg|rd_robot_impact|string}}&lt;br /&gt;
{{hl2msg|short|entindex|}}&lt;br /&gt;
{{hl2msg|float|impulse_x|}}&lt;br /&gt;
{{hl2msg|float|impulse_y|}}&lt;br /&gt;
{{hl2msg|float|impulse_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== teamplay_pre_round_time_left ===&lt;br /&gt;
{{begin-hl2msg|teamplay_pre_round_time_left|string}}&lt;br /&gt;
{{hl2msg|short|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== parachute_deploy ===&lt;br /&gt;
{{begin-hl2msg|parachute_deploy|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== parachute_holster ===&lt;br /&gt;
{{begin-hl2msg|parachute_holster|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== kill_refills_meter ===&lt;br /&gt;
{{begin-hl2msg|kill_refills_meter|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rps_taunt_event ===&lt;br /&gt;
{{begin-hl2msg|rps_taunt_event|string}}&lt;br /&gt;
{{hl2msg|short|winner|entindex of the winning player}}&lt;br /&gt;
{{hl2msg|byte|winner_rps|winner's selection}}&lt;br /&gt;
{{hl2msg|short|loser|entindex of the losing player}}&lt;br /&gt;
{{hl2msg|byte|loser_rps|loser's selection}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== conga_kill ===&lt;br /&gt;
{{begin-hl2msg|kill_refills_meter|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_initial_spawn ===&lt;br /&gt;
{{begin-hl2msg|player_initial_spawn|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== competitive_victory ===&lt;br /&gt;
{{begin-hl2msg|competitive_victory|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== competitive_skillrating_update ===&lt;br /&gt;
{{begin-hl2msg|competitive_skillrating_update|string}}&lt;br /&gt;
{{hl2msg|short|index|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|rating|skillrating}}&lt;br /&gt;
{{hl2msg|short|delta|skillrating adjustment}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== minigame_win ===&lt;br /&gt;
{{begin-hl2msg|minigame_win|string}}&lt;br /&gt;
{{hl2msg|byte|team|which team won the minigame}}&lt;br /&gt;
{{hl2msg|byte|type|what type of minigame was won}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== sentry_on_go_active ===&lt;br /&gt;
{{begin-hl2msg|sentry_on_go_active|string}}&lt;br /&gt;
{{hl2msg|short|index|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== duck_xp_level_up ===&lt;br /&gt;
{{begin-hl2msg|duck_xp_level_up|string}}&lt;br /&gt;
{{hl2msg|short|level|leveled up to what}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== questlog_opened ===&lt;br /&gt;
{{begin-hl2msg|questlog_opened|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== schema_updated ===&lt;br /&gt;
{{begin-hl2msg|schema_updated|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== localplayer_pickup_weapon ===&lt;br /&gt;
{{begin-hl2msg|localplayer_pickup_weapon|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== rd_player_score_points ===&lt;br /&gt;
{{begin-hl2msg|rd_player_score_points|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|method|}}&lt;br /&gt;
{{hl2msg|short|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== demoman_det_stickies ===&lt;br /&gt;
{{begin-hl2msg|demoman_det_stickies|string}}&lt;br /&gt;
{{hl2msg|short|player|entindex of the detonating player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== quest_objective_completed ===&lt;br /&gt;
{{qnotice|For prediction}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|quest_objective_completed|string}}&lt;br /&gt;
{{hl2msg|long|quest_item_id_low|}}&lt;br /&gt;
{{hl2msg|long|quest_item_id_hi|}}&lt;br /&gt;
{{hl2msg|long|quest_objective_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_score_changed ===&lt;br /&gt;
{{begin-hl2msg|player_score_changed|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|short|delta|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== killed_capping_player ===&lt;br /&gt;
{{begin-hl2msg|killed_capping_player|string}}&lt;br /&gt;
{{hl2msg|byte|cp|index of the point}}&lt;br /&gt;
{{hl2msg|byte|killer|index of the killer}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the victim}}&lt;br /&gt;
{{hl2msg|byte|assister|index of the assister}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== environmental_death ===&lt;br /&gt;
{{begin-hl2msg|environmental_death|string}}&lt;br /&gt;
{{hl2msg|byte|killer|index of the killer}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the victim}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== projectile_direct_hit ===&lt;br /&gt;
{{begin-hl2msg|projectile_direct_hit|string}}&lt;br /&gt;
{{hl2msg|byte|attacker|index of the player who shot the projectile}}&lt;br /&gt;
{{hl2msg|byte|victim|index of the player who got direct-ht}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_get ===&lt;br /&gt;
{{begin-hl2msg|pass_get|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_score ===&lt;br /&gt;
{{begin-hl2msg|pass_score|string}}&lt;br /&gt;
{{hl2msg|short|player|}}&lt;br /&gt;
{{hl2msg|short|points|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_free ===&lt;br /&gt;
{{begin-hl2msg|pass_free|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_pass_caught ===&lt;br /&gt;
{{begin-hl2msg|pass_pass_caught|string}}&lt;br /&gt;
{{hl2msg|short|passer|}}&lt;br /&gt;
{{hl2msg|short|catcher|}}&lt;br /&gt;
{{hl2msg|float|dist|}}&lt;br /&gt;
{{hl2msg|float|duration|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_ball_stolen ===&lt;br /&gt;
{{begin-hl2msg|pass_ball_stolen|string}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|short|attacker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== pass_ball_blocked ===&lt;br /&gt;
{{begin-hl2msg|pass_ball_blocked|string}}&lt;br /&gt;
{{hl2msg|short|owner|}}&lt;br /&gt;
{{hl2msg|short|blocker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10050</id>
		<title>Left 4 Dead 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10050"/>
		<updated>2015-11-05T19:01:48Z</updated>

		<summary type="html">&lt;p&gt;Darkid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|a game event, name may be 32 charaters long; this extents the original player_death by a new fields}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID who died, userid should be used first, to get the dead Player.  Otherwise, it is not a player, so use this.}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|attackername|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if killer not a player, the entindex of who killed.  Again, use attacker first}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|attackerisbot|is the attacker a bot}}&lt;br /&gt;
{{hl2msg|string|victimname|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|bool|victimisbot|is the victim a bot}}&lt;br /&gt;
{{hl2msg|bool|abort|did the victim abort}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|float|victim_x|}}&lt;br /&gt;
{{hl2msg|float|victim_y|}}&lt;br /&gt;
{{hl2msg|float|victim_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|Registers all playable classes (Hunter, Smoker, Boomer, Tank, Survivors). See infected_hurt for Witch and Common Infected}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|Not networked}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|user id who attacked}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|short|health|remaining health points}}&lt;br /&gt;
{{hl2msg|byte|armor|remaining armor points}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used, if not the world}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{hl2msg|byte|dmg_armor|damage done to armor}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_team ===&lt;br /&gt;
{{qnotice|player change his team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_team|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|team|team id}}&lt;br /&gt;
{{hl2msg|byte|oldteam|old team id}}&lt;br /&gt;
{{hl2msg|bool|disconnect|team change because player disconnects}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_bot_replace ===&lt;br /&gt;
{{qnotice|Bot replaced a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_bot_replace|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bot_player_replace ===&lt;br /&gt;
{{qnotice|Player replaced a bot}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bot_player_replace|string}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_afk ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_afk|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_on_empty ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_on_empty|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name used}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_reload ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_reload|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|manual|player manually started the reload}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_zoom ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_zoom|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_use ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an infected uses their ability}}&lt;br /&gt;
{{eventnote|Issues|Doesn't fire for jockey}}&lt;br /&gt;
{{begin-hl2msg|ability_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|Classname of ability. Possible values:&lt;br /&gt;
*ability_lunge&lt;br /&gt;
*ability_toungue&lt;br /&gt;
*ability_vomit&lt;br /&gt;
*ability_charge&lt;br /&gt;
*ability_spit&lt;br /&gt;
for the Hunter, Smoker, Boomer, Charger, and Spitter respectively.}}&lt;br /&gt;
{{hl2msg|short|context|enum of the way it was used (different for each ability)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who got some ammo from a weapon_ammo_spawner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== grenade_bounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|grenade_bounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hegrenade_detonate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hegrenade_detonate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bullet_impact ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bullet_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_footstep ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_footstep|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blind ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blind|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_falldamage ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_falldamage|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who got hurt}}&lt;br /&gt;
{{hl2msg|float|damage|for how much}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who grabbed the ledge}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_release ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who released from the ledge}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_moving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_moving|string}}&lt;br /&gt;
{{hl2msg|long|entindex|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{hl2msg|bool|closed|Was the door closed when it started opening?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_close ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_close|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who closed the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_unlocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_unlocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== rescue_door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|rescue_door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|long|entindex|door that opened}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_door_used ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_door_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_door_used_versus ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_door_used_versus|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone tried to push a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== success_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone pushed a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|success_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who openned it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_freeze_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_freeze_end|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_pre_entity ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_pre_entity|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_post_nav ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_post_nav|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_generate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_generate|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end_message ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end_message|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_ended ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_ended|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_started ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_started|string}}&lt;br /&gt;
{{hl2msg|string|issue|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|string|votedata|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|initiator|entity id of the player who initiated the vote}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_changed|string}}&lt;br /&gt;
{{hl2msg|byte|yesVotes|}}&lt;br /&gt;
{{hl2msg|byte|noVotes|}}&lt;br /&gt;
{{hl2msg|byte|potentialVotes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_passed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_passed|string}}&lt;br /&gt;
{{hl2msg|string|details|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_failed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_failed|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_cast_yes ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_yes|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_cast_no ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_no|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_hurt ===&lt;br /&gt;
{{qnotice|Registers for non-playable classes (Common Infected, Witch). See player_hurt for other playable classes}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|attacker|player userid who attacked}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of infected}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|short|amount|how much damage was done}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_death ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_death|string}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|infected_id|ID of the infected that died}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|short|weapon_id|ID of the weapon used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|minigun|signals a minigun kill}}&lt;br /&gt;
{{hl2msg|bool|blast|signals a death from blast damage}}&lt;br /&gt;
{{hl2msg|bool|submerged|indicates the infected was submerged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hostname_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hostname_changed|string}}&lt;br /&gt;
{{hl2msg|string|hostname|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== difficulty_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|difficulty_changed|string}}&lt;br /&gt;
{{hl2msg|short|newDifficulty|}}&lt;br /&gt;
{{hl2msg|short|oldDifficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_start|string}}&lt;br /&gt;
{{hl2msg|short|rushes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_rush ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_rush|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_escape_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_escape_start|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_incoming ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_incoming|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_ready ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_ready|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_leaving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_leaving|string}}&lt;br /&gt;
{{hl2msg|short|survivorcount|number of survivors that made it out}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_win ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_win|string}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|short|difficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mission_lost ===&lt;br /&gt;
{{qnotice|As in, the survivor team failed.  Opposite of finale_win, but not necessarily during the finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mission_lost|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_start|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_damaged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_damaged|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== final_reportscreen ===&lt;br /&gt;
{{qnotice|Right before the final report screen comes up, let awards possibly fire}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|final_reportscreen|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== map_transition ===&lt;br /&gt;
{{qnotice|When campaign cinematics start}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|map_transition|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_transitioned ===&lt;br /&gt;
{{qnotice|When campaign cinematics end and player is transitioned to first person view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_transitioned|string}}&lt;br /&gt;
{{hl2msg|short|userid|the person that just finished transitioning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{hl2msg|short|health_restored|amount of health restored}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Issues|subject is broken for this event, it always appears to be the player doing the healing}}&lt;br /&gt;
{{begin-hl2msg|heal_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was being healed, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person giving the ammo}}&lt;br /&gt;
{{hl2msg|short|subject|person receiving ammo}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== give_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|give_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|The giver of the weapon}}&lt;br /&gt;
{{hl2msg|short|recipient|The recipient of the weapon}}&lt;br /&gt;
{{hl2msg|short|weapon|The ID of the weapon given}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had the pills}}&lt;br /&gt;
{{hl2msg|short|subject|person swallowing the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_no_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_no_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_full ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_full|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_doesnt_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_doesnt_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pile_weapon_cant_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pile_weapon_cant_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo pile with a grenade launcher}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is defibrillating.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who used the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it helped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was defibrillating, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_item_already_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_item_already_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo upgrade twice}}&lt;br /&gt;
{{hl2msg|string|upgradeclass|classname of the upgrade we tried to use}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_failed_no_primary ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_failed_no_primary|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an upgrade without having a primary weapon}}&lt;br /&gt;
{{hl2msg|string|upgrade|name of the upgrade we tried to use, eg &amp;quot;INCENDIARY_AMMO&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== dead_survivor_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|dead_survivor_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|short|deadplayer|user id of the dead player represented}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== adrenaline_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|adrenaline_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had and used the adrenaline}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person who was revived}}&lt;br /&gt;
{{hl2msg|bool|lastlife|person revived will die if they fall again}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|1 if person revived was ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|person is ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated ===&lt;br /&gt;
{{qnotice|when a player becomes incapacitated.  This is also called when a tank is killed.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated_start ===&lt;br /&gt;
{{qnotice|when a player is about to become incapacitated, so you can see his last living state}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_start_area ===&lt;br /&gt;
{{qnotice|when a player spawns into the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who entered}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_first_spawn ===&lt;br /&gt;
{{qnotice|when a player spawns for the first time in a given mission}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_first_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who spawned}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
{{qnotice|This Event doesnt exist anymore 1.10.2012}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== player_left_start_area ===&lt;br /&gt;
{{qnotice|when a player leaves the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_checkpoint ===&lt;br /&gt;
{{qnotice|when a basecombatcharacter enters a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who entered}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one entering}}&lt;br /&gt;
{{hl2msg|long|door|Entindex of the checkpoint door the player entered to get here.}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|string|doorname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_left_checkpoint ===&lt;br /&gt;
{{qnotice|when a player leaves a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who left}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one exiting}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoved|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_shoved|string}}&lt;br /&gt;
{{hl2msg|short|entityid|the entity index of the one who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump_apex ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump_apex|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who jumped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was trying to move}}&lt;br /&gt;
{{hl2msg|short|blocker|player index who kept them from moving}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_now_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_now_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now it}}&lt;br /&gt;
{{hl2msg|short|attacker|player that did the it-ing}}&lt;br /&gt;
{{hl2msg|bool|exploded|whether it was vomit or explosion}}&lt;br /&gt;
{{hl2msg|bool|infected|is the vomit infectious}}&lt;br /&gt;
{{hl2msg|bool|by_boomer|came from a boomer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_no_longer_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_no_longer_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now no longer it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_harasser_set ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_harasser_set|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who woke up the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch woken up}}&lt;br /&gt;
{{hl2msg|bool|first|First time the witch set a harasser}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_spawn|string}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who killed the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch that was killed.}}&lt;br /&gt;
{{hl2msg|bool|oneshot|TRUE if the Witch was killed with one shot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|User ID of the tank spawning now}}&lt;br /&gt;
{{hl2msg|long|tankid|Entindex of tank spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== melee_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|melee_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who bashed the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|Entindex of infected what got killed}}&lt;br /&gt;
{{hl2msg|bool|ambush|Infected was unaware when killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== area_cleared ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|area_cleared|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who cleared the area}}&lt;br /&gt;
{{hl2msg|long|area|id of the cleared area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== award_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|award_earned|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who earned the award}}&lt;br /&gt;
{{hl2msg|long|entityid|client likes ent id}}&lt;br /&gt;
{{hl2msg|long|subjectentid|entity id of other party in the award, if any}}&lt;br /&gt;
{{hl2msg|short|award|id of award earned}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the grabbing}}&lt;br /&gt;
{{hl2msg|short|victim|player that got grabbed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_bent ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_bent|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_victim_died ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_victim_died|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_release ===&lt;br /&gt;
{{qnotice|Fired in all cases where the tongue releases a victim, whether choked or not, etc.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|victim|The (now released) victim}}&lt;br /&gt;
{{hl2msg|long|distance|Distance the victim was dragged.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== choke_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being choked}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_pull_stopped ===&lt;br /&gt;
{{qnotice|Called when a smoker tongue is cleared on a dragging player. Includes cuts.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_pull_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pulled}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lunge_shove ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_shove|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_pounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_pounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|long|distance|Distance from pounce start to contact}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== fatal_vomit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|fatal_vomit|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who vomited}}&lt;br /&gt;
{{hl2msg|short|victim|And who was killed or incapped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_call_for_help ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_call_for_help|string}}&lt;br /&gt;
{{hl2msg|short|userid|The actual player entity who is awaiting rescue.}}&lt;br /&gt;
{{hl2msg|long|subject|SurvivorRescue entity representing the player who needs to be rescued from the closet (used for position)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescued ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescued|string}}&lt;br /&gt;
{{hl2msg|short|rescuer|player that did the rescuing}}&lt;br /&gt;
{{hl2msg|short|victim|the survivor being rescued}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescue_abandoned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescue_abandoned|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== relocated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|relocated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was relocated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== respawning ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|respawning|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who started respawning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_frustrated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_frustrated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was culled}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_given ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_given|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who got the weapon}}&lt;br /&gt;
{{hl2msg|short|giver|player that did the giving}}&lt;br /&gt;
{{hl2msg|short|weapon|weapon id given}}&lt;br /&gt;
{{hl2msg|short|weaponentid|weapon entity id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an item is removed from a survivor's inventory}}&lt;br /&gt;
{{eventnote|Related Events|Called before heal_success, defibrillator_used, upgrade_pack_used, but called after pills_used and adrenaline_used}}&lt;br /&gt;
{{begin-hl2msg|weapon_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who dropped the weapon}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{hl2msg|short|propid|entindex of the dropped weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|Override from gameevents.res}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of breaker}}&lt;br /&gt;
{{hl2msg|long|entindex|entindex of thing breaking}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{hl2msg|bool|hulkonly|SF_BREAK_HULK_ONLY}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spawner_give_item ===&lt;br /&gt;
{{qnotice|A spawner has given a player an item (weapon, pills, ammo, health kit, etc)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spawner_give_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|Item recipient}}&lt;br /&gt;
{{hl2msg|string|item|Name of item given}}&lt;br /&gt;
{{hl2msg|long|spawner|entindex of the spawner entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== create_panic_event ===&lt;br /&gt;
{{qnotice|A panic event has been created, though not necessarily started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|create_panic_event|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was started the panic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pills ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pills|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_weapons ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_weapons|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|classname|Classname of the entity they see}}&lt;br /&gt;
{{hl2msg|string|entityname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_spawn_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_spawn_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|weaponname|weapon name, or &amp;quot;melee&amp;quot;}}&lt;br /&gt;
{{hl2msg|string|subtype|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_near ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_near|string}}&lt;br /&gt;
{{hl2msg|short|userid|The boomer}}&lt;br /&gt;
{{hl2msg|short|victim|The survivor whom the boomer has gotten very close to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== started_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|started_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_truck ===&lt;br /&gt;
{{qnotice|explain how pulling the lever on the gas truck will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_truck|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_panic_button ===&lt;br /&gt;
{{qnotice|explain that pressing this button will start a panic event.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_panic_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The panic button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_elevator_button ===&lt;br /&gt;
{{qnotice|explain how to operate the hospital elevator button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_elevator_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_lift_button ===&lt;br /&gt;
{{qnotice|explain how to operate the lift button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_lift_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lift button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_church_door ===&lt;br /&gt;
{{qnotice|explain how to provoke the crazy church guy.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_church_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The saferoom door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_emergency_door ===&lt;br /&gt;
{{qnotice|explain how to open the emergency door.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_emergency_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_crane ===&lt;br /&gt;
{{qnotice|explain how to lower the box on the crane.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_crane|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever/button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bridge ===&lt;br /&gt;
{{qnotice|explain how to close the gates to make a bridge.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_can_panic ===&lt;br /&gt;
{{qnotice|explain how to shoot the gas can.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_can_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The gas can}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_van_panic ===&lt;br /&gt;
{{qnotice|explain how to start the van.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_van_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The van}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mainstreet ===&lt;br /&gt;
{{qnotice|explain how to lower the forklift}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mainstreet|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The forklift}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_train_lever ===&lt;br /&gt;
{{qnotice|explain how to operate the train lever.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_train_lever|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever on box car}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_disturbance ===&lt;br /&gt;
{{qnotice|explain that disturbances (car alarm) attract infected horde}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_disturbance|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The source of disturbance}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_goal ===&lt;br /&gt;
{{qnotice|explain where to put the scavenge mode items}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_goal|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The collection device}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_leave_area ===&lt;br /&gt;
{{qnotice|explain that leaving the area, starts round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_leave_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== begin_scavenge_overtime ===&lt;br /&gt;
{{qnotice|enter overtime in a scavenge round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|begin_scavenge_overtime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_start ===&lt;br /&gt;
{{qnotice|a scavenge round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_start|string}}&lt;br /&gt;
{{hl2msg|byte|round|round number, 1 based}}&lt;br /&gt;
{{hl2msg|bool|firsthalf|start of the first half of the round}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scavenge_round_halftime ===&lt;br /&gt;
{{qnotice|a scavenge round is in halftime}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_halftime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_finished ===&lt;br /&gt;
{{qnotice|a scavenge round has ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_score_tied ===&lt;br /&gt;
{{qnotice|a team just tied the score}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_score_tied|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_round_start ===&lt;br /&gt;
{{qnotice|a versus round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_blocked ===&lt;br /&gt;
{{qnotice|can't pour the gas, someone else already is}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_completed ===&lt;br /&gt;
{{qnotice|player finished pouring a can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_completed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_dropped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_dropped|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_interrupted ===&lt;br /&gt;
{{qnotice|we got interuppted pouring the gas can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who interuppted us}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== use_target ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|use_target|string}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the use target}}&lt;br /&gt;
{{hl2msg|string|classname|classname of the use target}}&lt;br /&gt;
{{hl2msg|bool|isprop|is this a prop that can be carried}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When a Survivor presses +USE on a useable entity. i.e. Weapons, items, doors}}&lt;br /&gt;
{{eventnote|Related Events|If targetid is an item, item_pickup will be called prior to player_use}}&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the used entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== friendly_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|friendly_fire|string}}&lt;br /&gt;
{{hl2msg|short|attacker|player who fired the weapon}}&lt;br /&gt;
{{hl2msg|short|victim|player who got shot}}&lt;br /&gt;
{{hl2msg|short|guilty|player who was at fault}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_draw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_draw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_nodraw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_nodraw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== request_weapon_stats ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|request_weapon_stats|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user requesting their stats}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_talking_state ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_talking_state|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|bool|istalking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_pickup ===&lt;br /&gt;
{{qnotice|client event for player has picked up a weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_pickup|string}}&lt;br /&gt;
{{hl2msg|byte|context|split screen message context}}&lt;br /&gt;
{{hl2msg|byte|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|weaponslot|}}&lt;br /&gt;
{{hl2msg|byte|dropped_by_infected|gender of the Infected that dropped the weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hunter_punched ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_punched|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hunter_headshot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_headshot|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who made the headshot}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== zombie_ignited ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|zombie_ignited|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID of Tank}}&lt;br /&gt;
{{hl2msg|string|victimname|&amp;quot;Witch&amp;quot;, &amp;quot;Tank&amp;quot;, &amp;quot;Hunter&amp;quot;, &amp;quot;Smoker&amp;quot;, or &amp;quot;Infected&amp;quot;}}&lt;br /&gt;
{{hl2msg|bool|fire_ammo|true if incendiary ammo was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_exploded ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_exploded|string}}&lt;br /&gt;
{{hl2msg|short|userid|Boomer that exploded}}&lt;br /&gt;
{{hl2msg|short|attacker|player who caused the explosion}}&lt;br /&gt;
{{hl2msg|bool|splashedbile|Exploding boomer splashed bile on Survivors}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_pistol_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_pistol_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-pistol weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_at_40 ===&lt;br /&gt;
{{qnotice|This is networked, special event for game instructor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_at_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== total_ammo_below_40 ===&lt;br /&gt;
{{qnotice|sent for any ammo type, except those with max ammo 1, or infinite ammo, like pistols}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|total_ammo_below_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_hurt_concise ===&lt;br /&gt;
{{qnotice|Abbreviated version of 'player_hurt' that is networked}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt_concise|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tank_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead tank}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|solo|TRUE if a player single-handedly killed the Tank}}&lt;br /&gt;
{{hl2msg|bool|melee_only|TRUE if the tank was only killed by melee attacks (no blast, burn, or bullet damage)}}&lt;br /&gt;
{{hl2msg|bool|l4d1_only|TRUE if l4d1 survivors inflicted damage and the l4d2 survivors did not)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_write_failed ===&lt;br /&gt;
{{qnotice|Used for a notification message when an achievement fails to write}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_write_failed|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== ghost_spawn_time ===&lt;br /&gt;
{{qnotice|Used for clients to know how long until they become a ghost (and can spawn)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ghost_spawn_time|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player that is becoming a ghost}}&lt;br /&gt;
{{hl2msg|short|spawntime|How long of a wait until player is a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== survival_at_30min ===&lt;br /&gt;
{{qnotice|Used to know when we elapse 30 minutes on a survival map}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_at_30min|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_drawbridge ===&lt;br /&gt;
{{qnotice|Point out the button that will start the gauntlet finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_drawbridge ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_perimeter ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_perimeter|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_deactivate_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_deactivate_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_impound_lot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_impound_lot|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_window ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_window|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon_wait ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon_wait|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gauntlet_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gauntlet_finale_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_float ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_float|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_ferry_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_ferry_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hatch_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hatch_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_shack_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_shack_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_incendiary_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_incendiary_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_explosive_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_explosive_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== receive_upgrade ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|receive_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|upgrade|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_vehicle_arrival ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_vehicle_arrival|string}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_overheated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_overheated|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_burger_sign ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_burger_sign|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_destination ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_destination|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_lighting ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_lighting|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_finale_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_survival_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_survival_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_out_of_range ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ability_out_of_range|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_pyrotechnics ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_pyrotechnics|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio1 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio1|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio2 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio2|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gates_are_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gates_are_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c2m4_ticketbooth ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c2m4_ticketbooth|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_rescue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_rescue|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hotel_elevator_doors ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hotel_elevator_doors|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop_tanker ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop_tanker|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_generic ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_generic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_radio ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_carousel ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_carousel|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_return_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_return_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_save_items ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_save_items|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spit_burst ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spit_burst|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entered_spit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entered_spit|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m1_getgas ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m1_getgas|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m3_return_to_boat ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m3_return_to_boat|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c1m4_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c1m4_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== c1m4_scavenge_instructions ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|c1m4_scavenge_instructions|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== punched_clown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|punched_clown|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who punched the clown}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead charger}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|melee|TRUE if a player killed the charger with a melee weapon}}&lt;br /&gt;
{{hl2msg|bool|charging|TRUE if the charger was charging when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spitter_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spitter_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead spitter}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|has_spit|TRUE if the spitter spit at some point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|short|rescuer|Who stopped it}}&lt;br /&gt;
{{hl2msg|float|ride_length|Duration of our ride}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead jockey}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_melee_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_melee_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-melee weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_decapitated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_decapitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who did the decapitation}}&lt;br /&gt;
{{hl2msg|string|weapon|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrade_pack_added ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_added|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vomit_bomb_tank ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vomit_bomb_tank|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who used the bomb}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== triggered_car_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|triggered_car_alarm|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== panic_event_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|panic_event_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts charging}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_start ===&lt;br /&gt;
{{qnotice|The moment when the charger grabs a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_end ===&lt;br /&gt;
{{qnotice|The moment when the charger stops charging a survivor (and will soon start pummeling)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_impact ===&lt;br /&gt;
{{qnotice|When a charger impacts a survivor they aren't carrying}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was impacted}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts pummeling a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_end ===&lt;br /&gt;
{{qnotice|When the charger is cleared from the survivor or the survivor dies.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|short|rescuer|user ID of the player who rescued them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== strongman_bell_knocked_off ===&lt;br /&gt;
{{qnotice|The arcade bell on c2m4_barns}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|strongman_bell_knocked_off|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== molotov_thrown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|molotov_thrown|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gas_can_forced_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gas_can_forced_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player that forced the drop}}&lt;br /&gt;
{{hl2msg|short|victim|player that dropped it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_need_gnome_to_continue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_need_gnome_to_continue|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survivor_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survivor_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_item_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_item_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_rescue_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_rescue_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bodyshots_reduced ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bodyshots_reduced|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_witch_instant_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_witch_instant_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== set_instructor_group_enabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|set_instructor_group_enabled|string}}&lt;br /&gt;
{{hl2msg|string|group|}}&lt;br /&gt;
{{hl2msg|short|enabled|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== stashwhacker_game_won ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|stashwhacker_game_won|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_marker_reached ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_marker_reached|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|marker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== start_score_animation ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|start_score_animation|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survival_round_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_gas_can_destroyed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_gas_can_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player that destroyed it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_gate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_gate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_run ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_run|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c6m3_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c6m3_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_bridge_lowering ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_bridge_lowering|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== m60_streak_ended ===&lt;br /&gt;
{{qnotice|I was holding down the m60 trigger, and now I'm not}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|m60_streak_ended|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== chair_charged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|chair_charged|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== song_played ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|song_played|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== foot_locker_opened ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|foot_locker_opened|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10016</id>
		<title>Left 4 Dead 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10016"/>
		<updated>2015-09-18T22:51:32Z</updated>

		<summary type="html">&lt;p&gt;Darkid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|a game event, name may be 32 charaters long; this extents the original player_death by a new fields}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID who died, userid should be used first, to get the dead Player.  Otherwise, it is not a player, so use this.}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|attackername|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if killer not a player, the entindex of who killed.  Again, use attacker first}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|attackerisbot|is the attacker a bot}}&lt;br /&gt;
{{hl2msg|string|victimname|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|bool|victimisbot|is the victim a bot}}&lt;br /&gt;
{{hl2msg|bool|abort|did the victim abort}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|float|victim_x|}}&lt;br /&gt;
{{hl2msg|float|victim_y|}}&lt;br /&gt;
{{hl2msg|float|victim_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|Registers all playable classes (Hunter, Smoker, Boomer, Tank, Survivors). See infected_hurt for Witch and Common Infected}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|Not networked}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|user id who attacked}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|short|health|remaining health points}}&lt;br /&gt;
{{hl2msg|byte|armor|remaining armor points}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used, if not the world}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{hl2msg|byte|dmg_armor|damage done to armor}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_team ===&lt;br /&gt;
{{qnotice|player change his team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_team|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|team|team id}}&lt;br /&gt;
{{hl2msg|byte|oldteam|old team id}}&lt;br /&gt;
{{hl2msg|bool|disconnect|team change because player disconnects}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_bot_replace ===&lt;br /&gt;
{{qnotice|Bot replaced a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_bot_replace|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bot_player_replace ===&lt;br /&gt;
{{qnotice|Player replaced a bot}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bot_player_replace|string}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_afk ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_afk|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_on_empty ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_on_empty|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name used}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_reload ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_reload|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|manual|player manually started the reload}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_zoom ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_zoom|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_use ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an infected uses their ability}}&lt;br /&gt;
{{eventnote|Issues|Doesn't fire for jockey}}&lt;br /&gt;
{{begin-hl2msg|ability_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname. Possible values: ability_lunge(hunter), ability_toungue(smoker), ability_vomit(boomer), ability_charge(charger), ability_spit(spitter)}}&lt;br /&gt;
{{hl2msg|short|context|enum of the way it was used (different for each ability)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who got some ammo from a weapon_ammo_spawner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== grenade_bounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|grenade_bounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hegrenade_detonate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hegrenade_detonate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bullet_impact ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bullet_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_footstep ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_footstep|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blind ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blind|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_falldamage ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_falldamage|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who got hurt}}&lt;br /&gt;
{{hl2msg|float|damage|for how much}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who grabbed the ledge}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_release ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who released from the ledge}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_moving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_moving|string}}&lt;br /&gt;
{{hl2msg|long|entindex|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{hl2msg|bool|closed|Was the door closed when it started opening?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_close ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_close|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who closed the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_unlocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_unlocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== rescue_door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|rescue_door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|long|entindex|door that opened}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_door_used ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_door_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_door_used_versus ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_door_used_versus|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone tried to push a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== success_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone pushed a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|success_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who openned it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_freeze_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_freeze_end|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_pre_entity ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_pre_entity|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_post_nav ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_post_nav|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_generate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_generate|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end_message ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end_message|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_ended ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_ended|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_started ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_started|string}}&lt;br /&gt;
{{hl2msg|string|issue|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|string|votedata|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|initiator|entity id of the player who initiated the vote}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_changed|string}}&lt;br /&gt;
{{hl2msg|byte|yesVotes|}}&lt;br /&gt;
{{hl2msg|byte|noVotes|}}&lt;br /&gt;
{{hl2msg|byte|potentialVotes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_passed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_passed|string}}&lt;br /&gt;
{{hl2msg|string|details|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_failed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_failed|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_cast_yes ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_yes|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_cast_no ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_no|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_hurt ===&lt;br /&gt;
{{qnotice|Registers for non-playable classes (Common Infected, Witch). See player_hurt for other playable classes}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|attacker|player userid who attacked}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of infected}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|short|amount|how much damage was done}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_death ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_death|string}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|infected_id|ID of the infected that died}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|short|weapon_id|ID of the weapon used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|minigun|signals a minigun kill}}&lt;br /&gt;
{{hl2msg|bool|blast|signals a death from blast damage}}&lt;br /&gt;
{{hl2msg|bool|submerged|indicates the infected was submerged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hostname_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hostname_changed|string}}&lt;br /&gt;
{{hl2msg|string|hostname|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== difficulty_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|difficulty_changed|string}}&lt;br /&gt;
{{hl2msg|short|newDifficulty|}}&lt;br /&gt;
{{hl2msg|short|oldDifficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_start|string}}&lt;br /&gt;
{{hl2msg|short|rushes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_rush ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_rush|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_escape_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_escape_start|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_incoming ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_incoming|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_ready ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_ready|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_leaving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_leaving|string}}&lt;br /&gt;
{{hl2msg|short|survivorcount|number of survivors that made it out}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_win ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_win|string}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|short|difficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mission_lost ===&lt;br /&gt;
{{qnotice|As in, the survivor team failed.  Opposite of finale_win, but not necessarily during the finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mission_lost|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_start|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_damaged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_damaged|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== final_reportscreen ===&lt;br /&gt;
{{qnotice|Right before the final report screen comes up, let awards possibly fire}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|final_reportscreen|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== map_transition ===&lt;br /&gt;
{{qnotice|When campaign cinematics start}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|map_transition|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_transitioned ===&lt;br /&gt;
{{qnotice|When campaign cinematics end and player is transitioned to first person view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_transitioned|string}}&lt;br /&gt;
{{hl2msg|short|userid|the person that just finished transitioning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{hl2msg|short|health_restored|amount of health restored}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Issues|subject is broken for this event, it always appears to be the player doing the healing}}&lt;br /&gt;
{{begin-hl2msg|heal_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was being healed, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person giving the ammo}}&lt;br /&gt;
{{hl2msg|short|subject|person receiving ammo}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== give_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|give_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|The giver of the weapon}}&lt;br /&gt;
{{hl2msg|short|recipient|The recipient of the weapon}}&lt;br /&gt;
{{hl2msg|short|weapon|The ID of the weapon given}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had the pills}}&lt;br /&gt;
{{hl2msg|short|subject|person swallowing the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_no_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_no_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_full ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_full|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_doesnt_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_doesnt_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pile_weapon_cant_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pile_weapon_cant_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo pile with a grenade launcher}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is defibrillating.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who used the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it helped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was defibrillating, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_item_already_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_item_already_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo upgrade twice}}&lt;br /&gt;
{{hl2msg|string|upgradeclass|classname of the upgrade we tried to use}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_failed_no_primary ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_failed_no_primary|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an upgrade without having a primary weapon}}&lt;br /&gt;
{{hl2msg|string|upgrade|name of the upgrade we tried to use, eg &amp;quot;INCENDIARY_AMMO&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== dead_survivor_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|dead_survivor_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|short|deadplayer|user id of the dead player represented}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== adrenaline_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|adrenaline_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had and used the adrenaline}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person who was revived}}&lt;br /&gt;
{{hl2msg|bool|lastlife|person revived will die if they fall again}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|1 if person revived was ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|person is ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated ===&lt;br /&gt;
{{qnotice|when a player becomes incapacitated.  This is also called when a tank is killed.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated_start ===&lt;br /&gt;
{{qnotice|when a player is about to become incapacitated, so you can see his last living state}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_start_area ===&lt;br /&gt;
{{qnotice|when a player spawns into the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who entered}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_first_spawn ===&lt;br /&gt;
{{qnotice|when a player spawns for the first time in a given mission}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_first_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who spawned}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
{{qnotice|This Event doesnt exist anymore 1.10.2012}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== player_left_start_area ===&lt;br /&gt;
{{qnotice|when a player leaves the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_checkpoint ===&lt;br /&gt;
{{qnotice|when a basecombatcharacter enters a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who entered}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one entering}}&lt;br /&gt;
{{hl2msg|long|door|Entindex of the checkpoint door the player entered to get here.}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|string|doorname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_left_checkpoint ===&lt;br /&gt;
{{qnotice|when a player leaves a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who left}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one exiting}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoved|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_shoved|string}}&lt;br /&gt;
{{hl2msg|short|entityid|the entity index of the one who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump_apex ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump_apex|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who jumped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was trying to move}}&lt;br /&gt;
{{hl2msg|short|blocker|player index who kept them from moving}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_now_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_now_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now it}}&lt;br /&gt;
{{hl2msg|short|attacker|player that did the it-ing}}&lt;br /&gt;
{{hl2msg|bool|exploded|whether it was vomit or explosion}}&lt;br /&gt;
{{hl2msg|bool|infected|is the vomit infectious}}&lt;br /&gt;
{{hl2msg|bool|by_boomer|came from a boomer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_no_longer_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_no_longer_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now no longer it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_harasser_set ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_harasser_set|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who woke up the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch woken up}}&lt;br /&gt;
{{hl2msg|bool|first|First time the witch set a harasser}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_spawn|string}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who killed the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch that was killed.}}&lt;br /&gt;
{{hl2msg|bool|oneshot|TRUE if the Witch was killed with one shot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|User ID of the tank spawning now}}&lt;br /&gt;
{{hl2msg|long|tankid|Entindex of tank spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== melee_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|melee_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who bashed the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|Entindex of infected what got killed}}&lt;br /&gt;
{{hl2msg|bool|ambush|Infected was unaware when killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== area_cleared ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|area_cleared|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who cleared the area}}&lt;br /&gt;
{{hl2msg|long|area|id of the cleared area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== award_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|award_earned|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who earned the award}}&lt;br /&gt;
{{hl2msg|long|entityid|client likes ent id}}&lt;br /&gt;
{{hl2msg|long|subjectentid|entity id of other party in the award, if any}}&lt;br /&gt;
{{hl2msg|short|award|id of award earned}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the grabbing}}&lt;br /&gt;
{{hl2msg|short|victim|player that got grabbed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_bent ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_bent|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_victim_died ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_victim_died|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_release ===&lt;br /&gt;
{{qnotice|Fired in all cases where the tongue releases a victim, whether choked or not, etc.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|victim|The (now released) victim}}&lt;br /&gt;
{{hl2msg|long|distance|Distance the victim was dragged.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== choke_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being choked}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_pull_stopped ===&lt;br /&gt;
{{qnotice|Called when a smoker tongue is cleared on a dragging player. Includes cuts.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_pull_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pulled}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lunge_shove ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_shove|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_pounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_pounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|long|distance|Distance from pounce start to contact}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== fatal_vomit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|fatal_vomit|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who vomited}}&lt;br /&gt;
{{hl2msg|short|victim|And who was killed or incapped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_call_for_help ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_call_for_help|string}}&lt;br /&gt;
{{hl2msg|short|userid|The actual player entity who is awaiting rescue.}}&lt;br /&gt;
{{hl2msg|long|subject|SurvivorRescue entity representing the player who needs to be rescued from the closet (used for position)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescued ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescued|string}}&lt;br /&gt;
{{hl2msg|short|rescuer|player that did the rescuing}}&lt;br /&gt;
{{hl2msg|short|victim|the survivor being rescued}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescue_abandoned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescue_abandoned|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== relocated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|relocated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was relocated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== respawning ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|respawning|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who started respawning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_frustrated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_frustrated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was culled}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_given ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_given|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who got the weapon}}&lt;br /&gt;
{{hl2msg|short|giver|player that did the giving}}&lt;br /&gt;
{{hl2msg|short|weapon|weapon id given}}&lt;br /&gt;
{{hl2msg|short|weaponentid|weapon entity id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an item is removed from a survivor's inventory}}&lt;br /&gt;
{{eventnote|Related Events|Called before heal_success, defibrillator_used, upgrade_pack_used, but called after pills_used and adrenaline_used}}&lt;br /&gt;
{{begin-hl2msg|weapon_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who dropped the weapon}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{hl2msg|short|propid|entindex of the dropped weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|Override from gameevents.res}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of breaker}}&lt;br /&gt;
{{hl2msg|long|entindex|entindex of thing breaking}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{hl2msg|bool|hulkonly|SF_BREAK_HULK_ONLY}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spawner_give_item ===&lt;br /&gt;
{{qnotice|A spawner has given a player an item (weapon, pills, ammo, health kit, etc)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spawner_give_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|Item recipient}}&lt;br /&gt;
{{hl2msg|string|item|Name of item given}}&lt;br /&gt;
{{hl2msg|long|spawner|entindex of the spawner entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== create_panic_event ===&lt;br /&gt;
{{qnotice|A panic event has been created, though not necessarily started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|create_panic_event|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was started the panic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pills ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pills|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_weapons ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_weapons|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|classname|Classname of the entity they see}}&lt;br /&gt;
{{hl2msg|string|entityname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_spawn_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_spawn_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|weaponname|weapon name, or &amp;quot;melee&amp;quot;}}&lt;br /&gt;
{{hl2msg|string|subtype|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_near ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_near|string}}&lt;br /&gt;
{{hl2msg|short|userid|The boomer}}&lt;br /&gt;
{{hl2msg|short|victim|The survivor whom the boomer has gotten very close to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== started_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|started_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_truck ===&lt;br /&gt;
{{qnotice|explain how pulling the lever on the gas truck will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_truck|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_panic_button ===&lt;br /&gt;
{{qnotice|explain that pressing this button will start a panic event.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_panic_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The panic button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_elevator_button ===&lt;br /&gt;
{{qnotice|explain how to operate the hospital elevator button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_elevator_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_lift_button ===&lt;br /&gt;
{{qnotice|explain how to operate the lift button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_lift_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lift button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_church_door ===&lt;br /&gt;
{{qnotice|explain how to provoke the crazy church guy.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_church_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The saferoom door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_emergency_door ===&lt;br /&gt;
{{qnotice|explain how to open the emergency door.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_emergency_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_crane ===&lt;br /&gt;
{{qnotice|explain how to lower the box on the crane.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_crane|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever/button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bridge ===&lt;br /&gt;
{{qnotice|explain how to close the gates to make a bridge.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_can_panic ===&lt;br /&gt;
{{qnotice|explain how to shoot the gas can.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_can_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The gas can}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_van_panic ===&lt;br /&gt;
{{qnotice|explain how to start the van.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_van_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The van}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mainstreet ===&lt;br /&gt;
{{qnotice|explain how to lower the forklift}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mainstreet|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The forklift}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_train_lever ===&lt;br /&gt;
{{qnotice|explain how to operate the train lever.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_train_lever|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever on box car}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_disturbance ===&lt;br /&gt;
{{qnotice|explain that disturbances (car alarm) attract infected horde}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_disturbance|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The source of disturbance}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_goal ===&lt;br /&gt;
{{qnotice|explain where to put the scavenge mode items}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_goal|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The collection device}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_leave_area ===&lt;br /&gt;
{{qnotice|explain that leaving the area, starts round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_leave_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== begin_scavenge_overtime ===&lt;br /&gt;
{{qnotice|enter overtime in a scavenge round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|begin_scavenge_overtime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_start ===&lt;br /&gt;
{{qnotice|a scavenge round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_start|string}}&lt;br /&gt;
{{hl2msg|byte|round|round number, 1 based}}&lt;br /&gt;
{{hl2msg|bool|firsthalf|start of the first half of the round}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scavenge_round_halftime ===&lt;br /&gt;
{{qnotice|a scavenge round is in halftime}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_halftime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_finished ===&lt;br /&gt;
{{qnotice|a scavenge round has ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_score_tied ===&lt;br /&gt;
{{qnotice|a team just tied the score}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_score_tied|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_round_start ===&lt;br /&gt;
{{qnotice|a versus round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_blocked ===&lt;br /&gt;
{{qnotice|can't pour the gas, someone else already is}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_completed ===&lt;br /&gt;
{{qnotice|player finished pouring a can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_completed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_dropped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_dropped|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_interrupted ===&lt;br /&gt;
{{qnotice|we got interuppted pouring the gas can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who interuppted us}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== use_target ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|use_target|string}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the use target}}&lt;br /&gt;
{{hl2msg|string|classname|classname of the use target}}&lt;br /&gt;
{{hl2msg|bool|isprop|is this a prop that can be carried}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When a Survivor presses +USE on a useable entity. i.e. Weapons, items, doors}}&lt;br /&gt;
{{eventnote|Related Events|If targetid is an item, item_pickup will be called prior to player_use}}&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the used entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== friendly_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|friendly_fire|string}}&lt;br /&gt;
{{hl2msg|short|attacker|player who fired the weapon}}&lt;br /&gt;
{{hl2msg|short|victim|player who got shot}}&lt;br /&gt;
{{hl2msg|short|guilty|player who was at fault}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_draw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_draw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_nodraw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_nodraw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== request_weapon_stats ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|request_weapon_stats|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user requesting their stats}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_talking_state ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_talking_state|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|bool|istalking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_pickup ===&lt;br /&gt;
{{qnotice|client event for player has picked up a weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_pickup|string}}&lt;br /&gt;
{{hl2msg|byte|context|split screen message context}}&lt;br /&gt;
{{hl2msg|byte|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|weaponslot|}}&lt;br /&gt;
{{hl2msg|byte|dropped_by_infected|gender of the Infected that dropped the weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hunter_punched ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_punched|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hunter_headshot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_headshot|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who made the headshot}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== zombie_ignited ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|zombie_ignited|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID of Tank}}&lt;br /&gt;
{{hl2msg|string|victimname|&amp;quot;Witch&amp;quot;, &amp;quot;Tank&amp;quot;, &amp;quot;Hunter&amp;quot;, &amp;quot;Smoker&amp;quot;, or &amp;quot;Infected&amp;quot;}}&lt;br /&gt;
{{hl2msg|bool|fire_ammo|true if incendiary ammo was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_exploded ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_exploded|string}}&lt;br /&gt;
{{hl2msg|short|userid|Boomer that exploded}}&lt;br /&gt;
{{hl2msg|short|attacker|player who caused the explosion}}&lt;br /&gt;
{{hl2msg|bool|splashedbile|Exploding boomer splashed bile on Survivors}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_pistol_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_pistol_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-pistol weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_at_40 ===&lt;br /&gt;
{{qnotice|This is networked, special event for game instructor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_at_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== total_ammo_below_40 ===&lt;br /&gt;
{{qnotice|sent for any ammo type, except those with max ammo 1, or infinite ammo, like pistols}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|total_ammo_below_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_hurt_concise ===&lt;br /&gt;
{{qnotice|Abbreviated version of 'player_hurt' that is networked}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt_concise|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tank_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead tank}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|solo|TRUE if a player single-handedly killed the Tank}}&lt;br /&gt;
{{hl2msg|bool|melee_only|TRUE if the tank was only killed by melee attacks (no blast, burn, or bullet damage)}}&lt;br /&gt;
{{hl2msg|bool|l4d1_only|TRUE if l4d1 survivors inflicted damage and the l4d2 survivors did not)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_write_failed ===&lt;br /&gt;
{{qnotice|Used for a notification message when an achievement fails to write}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_write_failed|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== ghost_spawn_time ===&lt;br /&gt;
{{qnotice|Used for clients to know how long until they become a ghost (and can spawn)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ghost_spawn_time|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player that is becoming a ghost}}&lt;br /&gt;
{{hl2msg|short|spawntime|How long of a wait until player is a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== survival_at_30min ===&lt;br /&gt;
{{qnotice|Used to know when we elapse 30 minutes on a survival map}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_at_30min|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_drawbridge ===&lt;br /&gt;
{{qnotice|Point out the button that will start the gauntlet finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_drawbridge ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_perimeter ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_perimeter|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_deactivate_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_deactivate_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_impound_lot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_impound_lot|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_window ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_window|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon_wait ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon_wait|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gauntlet_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gauntlet_finale_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_float ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_float|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_ferry_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_ferry_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hatch_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hatch_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_shack_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_shack_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_incendiary_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_incendiary_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_explosive_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_explosive_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== receive_upgrade ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|receive_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|upgrade|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_vehicle_arrival ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_vehicle_arrival|string}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_overheated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_overheated|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_burger_sign ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_burger_sign|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_destination ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_destination|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_lighting ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_lighting|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_finale_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_survival_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_survival_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_out_of_range ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ability_out_of_range|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_pyrotechnics ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_pyrotechnics|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio1 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio1|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio2 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio2|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gates_are_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gates_are_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c2m4_ticketbooth ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c2m4_ticketbooth|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_rescue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_rescue|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hotel_elevator_doors ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hotel_elevator_doors|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop_tanker ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop_tanker|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_generic ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_generic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_radio ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_carousel ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_carousel|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_return_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_return_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_save_items ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_save_items|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spit_burst ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spit_burst|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entered_spit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entered_spit|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m1_getgas ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m1_getgas|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m3_return_to_boat ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m3_return_to_boat|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c1m4_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c1m4_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== c1m4_scavenge_instructions ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|c1m4_scavenge_instructions|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== punched_clown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|punched_clown|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who punched the clown}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead charger}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|melee|TRUE if a player killed the charger with a melee weapon}}&lt;br /&gt;
{{hl2msg|bool|charging|TRUE if the charger was charging when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spitter_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spitter_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead spitter}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|has_spit|TRUE if the spitter spit at some point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|short|rescuer|Who stopped it}}&lt;br /&gt;
{{hl2msg|float|ride_length|Duration of our ride}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead jockey}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_melee_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_melee_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-melee weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_decapitated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_decapitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who did the decapitation}}&lt;br /&gt;
{{hl2msg|string|weapon|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrade_pack_added ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_added|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vomit_bomb_tank ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vomit_bomb_tank|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who used the bomb}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== triggered_car_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|triggered_car_alarm|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== panic_event_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|panic_event_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts charging}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_start ===&lt;br /&gt;
{{qnotice|The moment when the charger grabs a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_end ===&lt;br /&gt;
{{qnotice|The moment when the charger stops charging a survivor (and will soon start pummeling)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_impact ===&lt;br /&gt;
{{qnotice|When a charger impacts a survivor they aren't carrying}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was impacted}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts pummeling a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|user ID of the player who was charged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_end ===&lt;br /&gt;
{{qnotice|When the charger is cleared from the survivor or the survivor dies.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{hl2msg|short|rescuer|user ID of the player who rescued them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== strongman_bell_knocked_off ===&lt;br /&gt;
{{qnotice|The arcade bell on c2m4_barns}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|strongman_bell_knocked_off|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== molotov_thrown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|molotov_thrown|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gas_can_forced_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gas_can_forced_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player that forced the drop}}&lt;br /&gt;
{{hl2msg|short|victim|player that dropped it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_need_gnome_to_continue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_need_gnome_to_continue|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survivor_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survivor_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_item_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_item_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_rescue_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_rescue_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bodyshots_reduced ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bodyshots_reduced|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_witch_instant_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_witch_instant_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== set_instructor_group_enabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|set_instructor_group_enabled|string}}&lt;br /&gt;
{{hl2msg|string|group|}}&lt;br /&gt;
{{hl2msg|short|enabled|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== stashwhacker_game_won ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|stashwhacker_game_won|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_marker_reached ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_marker_reached|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|marker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== start_score_animation ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|start_score_animation|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survival_round_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_gas_can_destroyed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_gas_can_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player that destroyed it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_gate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_gate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_run ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_run|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c6m3_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c6m3_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_bridge_lowering ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_bridge_lowering|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== m60_streak_ended ===&lt;br /&gt;
{{qnotice|I was holding down the m60 trigger, and now I'm not}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|m60_streak_ended|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== chair_charged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|chair_charged|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== song_played ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|song_played|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== foot_locker_opened ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|foot_locker_opened|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10011</id>
		<title>Left 4 Dead 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=10011"/>
		<updated>2015-09-14T19:52:58Z</updated>

		<summary type="html">&lt;p&gt;Darkid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|a game event, name may be 32 charaters long; this extents the original player_death by a new fields}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID who died, userid should be used first, to get the dead Player.  Otherwise, it is not a player, so use this.}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|attackername|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if killer not a player, the entindex of who killed.  Again, use attacker first}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|attackerisbot|is the attacker a bot}}&lt;br /&gt;
{{hl2msg|string|victimname|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|bool|victimisbot|is the victim a bot}}&lt;br /&gt;
{{hl2msg|bool|abort|did the victim abort}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|float|victim_x|}}&lt;br /&gt;
{{hl2msg|float|victim_y|}}&lt;br /&gt;
{{hl2msg|float|victim_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|Registers all playable classes (Hunter, Smoker, Boomer, Tank, Survivors). See infected_hurt for Witch and Common Infected}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|Not networked}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|user id who attacked}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|short|health|remaining health points}}&lt;br /&gt;
{{hl2msg|byte|armor|remaining armor points}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used, if not the world}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{hl2msg|byte|dmg_armor|damage done to armor}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_team ===&lt;br /&gt;
{{qnotice|player change his team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_team|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|team|team id}}&lt;br /&gt;
{{hl2msg|byte|oldteam|old team id}}&lt;br /&gt;
{{hl2msg|bool|disconnect|team change because player disconnects}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_bot_replace ===&lt;br /&gt;
{{qnotice|Bot replaced a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_bot_replace|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bot_player_replace ===&lt;br /&gt;
{{qnotice|Player replaced a bot}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bot_player_replace|string}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_afk ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_afk|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_on_empty ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_on_empty|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name used}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_reload ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_reload|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|manual|player manually started the reload}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_zoom ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_zoom|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_use ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an infected uses their ability}}&lt;br /&gt;
{{eventnote|Issues|Doesn't fire for jockey}}&lt;br /&gt;
{{begin-hl2msg|ability_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname. Possible values: ability_lunge(hunter), ability_toungue(smoker), ability_vomit(boomer), ability_charge(charger), ability_spit(spitter)}}&lt;br /&gt;
{{hl2msg|short|context|enum of the way it was used (different for each ability)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who got some ammo from a weapon_ammo_spawner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== grenade_bounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|grenade_bounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hegrenade_detonate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hegrenade_detonate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bullet_impact ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bullet_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_footstep ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_footstep|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blind ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blind|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_falldamage ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_falldamage|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who got hurt}}&lt;br /&gt;
{{hl2msg|float|damage|for how much}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who grabbed the ledge}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_release ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who released from the ledge}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_moving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_moving|string}}&lt;br /&gt;
{{hl2msg|long|entindex|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{hl2msg|bool|closed|Was the door closed when it started opening?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_close ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_close|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who closed the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_unlocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_unlocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== rescue_door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|rescue_door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|long|entindex|door that opened}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_door_used ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_door_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_door_used_versus ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_door_used_versus|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone tried to push a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== success_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone pushed a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|success_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who openned it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_freeze_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_freeze_end|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_pre_entity ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_pre_entity|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_post_nav ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_post_nav|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_generate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_generate|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end_message ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end_message|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_ended ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_ended|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_started ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_started|string}}&lt;br /&gt;
{{hl2msg|string|issue|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|string|votedata|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|initiator|entity id of the player who initiated the vote}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_changed|string}}&lt;br /&gt;
{{hl2msg|byte|yesVotes|}}&lt;br /&gt;
{{hl2msg|byte|noVotes|}}&lt;br /&gt;
{{hl2msg|byte|potentialVotes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_passed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_passed|string}}&lt;br /&gt;
{{hl2msg|string|details|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_failed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_failed|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_cast_yes ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_yes|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_cast_no ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_no|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_hurt ===&lt;br /&gt;
{{qnotice|Registers for non-playable classes (Common Infected, Witch). See player_hurt for other playable classes}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|attacker|player userid who attacked}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of infected}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|short|amount|how much damage was done}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_death ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_death|string}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|infected_id|ID of the infected that died}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|short|weapon_id|ID of the weapon used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|minigun|signals a minigun kill}}&lt;br /&gt;
{{hl2msg|bool|blast|signals a death from blast damage}}&lt;br /&gt;
{{hl2msg|bool|submerged|indicates the infected was submerged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hostname_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hostname_changed|string}}&lt;br /&gt;
{{hl2msg|string|hostname|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== difficulty_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|difficulty_changed|string}}&lt;br /&gt;
{{hl2msg|short|newDifficulty|}}&lt;br /&gt;
{{hl2msg|short|oldDifficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_start|string}}&lt;br /&gt;
{{hl2msg|short|rushes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_rush ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_rush|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_escape_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_escape_start|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_incoming ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_incoming|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_ready ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_ready|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_leaving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_leaving|string}}&lt;br /&gt;
{{hl2msg|short|survivorcount|number of survivors that made it out}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_win ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_win|string}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|short|difficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mission_lost ===&lt;br /&gt;
{{qnotice|As in, the survivor team failed.  Opposite of finale_win, but not necessarily during the finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mission_lost|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_start|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_damaged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_damaged|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== final_reportscreen ===&lt;br /&gt;
{{qnotice|Right before the final report screen comes up, let awards possibly fire}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|final_reportscreen|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== map_transition ===&lt;br /&gt;
{{qnotice|When campaign cinematics start}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|map_transition|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_transitioned ===&lt;br /&gt;
{{qnotice|When campaign cinematics end and player is transitioned to first person view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_transitioned|string}}&lt;br /&gt;
{{hl2msg|short|userid|the person that just finished transitioning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{hl2msg|short|health_restored|amount of health restored}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Issues|subject is broken for this event, it always appears to be the player doing the healing}}&lt;br /&gt;
{{begin-hl2msg|heal_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was being healed, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person giving the ammo}}&lt;br /&gt;
{{hl2msg|short|subject|person receiving ammo}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== give_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|give_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|The giver of the weapon}}&lt;br /&gt;
{{hl2msg|short|recipient|The recipient of the weapon}}&lt;br /&gt;
{{hl2msg|short|weapon|The ID of the weapon given}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had the pills}}&lt;br /&gt;
{{hl2msg|short|subject|person swallowing the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_no_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_no_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_full ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_full|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_doesnt_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_doesnt_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pile_weapon_cant_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pile_weapon_cant_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo pile with a grenade launcher}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is defibrillating.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who used the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it helped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was defibrillating, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_item_already_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_item_already_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo upgrade twice}}&lt;br /&gt;
{{hl2msg|string|upgradeclass|classname of the upgrade we tried to use}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_failed_no_primary ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_failed_no_primary|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an upgrade without having a primary weapon}}&lt;br /&gt;
{{hl2msg|string|upgrade|name of the upgrade we tried to use, eg &amp;quot;INCENDIARY_AMMO&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== dead_survivor_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|dead_survivor_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|short|deadplayer|user id of the dead player represented}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== adrenaline_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|adrenaline_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had and used the adrenaline}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person who was revived}}&lt;br /&gt;
{{hl2msg|bool|lastlife|person revived will die if they fall again}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|1 if person revived was ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|person is ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated ===&lt;br /&gt;
{{qnotice|when a player becomes incapacitated.  This is also called when a tank is killed.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated_start ===&lt;br /&gt;
{{qnotice|when a player is about to become incapacitated, so you can see his last living state}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_start_area ===&lt;br /&gt;
{{qnotice|when a player spawns into the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who entered}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_first_spawn ===&lt;br /&gt;
{{qnotice|when a player spawns for the first time in a given mission}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_first_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who spawned}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
{{qnotice|This Event doesnt exist anymore 1.10.2012}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== player_left_start_area ===&lt;br /&gt;
{{qnotice|when a player leaves the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_checkpoint ===&lt;br /&gt;
{{qnotice|when a basecombatcharacter enters a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who entered}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one entering}}&lt;br /&gt;
{{hl2msg|long|door|Entindex of the checkpoint door the player entered to get here.}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|string|doorname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_left_checkpoint ===&lt;br /&gt;
{{qnotice|when a player leaves a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who left}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one exiting}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoved|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_shoved|string}}&lt;br /&gt;
{{hl2msg|short|entityid|the entity index of the one who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump_apex ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump_apex|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who jumped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was trying to move}}&lt;br /&gt;
{{hl2msg|short|blocker|player index who kept them from moving}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_now_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_now_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now it}}&lt;br /&gt;
{{hl2msg|short|attacker|player that did the it-ing}}&lt;br /&gt;
{{hl2msg|bool|exploded|whether it was vomit or explosion}}&lt;br /&gt;
{{hl2msg|bool|infected|is the vomit infectious}}&lt;br /&gt;
{{hl2msg|bool|by_boomer|came from a boomer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_no_longer_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_no_longer_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now no longer it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_harasser_set ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_harasser_set|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who woke up the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch woken up}}&lt;br /&gt;
{{hl2msg|bool|first|First time the witch set a harasser}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_spawn|string}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who killed the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch that was killed.}}&lt;br /&gt;
{{hl2msg|bool|oneshot|TRUE if the Witch was killed with one shot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|User ID of the tank spawning now}}&lt;br /&gt;
{{hl2msg|long|tankid|Entindex of tank spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== melee_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|melee_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who bashed the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|Entindex of infected what got killed}}&lt;br /&gt;
{{hl2msg|bool|ambush|Infected was unaware when killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== area_cleared ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|area_cleared|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who cleared the area}}&lt;br /&gt;
{{hl2msg|long|area|id of the cleared area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== award_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|award_earned|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who earned the award}}&lt;br /&gt;
{{hl2msg|long|entityid|client likes ent id}}&lt;br /&gt;
{{hl2msg|long|subjectentid|entity id of other party in the award, if any}}&lt;br /&gt;
{{hl2msg|short|award|id of award earned}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the grabbing}}&lt;br /&gt;
{{hl2msg|short|victim|player that got grabbed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_bent ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_bent|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_victim_died ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_victim_died|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_release ===&lt;br /&gt;
{{qnotice|Fired in all cases where the tongue releases a victim, whether choked or not, etc.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|victim|The (now released) victim}}&lt;br /&gt;
{{hl2msg|long|distance|Distance the victim was dragged.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== choke_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being choked}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_pull_stopped ===&lt;br /&gt;
{{qnotice|Called when a smoker tongue is cleared on a dragging player. Includes cuts.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_pull_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pulled}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lunge_shove ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_shove|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_pounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_pounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|long|distance|Distance from pounce start to contact}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== fatal_vomit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|fatal_vomit|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who vomited}}&lt;br /&gt;
{{hl2msg|short|victim|And who was killed or incapped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_call_for_help ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_call_for_help|string}}&lt;br /&gt;
{{hl2msg|short|userid|The actual player entity who is awaiting rescue.}}&lt;br /&gt;
{{hl2msg|long|subject|SurvivorRescue entity representing the player who needs to be rescued from the closet (used for position)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescued ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescued|string}}&lt;br /&gt;
{{hl2msg|short|rescuer|player that did the rescuing}}&lt;br /&gt;
{{hl2msg|short|victim|the survivor being rescued}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescue_abandoned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescue_abandoned|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== relocated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|relocated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was relocated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== respawning ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|respawning|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who started respawning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_frustrated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_frustrated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was culled}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_given ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_given|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who got the weapon}}&lt;br /&gt;
{{hl2msg|short|giver|player that did the giving}}&lt;br /&gt;
{{hl2msg|short|weapon|weapon id given}}&lt;br /&gt;
{{hl2msg|short|weaponentid|weapon entity id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an item is removed from a survivor's inventory}}&lt;br /&gt;
{{eventnote|Related Events|Called before heal_success, defibrillator_used, upgrade_pack_used, but called after pills_used and adrenaline_used}}&lt;br /&gt;
{{begin-hl2msg|weapon_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who dropped the weapon}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{hl2msg|short|propid|entindex of the dropped weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|Override from gameevents.res}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of breaker}}&lt;br /&gt;
{{hl2msg|long|entindex|entindex of thing breaking}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{hl2msg|bool|hulkonly|SF_BREAK_HULK_ONLY}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spawner_give_item ===&lt;br /&gt;
{{qnotice|A spawner has given a player an item (weapon, pills, ammo, health kit, etc)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spawner_give_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|Item recipient}}&lt;br /&gt;
{{hl2msg|string|item|Name of item given}}&lt;br /&gt;
{{hl2msg|long|spawner|entindex of the spawner entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== create_panic_event ===&lt;br /&gt;
{{qnotice|A panic event has been created, though not necessarily started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|create_panic_event|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was started the panic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pills ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pills|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_weapons ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_weapons|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|classname|Classname of the entity they see}}&lt;br /&gt;
{{hl2msg|string|entityname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_spawn_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_spawn_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|weaponname|weapon name, or &amp;quot;melee&amp;quot;}}&lt;br /&gt;
{{hl2msg|string|subtype|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_near ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_near|string}}&lt;br /&gt;
{{hl2msg|short|userid|The boomer}}&lt;br /&gt;
{{hl2msg|short|victim|The survivor whom the boomer has gotten very close to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== started_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|started_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_truck ===&lt;br /&gt;
{{qnotice|explain how pulling the lever on the gas truck will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_truck|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_panic_button ===&lt;br /&gt;
{{qnotice|explain that pressing this button will start a panic event.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_panic_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The panic button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_elevator_button ===&lt;br /&gt;
{{qnotice|explain how to operate the hospital elevator button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_elevator_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_lift_button ===&lt;br /&gt;
{{qnotice|explain how to operate the lift button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_lift_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lift button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_church_door ===&lt;br /&gt;
{{qnotice|explain how to provoke the crazy church guy.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_church_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The saferoom door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_emergency_door ===&lt;br /&gt;
{{qnotice|explain how to open the emergency door.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_emergency_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_crane ===&lt;br /&gt;
{{qnotice|explain how to lower the box on the crane.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_crane|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever/button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bridge ===&lt;br /&gt;
{{qnotice|explain how to close the gates to make a bridge.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_can_panic ===&lt;br /&gt;
{{qnotice|explain how to shoot the gas can.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_can_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The gas can}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_van_panic ===&lt;br /&gt;
{{qnotice|explain how to start the van.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_van_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The van}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mainstreet ===&lt;br /&gt;
{{qnotice|explain how to lower the forklift}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mainstreet|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The forklift}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_train_lever ===&lt;br /&gt;
{{qnotice|explain how to operate the train lever.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_train_lever|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever on box car}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_disturbance ===&lt;br /&gt;
{{qnotice|explain that disturbances (car alarm) attract infected horde}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_disturbance|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The source of disturbance}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_goal ===&lt;br /&gt;
{{qnotice|explain where to put the scavenge mode items}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_goal|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The collection device}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_leave_area ===&lt;br /&gt;
{{qnotice|explain that leaving the area, starts round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_leave_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== begin_scavenge_overtime ===&lt;br /&gt;
{{qnotice|enter overtime in a scavenge round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|begin_scavenge_overtime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_start ===&lt;br /&gt;
{{qnotice|a scavenge round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_start|string}}&lt;br /&gt;
{{hl2msg|byte|round|round number, 1 based}}&lt;br /&gt;
{{hl2msg|bool|firsthalf|start of the first half of the round}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scavenge_round_halftime ===&lt;br /&gt;
{{qnotice|a scavenge round is in halftime}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_halftime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_finished ===&lt;br /&gt;
{{qnotice|a scavenge round has ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_score_tied ===&lt;br /&gt;
{{qnotice|a team just tied the score}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_score_tied|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_round_start ===&lt;br /&gt;
{{qnotice|a versus round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_blocked ===&lt;br /&gt;
{{qnotice|can't pour the gas, someone else already is}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_completed ===&lt;br /&gt;
{{qnotice|player finished pouring a can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_completed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_dropped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_dropped|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_interrupted ===&lt;br /&gt;
{{qnotice|we got interuppted pouring the gas can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who interuppted us}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== use_target ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|use_target|string}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the use target}}&lt;br /&gt;
{{hl2msg|string|classname|classname of the use target}}&lt;br /&gt;
{{hl2msg|bool|isprop|is this a prop that can be carried}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When a Survivor presses +USE on a useable entity. i.e. Weapons, items, doors}}&lt;br /&gt;
{{eventnote|Related Events|If targetid is an item, item_pickup will be called prior to player_use}}&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the used entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== friendly_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|friendly_fire|string}}&lt;br /&gt;
{{hl2msg|short|attacker|player who fired the weapon}}&lt;br /&gt;
{{hl2msg|short|victim|player who got shot}}&lt;br /&gt;
{{hl2msg|short|guilty|player who was at fault}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_draw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_draw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_nodraw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_nodraw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== request_weapon_stats ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|request_weapon_stats|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user requesting their stats}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_talking_state ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_talking_state|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|bool|istalking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_pickup ===&lt;br /&gt;
{{qnotice|client event for player has picked up a weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_pickup|string}}&lt;br /&gt;
{{hl2msg|byte|context|split screen message context}}&lt;br /&gt;
{{hl2msg|byte|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|weaponslot|}}&lt;br /&gt;
{{hl2msg|byte|dropped_by_infected|gender of the Infected that dropped the weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hunter_punched ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_punched|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hunter_headshot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_headshot|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who made the headshot}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== zombie_ignited ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|zombie_ignited|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID of Tank}}&lt;br /&gt;
{{hl2msg|string|victimname|&amp;quot;Witch&amp;quot;, &amp;quot;Tank&amp;quot;, &amp;quot;Hunter&amp;quot;, &amp;quot;Smoker&amp;quot;, or &amp;quot;Infected&amp;quot;}}&lt;br /&gt;
{{hl2msg|bool|fire_ammo|true if incendiary ammo was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_exploded ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_exploded|string}}&lt;br /&gt;
{{hl2msg|short|userid|Boomer that exploded}}&lt;br /&gt;
{{hl2msg|short|attacker|player who caused the explosion}}&lt;br /&gt;
{{hl2msg|bool|splashedbile|Exploding boomer splashed bile on Survivors}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_pistol_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_pistol_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-pistol weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_at_40 ===&lt;br /&gt;
{{qnotice|This is networked, special event for game instructor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_at_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== total_ammo_below_40 ===&lt;br /&gt;
{{qnotice|sent for any ammo type, except those with max ammo 1, or infinite ammo, like pistols}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|total_ammo_below_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_hurt_concise ===&lt;br /&gt;
{{qnotice|Abbreviated version of 'player_hurt' that is networked}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt_concise|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tank_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead tank}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|solo|TRUE if a player single-handedly killed the Tank}}&lt;br /&gt;
{{hl2msg|bool|melee_only|TRUE if the tank was only killed by melee attacks (no blast, burn, or bullet damage)}}&lt;br /&gt;
{{hl2msg|bool|l4d1_only|TRUE if l4d1 survivors inflicted damage and the l4d2 survivors did not)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_write_failed ===&lt;br /&gt;
{{qnotice|Used for a notification message when an achievement fails to write}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_write_failed|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== ghost_spawn_time ===&lt;br /&gt;
{{qnotice|Used for clients to know how long until they become a ghost (and can spawn)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ghost_spawn_time|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player that is becoming a ghost}}&lt;br /&gt;
{{hl2msg|short|spawntime|How long of a wait until player is a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== survival_at_30min ===&lt;br /&gt;
{{qnotice|Used to know when we elapse 30 minutes on a survival map}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_at_30min|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_drawbridge ===&lt;br /&gt;
{{qnotice|Point out the button that will start the gauntlet finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_drawbridge ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_perimeter ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_perimeter|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_deactivate_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_deactivate_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_impound_lot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_impound_lot|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_window ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_window|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon_wait ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon_wait|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gauntlet_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gauntlet_finale_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_float ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_float|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_ferry_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_ferry_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hatch_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hatch_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_shack_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_shack_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_incendiary_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_incendiary_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_explosive_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_explosive_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== receive_upgrade ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|receive_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|upgrade|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_vehicle_arrival ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_vehicle_arrival|string}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_overheated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_overheated|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_burger_sign ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_burger_sign|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_destination ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_destination|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_lighting ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_lighting|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_finale_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_survival_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_survival_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_out_of_range ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ability_out_of_range|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_pyrotechnics ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_pyrotechnics|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio1 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio1|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio2 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio2|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gates_are_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gates_are_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c2m4_ticketbooth ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c2m4_ticketbooth|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_rescue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_rescue|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hotel_elevator_doors ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hotel_elevator_doors|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop_tanker ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop_tanker|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_generic ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_generic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_radio ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_carousel ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_carousel|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_return_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_return_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_save_items ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_save_items|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spit_burst ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spit_burst|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entered_spit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entered_spit|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m1_getgas ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m1_getgas|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m3_return_to_boat ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m3_return_to_boat|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c1m4_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c1m4_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== c1m4_scavenge_instructions ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|c1m4_scavenge_instructions|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== punched_clown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|punched_clown|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who punched the clown}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead charger}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|melee|TRUE if a player killed the charger with a melee weapon}}&lt;br /&gt;
{{hl2msg|bool|charging|TRUE if the charger was charging when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spitter_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spitter_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead spitter}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|has_spit|TRUE if the spitter spit at some point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|short|rescuer|Who stopped it}}&lt;br /&gt;
{{hl2msg|float|ride_length|Duration of our ride}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead jockey}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_melee_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_melee_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-melee weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_decapitated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_decapitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who did the decapitation}}&lt;br /&gt;
{{hl2msg|string|weapon|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrade_pack_added ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_added|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vomit_bomb_tank ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vomit_bomb_tank|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who used the bomb}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== triggered_car_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|triggered_car_alarm|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== panic_event_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|panic_event_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts charging}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_start ===&lt;br /&gt;
{{qnotice|The moment when the charger grabs a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_end ===&lt;br /&gt;
{{qnotice|The moment when the charger stops charging a survivor (and will soon start pummeling)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_impact ===&lt;br /&gt;
{{qnotice|When a charger impacts a survivor they aren't carrying}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_start ===&lt;br /&gt;
{{qnotice|The moment when the charger starts pummeling a survivor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_end ===&lt;br /&gt;
{{qnotice|When the charger is cleared from the survivor or the survivor dies.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== strongman_bell_knocked_off ===&lt;br /&gt;
{{qnotice|The arcade bell on c2m4_barns}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|strongman_bell_knocked_off|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== molotov_thrown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|molotov_thrown|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gas_can_forced_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gas_can_forced_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player that forced the drop}}&lt;br /&gt;
{{hl2msg|short|victim|player that dropped it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_need_gnome_to_continue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_need_gnome_to_continue|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survivor_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survivor_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_item_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_item_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_rescue_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_rescue_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bodyshots_reduced ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bodyshots_reduced|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_witch_instant_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_witch_instant_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== set_instructor_group_enabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|set_instructor_group_enabled|string}}&lt;br /&gt;
{{hl2msg|string|group|}}&lt;br /&gt;
{{hl2msg|short|enabled|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== stashwhacker_game_won ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|stashwhacker_game_won|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_marker_reached ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_marker_reached|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|marker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== start_score_animation ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|start_score_animation|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survival_round_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_gas_can_destroyed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_gas_can_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player that destroyed it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_gate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_gate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_run ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_run|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c6m3_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c6m3_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_bridge_lowering ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_bridge_lowering|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== m60_streak_ended ===&lt;br /&gt;
{{qnotice|I was holding down the m60 trigger, and now I'm not}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|m60_streak_ended|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== chair_charged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|chair_charged|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== song_played ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|song_played|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== foot_locker_opened ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|foot_locker_opened|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=9790</id>
		<title>Left 4 Dead 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=9790"/>
		<updated>2015-01-30T02:45:04Z</updated>

		<summary type="html">&lt;p&gt;Darkid: /* tongue_pull_stopped */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|a game event, name may be 32 charaters long; this extents the original player_death by a new fields}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID who died, userid should be used first, to get the dead Player.  Otherwise, it is not a player, so use this.}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|attackername|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if killer not a player, the entindex of who killed.  Again, use attacker first}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|attackerisbot|is the attacker a bot}}&lt;br /&gt;
{{hl2msg|string|victimname|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|bool|victimisbot|is the victim a bot}}&lt;br /&gt;
{{hl2msg|bool|abort|did the victim abort}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|float|victim_x|}}&lt;br /&gt;
{{hl2msg|float|victim_y|}}&lt;br /&gt;
{{hl2msg|float|victim_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|Registers all playable classes (Hunter, Smoker, Boomer, Tank, Survivors). See infected_hurt for Witch and Common Infected}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|Not networked}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|user id who attacked}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|short|health|remaining health points}}&lt;br /&gt;
{{hl2msg|byte|armor|remaining armor points}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used, if not the world}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{hl2msg|byte|dmg_armor|damage done to armor}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_team ===&lt;br /&gt;
{{qnotice|player change his team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_team|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|team|team id}}&lt;br /&gt;
{{hl2msg|byte|oldteam|old team id}}&lt;br /&gt;
{{hl2msg|bool|disconnect|team change because player disconnects}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_bot_replace ===&lt;br /&gt;
{{qnotice|Bot replaced a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_bot_replace|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bot_player_replace ===&lt;br /&gt;
{{qnotice|Player replaced a bot}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bot_player_replace|string}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_afk ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_afk|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_on_empty ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_on_empty|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name used}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_reload ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_reload|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|manual|player manually started the reload}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_zoom ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_zoom|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_use ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an infected uses their ability}}&lt;br /&gt;
{{eventnote|Issues|Doesn't fire for jockey}}&lt;br /&gt;
{{begin-hl2msg|ability_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname. Possible values: ability_lunge(hunter), ability_toungue(smoker), ability_vomit(boomer), ability_charge(charger), ability_spit(spitter)}}&lt;br /&gt;
{{hl2msg|short|context|enum of the way it was used (different for each ability)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who got some ammo from a weapon_ammo_spawner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== grenade_bounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|grenade_bounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hegrenade_detonate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hegrenade_detonate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bullet_impact ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bullet_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_footstep ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_footstep|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blind ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blind|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_falldamage ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_falldamage|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who got hurt}}&lt;br /&gt;
{{hl2msg|float|damage|for how much}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who grabbed the ledge}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_release ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who released from the ledge}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_moving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_moving|string}}&lt;br /&gt;
{{hl2msg|long|entindex|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{hl2msg|bool|closed|Was the door closed when it started opening?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_close ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_close|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who closed the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_unlocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_unlocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== rescue_door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|rescue_door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|long|entindex|door that opened}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_door_used ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_door_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_door_used_versus ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_door_used_versus|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone tried to push a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== success_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone pushed a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|success_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who openned it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_freeze_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_freeze_end|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_pre_entity ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_pre_entity|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_post_nav ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_post_nav|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_generate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_generate|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end_message ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end_message|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_ended ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_ended|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_started ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_started|string}}&lt;br /&gt;
{{hl2msg|string|issue|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|string|votedata|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|initiator|entity id of the player who initiated the vote}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_changed|string}}&lt;br /&gt;
{{hl2msg|byte|yesVotes|}}&lt;br /&gt;
{{hl2msg|byte|noVotes|}}&lt;br /&gt;
{{hl2msg|byte|potentialVotes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_passed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_passed|string}}&lt;br /&gt;
{{hl2msg|string|details|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_failed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_failed|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_cast_yes ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_yes|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_cast_no ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_no|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_hurt ===&lt;br /&gt;
{{qnotice|Registers for non-playable classes (Common Infected, Witch). See player_hurt for other playable classes}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|attacker|player userid who attacked}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of infected}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|short|amount|how much damage was done}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_death ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_death|string}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|infected_id|ID of the infected that died}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|short|weapon_id|ID of the weapon used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|minigun|signals a minigun kill}}&lt;br /&gt;
{{hl2msg|bool|blast|signals a death from blast damage}}&lt;br /&gt;
{{hl2msg|bool|submerged|indicates the infected was submerged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hostname_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hostname_changed|string}}&lt;br /&gt;
{{hl2msg|string|hostname|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== difficulty_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|difficulty_changed|string}}&lt;br /&gt;
{{hl2msg|short|newDifficulty|}}&lt;br /&gt;
{{hl2msg|short|oldDifficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_start|string}}&lt;br /&gt;
{{hl2msg|short|rushes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_rush ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_rush|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_escape_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_escape_start|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_incoming ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_incoming|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_ready ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_ready|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_leaving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_leaving|string}}&lt;br /&gt;
{{hl2msg|short|survivorcount|number of survivors that made it out}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_win ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_win|string}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|short|difficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mission_lost ===&lt;br /&gt;
{{qnotice|As in, the survivor team failed.  Opposite of finale_win, but not necessarily during the finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mission_lost|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_start|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_damaged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_damaged|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== final_reportscreen ===&lt;br /&gt;
{{qnotice|Right before the final report screen comes up, let awards possibly fire}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|final_reportscreen|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== map_transition ===&lt;br /&gt;
{{qnotice|When campaign cinematics start}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|map_transition|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_transitioned ===&lt;br /&gt;
{{qnotice|When campaign cinematics end and player is transitioned to first person view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_transitioned|string}}&lt;br /&gt;
{{hl2msg|short|userid|the person that just finished transitioning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{hl2msg|short|health_restored|amount of health restored}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Issues|subject is broken for this event, it always appears to be the player doing the healing}}&lt;br /&gt;
{{begin-hl2msg|heal_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was being healed, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person giving the ammo}}&lt;br /&gt;
{{hl2msg|short|subject|person receiving ammo}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== give_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|give_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|The giver of the weapon}}&lt;br /&gt;
{{hl2msg|short|recipient|The recipient of the weapon}}&lt;br /&gt;
{{hl2msg|short|weapon|The ID of the weapon given}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had the pills}}&lt;br /&gt;
{{hl2msg|short|subject|person swallowing the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_no_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_no_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_full ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_full|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_doesnt_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_doesnt_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pile_weapon_cant_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pile_weapon_cant_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo pile with a grenade launcher}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is defibrillating.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who used the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it helped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was defibrillating, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_item_already_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_item_already_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo upgrade twice}}&lt;br /&gt;
{{hl2msg|string|upgradeclass|classname of the upgrade we tried to use}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_failed_no_primary ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_failed_no_primary|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an upgrade without having a primary weapon}}&lt;br /&gt;
{{hl2msg|string|upgrade|name of the upgrade we tried to use, eg &amp;quot;INCENDIARY_AMMO&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== dead_survivor_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|dead_survivor_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|short|deadplayer|user id of the dead player represented}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== adrenaline_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|adrenaline_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had and used the adrenaline}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person who was revived}}&lt;br /&gt;
{{hl2msg|bool|lastlife|person revived will die if they fall again}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|1 if person revived was ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|person is ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated ===&lt;br /&gt;
{{qnotice|when a player becomes incapacitated.  This is also called when a tank is killed.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated_start ===&lt;br /&gt;
{{qnotice|when a player is about to become incapacitated, so you can see his last living state}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_start_area ===&lt;br /&gt;
{{qnotice|when a player spawns into the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who entered}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_first_spawn ===&lt;br /&gt;
{{qnotice|when a player spawns for the first time in a given mission}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_first_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who spawned}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
{{qnotice|This Event doesnt exist anymore 1.10.2012}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== player_left_start_area ===&lt;br /&gt;
{{qnotice|when a player leaves the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_checkpoint ===&lt;br /&gt;
{{qnotice|when a basecombatcharacter enters a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who entered}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one entering}}&lt;br /&gt;
{{hl2msg|long|door|Entindex of the checkpoint door the player entered to get here.}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|string|doorname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_left_checkpoint ===&lt;br /&gt;
{{qnotice|when a player leaves a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who left}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one exiting}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoved|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_shoved|string}}&lt;br /&gt;
{{hl2msg|short|entityid|the entity index of the one who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump_apex ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump_apex|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who jumped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was trying to move}}&lt;br /&gt;
{{hl2msg|short|blocker|player index who kept them from moving}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_now_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_now_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now it}}&lt;br /&gt;
{{hl2msg|short|attacker|player that did the it-ing}}&lt;br /&gt;
{{hl2msg|bool|exploded|whether it was vomit or explosion}}&lt;br /&gt;
{{hl2msg|bool|infected|is the vomit infectious}}&lt;br /&gt;
{{hl2msg|bool|by_boomer|came from a boomer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_no_longer_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_no_longer_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now no longer it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_harasser_set ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_harasser_set|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who woke up the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch woken up}}&lt;br /&gt;
{{hl2msg|bool|first|First time the witch set a harasser}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_spawn|string}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who killed the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch that was killed.}}&lt;br /&gt;
{{hl2msg|bool|oneshot|TRUE if the Witch was killed with one shot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|User ID of the tank spawning now}}&lt;br /&gt;
{{hl2msg|long|tankid|Entindex of tank spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== melee_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|melee_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who bashed the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|Entindex of infected what got killed}}&lt;br /&gt;
{{hl2msg|bool|ambush|Infected was unaware when killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== area_cleared ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|area_cleared|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who cleared the area}}&lt;br /&gt;
{{hl2msg|long|area|id of the cleared area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== award_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|award_earned|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who earned the award}}&lt;br /&gt;
{{hl2msg|long|entityid|client likes ent id}}&lt;br /&gt;
{{hl2msg|long|subjectentid|entity id of other party in the award, if any}}&lt;br /&gt;
{{hl2msg|short|award|id of award earned}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the grabbing}}&lt;br /&gt;
{{hl2msg|short|victim|player that got grabbed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_bent ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_bent|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_victim_died ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_victim_died|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_release ===&lt;br /&gt;
{{qnotice|Fired in all cases where the tongue releases a victim, whether choked or not, etc.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|victim|The (now released) victim}}&lt;br /&gt;
{{hl2msg|long|distance|Distance the victim was dragged.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== choke_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being choked}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_pull_stopped ===&lt;br /&gt;
{{qnotice|Called when a smoker tongue is cleared on a dragging player. Includes cuts.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_pull_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pulled}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== lunge_shove ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_shove|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_pounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_pounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|long|distance|Distance from pounce start to contact}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== fatal_vomit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|fatal_vomit|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who vomited}}&lt;br /&gt;
{{hl2msg|short|victim|And who was killed or incapped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_call_for_help ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_call_for_help|string}}&lt;br /&gt;
{{hl2msg|short|userid|The actual player entity who is awaiting rescue.}}&lt;br /&gt;
{{hl2msg|long|subject|SurvivorRescue entity representing the player who needs to be rescued from the closet (used for position)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescued ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescued|string}}&lt;br /&gt;
{{hl2msg|short|rescuer|player that did the rescuing}}&lt;br /&gt;
{{hl2msg|short|victim|the survivor being rescued}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescue_abandoned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescue_abandoned|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== relocated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|relocated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was relocated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== respawning ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|respawning|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who started respawning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_frustrated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_frustrated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was culled}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_given ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_given|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who got the weapon}}&lt;br /&gt;
{{hl2msg|short|giver|player that did the giving}}&lt;br /&gt;
{{hl2msg|short|weapon|weapon id given}}&lt;br /&gt;
{{hl2msg|short|weaponentid|weapon entity id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an item is removed from a survivor's inventory}}&lt;br /&gt;
{{eventnote|Related Events|Called before heal_success, defibrillator_used, upgrade_pack_used, but called after pills_used and adrenaline_used}}&lt;br /&gt;
{{begin-hl2msg|weapon_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who dropped the weapon}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{hl2msg|short|propid|entindex of the dropped weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|Override from gameevents.res}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of breaker}}&lt;br /&gt;
{{hl2msg|long|entindex|entindex of thing breaking}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{hl2msg|bool|hulkonly|SF_BREAK_HULK_ONLY}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spawner_give_item ===&lt;br /&gt;
{{qnotice|A spawner has given a player an item (weapon, pills, ammo, health kit, etc)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spawner_give_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|Item recipient}}&lt;br /&gt;
{{hl2msg|string|item|Name of item given}}&lt;br /&gt;
{{hl2msg|long|spawner|entindex of the spawner entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== create_panic_event ===&lt;br /&gt;
{{qnotice|A panic event has been created, though not necessarily started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|create_panic_event|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was started the panic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pills ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pills|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_weapons ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_weapons|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|classname|Classname of the entity they see}}&lt;br /&gt;
{{hl2msg|string|entityname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_spawn_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_spawn_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|weaponname|weapon name, or &amp;quot;melee&amp;quot;}}&lt;br /&gt;
{{hl2msg|string|subtype|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_near ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_near|string}}&lt;br /&gt;
{{hl2msg|short|userid|The boomer}}&lt;br /&gt;
{{hl2msg|short|victim|The survivor whom the boomer has gotten very close to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== started_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|started_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_truck ===&lt;br /&gt;
{{qnotice|explain how pulling the lever on the gas truck will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_truck|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_panic_button ===&lt;br /&gt;
{{qnotice|explain that pressing this button will start a panic event.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_panic_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The panic button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_elevator_button ===&lt;br /&gt;
{{qnotice|explain how to operate the hospital elevator button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_elevator_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_lift_button ===&lt;br /&gt;
{{qnotice|explain how to operate the lift button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_lift_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lift button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_church_door ===&lt;br /&gt;
{{qnotice|explain how to provoke the crazy church guy.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_church_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The saferoom door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_emergency_door ===&lt;br /&gt;
{{qnotice|explain how to open the emergency door.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_emergency_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_crane ===&lt;br /&gt;
{{qnotice|explain how to lower the box on the crane.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_crane|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever/button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bridge ===&lt;br /&gt;
{{qnotice|explain how to close the gates to make a bridge.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_can_panic ===&lt;br /&gt;
{{qnotice|explain how to shoot the gas can.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_can_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The gas can}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_van_panic ===&lt;br /&gt;
{{qnotice|explain how to start the van.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_van_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The van}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mainstreet ===&lt;br /&gt;
{{qnotice|explain how to lower the forklift}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mainstreet|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The forklift}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_train_lever ===&lt;br /&gt;
{{qnotice|explain how to operate the train lever.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_train_lever|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever on box car}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_disturbance ===&lt;br /&gt;
{{qnotice|explain that disturbances (car alarm) attract infected horde}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_disturbance|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The source of disturbance}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_goal ===&lt;br /&gt;
{{qnotice|explain where to put the scavenge mode items}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_goal|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The collection device}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_leave_area ===&lt;br /&gt;
{{qnotice|explain that leaving the area, starts round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_leave_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== begin_scavenge_overtime ===&lt;br /&gt;
{{qnotice|enter overtime in a scavenge round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|begin_scavenge_overtime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_start ===&lt;br /&gt;
{{qnotice|a scavenge round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_start|string}}&lt;br /&gt;
{{hl2msg|byte|round|round number, 1 based}}&lt;br /&gt;
{{hl2msg|bool|firsthalf|start of the first half of the round}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scavenge_round_halftime ===&lt;br /&gt;
{{qnotice|a scavenge round is in halftime}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_halftime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_finished ===&lt;br /&gt;
{{qnotice|a scavenge round has ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_score_tied ===&lt;br /&gt;
{{qnotice|a team just tied the score}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_score_tied|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_round_start ===&lt;br /&gt;
{{qnotice|a versus round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_blocked ===&lt;br /&gt;
{{qnotice|can't pour the gas, someone else already is}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_completed ===&lt;br /&gt;
{{qnotice|player finished pouring a can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_completed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_dropped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_dropped|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_interrupted ===&lt;br /&gt;
{{qnotice|we got interuppted pouring the gas can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who interuppted us}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== use_target ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|use_target|string}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the use target}}&lt;br /&gt;
{{hl2msg|string|classname|classname of the use target}}&lt;br /&gt;
{{hl2msg|bool|isprop|is this a prop that can be carried}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When a Survivor presses +USE on a useable entity. i.e. Weapons, items, doors}}&lt;br /&gt;
{{eventnote|Related Events|If targetid is an item, item_pickup will be called prior to player_use}}&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the used entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== friendly_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|friendly_fire|string}}&lt;br /&gt;
{{hl2msg|short|attacker|player who fired the weapon}}&lt;br /&gt;
{{hl2msg|short|victim|player who got shot}}&lt;br /&gt;
{{hl2msg|short|guilty|player who was at fault}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_draw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_draw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_nodraw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_nodraw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== request_weapon_stats ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|request_weapon_stats|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user requesting their stats}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_talking_state ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_talking_state|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|bool|istalking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_pickup ===&lt;br /&gt;
{{qnotice|client event for player has picked up a weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_pickup|string}}&lt;br /&gt;
{{hl2msg|byte|context|split screen message context}}&lt;br /&gt;
{{hl2msg|byte|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|weaponslot|}}&lt;br /&gt;
{{hl2msg|byte|dropped_by_infected|gender of the Infected that dropped the weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hunter_punched ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_punched|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hunter_headshot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_headshot|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who made the headshot}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== zombie_ignited ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|zombie_ignited|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID of Tank}}&lt;br /&gt;
{{hl2msg|string|victimname|&amp;quot;Witch&amp;quot;, &amp;quot;Tank&amp;quot;, &amp;quot;Hunter&amp;quot;, &amp;quot;Smoker&amp;quot;, or &amp;quot;Infected&amp;quot;}}&lt;br /&gt;
{{hl2msg|bool|fire_ammo|true if incendiary ammo was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_exploded ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_exploded|string}}&lt;br /&gt;
{{hl2msg|short|userid|Boomer that exploded}}&lt;br /&gt;
{{hl2msg|short|attacker|player who caused the explosion}}&lt;br /&gt;
{{hl2msg|bool|splashedbile|Exploding boomer splashed bile on Survivors}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_pistol_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_pistol_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-pistol weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_at_40 ===&lt;br /&gt;
{{qnotice|This is networked, special event for game instructor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_at_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== total_ammo_below_40 ===&lt;br /&gt;
{{qnotice|sent for any ammo type, except those with max ammo 1, or infinite ammo, like pistols}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|total_ammo_below_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_hurt_concise ===&lt;br /&gt;
{{qnotice|Abbreviated version of 'player_hurt' that is networked}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt_concise|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tank_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead tank}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|solo|TRUE if a player single-handedly killed the Tank}}&lt;br /&gt;
{{hl2msg|bool|melee_only|TRUE if the tank was only killed by melee attacks (no blast, burn, or bullet damage)}}&lt;br /&gt;
{{hl2msg|bool|l4d1_only|TRUE if l4d1 survivors inflicted damage and the l4d2 survivors did not)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_write_failed ===&lt;br /&gt;
{{qnotice|Used for a notification message when an achievement fails to write}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_write_failed|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== ghost_spawn_time ===&lt;br /&gt;
{{qnotice|Used for clients to know how long until they become a ghost (and can spawn)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ghost_spawn_time|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player that is becoming a ghost}}&lt;br /&gt;
{{hl2msg|short|spawntime|How long of a wait until player is a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== survival_at_30min ===&lt;br /&gt;
{{qnotice|Used to know when we elapse 30 minutes on a survival map}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_at_30min|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_drawbridge ===&lt;br /&gt;
{{qnotice|Point out the button that will start the gauntlet finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_drawbridge ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_perimeter ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_perimeter|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_deactivate_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_deactivate_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_impound_lot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_impound_lot|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_window ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_window|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon_wait ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon_wait|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gauntlet_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gauntlet_finale_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_float ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_float|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_ferry_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_ferry_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hatch_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hatch_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_shack_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_shack_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_incendiary_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_incendiary_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_explosive_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_explosive_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== receive_upgrade ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|receive_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|upgrade|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_vehicle_arrival ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_vehicle_arrival|string}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_overheated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_overheated|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_burger_sign ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_burger_sign|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_destination ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_destination|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_lighting ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_lighting|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_finale_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_survival_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_survival_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_out_of_range ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ability_out_of_range|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_pyrotechnics ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_pyrotechnics|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio1 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio1|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio2 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio2|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gates_are_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gates_are_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c2m4_ticketbooth ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c2m4_ticketbooth|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_rescue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_rescue|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hotel_elevator_doors ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hotel_elevator_doors|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop_tanker ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop_tanker|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_generic ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_generic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_radio ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_carousel ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_carousel|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_return_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_return_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_save_items ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_save_items|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spit_burst ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spit_burst|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entered_spit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entered_spit|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m1_getgas ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m1_getgas|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m3_return_to_boat ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m3_return_to_boat|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c1m4_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c1m4_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== c1m4_scavenge_instructions ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|c1m4_scavenge_instructions|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== punched_clown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|punched_clown|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who punched the clown}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead charger}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|melee|TRUE if a player killed the charger with a melee weapon}}&lt;br /&gt;
{{hl2msg|bool|charging|TRUE if the charger was charging when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spitter_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spitter_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead spitter}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|has_spit|TRUE if the spitter spit at some point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|short|rescuer|Who stopped it}}&lt;br /&gt;
{{hl2msg|float|ride_length|Duration of our ride}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead jockey}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_melee_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_melee_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-melee weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_decapitated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_decapitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who did the decapitation}}&lt;br /&gt;
{{hl2msg|string|weapon|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrade_pack_added ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_added|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vomit_bomb_tank ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vomit_bomb_tank|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who used the bomb}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== triggered_car_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|triggered_car_alarm|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== panic_event_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|panic_event_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_impact ===&lt;br /&gt;
{{qnotice|ran into a survivor we aren't carrying}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== strongman_bell_knocked_off ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|strongman_bell_knocked_off|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== molotov_thrown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|molotov_thrown|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gas_can_forced_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gas_can_forced_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player that forced the drop}}&lt;br /&gt;
{{hl2msg|short|victim|player that dropped it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_need_gnome_to_continue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_need_gnome_to_continue|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survivor_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survivor_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_item_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_item_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_rescue_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_rescue_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bodyshots_reduced ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bodyshots_reduced|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_witch_instant_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_witch_instant_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== set_instructor_group_enabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|set_instructor_group_enabled|string}}&lt;br /&gt;
{{hl2msg|string|group|}}&lt;br /&gt;
{{hl2msg|short|enabled|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== stashwhacker_game_won ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|stashwhacker_game_won|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_marker_reached ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_marker_reached|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|marker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== start_score_animation ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|start_score_animation|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survival_round_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_gas_can_destroyed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_gas_can_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player that destroyed it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_gate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_gate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_run ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_run|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c6m3_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c6m3_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_bridge_lowering ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_bridge_lowering|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== m60_streak_ended ===&lt;br /&gt;
{{qnotice|I was holding down the m60 trigger, and now I'm not}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|m60_streak_ended|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== chair_charged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|chair_charged|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== song_played ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|song_played|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== foot_locker_opened ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|foot_locker_opened|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=9789</id>
		<title>Left 4 Dead 2 Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Left_4_Dead_2_Events&amp;diff=9789"/>
		<updated>2015-01-30T02:43:47Z</updated>

		<summary type="html">&lt;p&gt;Darkid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|a game event, name may be 32 charaters long; this extents the original player_death by a new fields}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_death|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who died}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID who died, userid should be used first, to get the dead Player.  Otherwise, it is not a player, so use this.}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|string|attackername|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if killer not a player, the entindex of who killed.  Again, use attacker first}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name killer used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|attackerisbot|is the attacker a bot}}&lt;br /&gt;
{{hl2msg|string|victimname|What type of zombie, so we don't have zombie names}}&lt;br /&gt;
{{hl2msg|bool|victimisbot|is the victim a bot}}&lt;br /&gt;
{{hl2msg|bool|abort|did the victim abort}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|float|victim_x|}}&lt;br /&gt;
{{hl2msg|float|victim_y|}}&lt;br /&gt;
{{hl2msg|float|victim_z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|Registers all playable classes (Hunter, Smoker, Boomer, Tank, Survivors). See infected_hurt for Witch and Common Infected}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|Not networked}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|user id who attacked}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|short|health|remaining health points}}&lt;br /&gt;
{{hl2msg|byte|armor|remaining armor points}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used, if not the world}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{hl2msg|byte|dmg_armor|damage done to armor}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_team ===&lt;br /&gt;
{{qnotice|player change his team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_team|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|team|team id}}&lt;br /&gt;
{{hl2msg|byte|oldteam|old team id}}&lt;br /&gt;
{{hl2msg|bool|disconnect|team change because player disconnects}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_bot_replace ===&lt;br /&gt;
{{qnotice|Bot replaced a player}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_bot_replace|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bot_player_replace ===&lt;br /&gt;
{{qnotice|Player replaced a bot}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bot_player_replace|string}}&lt;br /&gt;
{{hl2msg|short|bot|user ID of the bot}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_afk ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_afk|string}}&lt;br /&gt;
{{hl2msg|short|player|user ID of the player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_on_empty ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_on_empty|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name used}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_reload ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_reload|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|bool|manual|player manually started the reload}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_zoom ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_zoom|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_use ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an infected uses their ability}}&lt;br /&gt;
{{eventnote|Issues|Doesn't fire for jockey}}&lt;br /&gt;
{{begin-hl2msg|ability_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname. Possible values: ability_lunge(hunter), ability_toungue(smoker), ability_vomit(boomer), ability_charge(charger), ability_spit(spitter)}}&lt;br /&gt;
{{hl2msg|short|context|enum of the way it was used (different for each ability)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who got some ammo from a weapon_ammo_spawner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== item_pickup ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|item_pickup|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== grenade_bounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|grenade_bounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hegrenade_detonate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hegrenade_detonate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== bullet_impact ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bullet_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|float|x|}}&lt;br /&gt;
{{hl2msg|float|y|}}&lt;br /&gt;
{{hl2msg|float|z|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_footstep ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_footstep|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blind ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blind|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_falldamage ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_falldamage|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who got hurt}}&lt;br /&gt;
{{hl2msg|float|damage|for how much}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who grabbed the ledge}}&lt;br /&gt;
{{hl2msg|short|causer|Who caused them to do so (if anyone)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_ledge_release ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_ledge_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who released from the ledge}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_moving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_moving|string}}&lt;br /&gt;
{{hl2msg|long|entindex|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{hl2msg|bool|closed|Was the door closed when it started opening?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_close ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_close|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who closed the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== door_unlocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|door_unlocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|bool|checkpoint|Is the door a checkpoint door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== rescue_door_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|rescue_door_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who opened the door}}&lt;br /&gt;
{{hl2msg|long|entindex|door that opened}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_door_used ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_door_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_door_used_versus ===&lt;br /&gt;
{{qnotice|Someone tried to open a checkpoint door that is locked till everyone loads in}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_door_used_versus|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{hl2msg|long|entindex|door that was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== waiting_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone tried to push a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|waiting_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who tried to open it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== success_checkpoint_button_used ===&lt;br /&gt;
{{qnotice|Someone pushed a button that's locked until everyone is gathered}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|success_checkpoint_button_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who openned it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_freeze_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_freeze_end|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_pre_entity ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_pre_entity|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_start_post_nav ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start_post_nav|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_blocked|string}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|bool|blocked|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== nav_generate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|nav_generate|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end_message ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end_message|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user i}}&lt;br /&gt;
{{hl2msg|byte|reason|reson why team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{hl2msg|float|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_ended ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_ended|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_started ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_started|string}}&lt;br /&gt;
{{hl2msg|string|issue|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|string|votedata|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|initiator|entity id of the player who initiated the vote}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_changed|string}}&lt;br /&gt;
{{hl2msg|byte|yesVotes|}}&lt;br /&gt;
{{hl2msg|byte|noVotes|}}&lt;br /&gt;
{{hl2msg|byte|potentialVotes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_passed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_passed|string}}&lt;br /&gt;
{{hl2msg|string|details|}}&lt;br /&gt;
{{hl2msg|string|param1|}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_failed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_failed|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|1|reliable|this event is reliable}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== vote_cast_yes ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_yes|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vote_cast_no ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vote_cast_no|string}}&lt;br /&gt;
{{hl2msg|byte|team|}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of the voter}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_hurt ===&lt;br /&gt;
{{qnotice|Registers for non-playable classes (Common Infected, Witch). See player_hurt for other playable classes}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_hurt|string}}&lt;br /&gt;
{{hl2msg|1|local|don't network this, its way too spammy}}&lt;br /&gt;
{{hl2msg|short|attacker|player userid who attacked}}&lt;br /&gt;
{{hl2msg|long|entityid|entity id of infected}}&lt;br /&gt;
{{hl2msg|byte|hitgroup|hitgroup that was damaged}}&lt;br /&gt;
{{hl2msg|short|amount|how much damage was done}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_death ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_death|string}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who killed}}&lt;br /&gt;
{{hl2msg|short|infected_id|ID of the infected that died}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|short|weapon_id|ID of the weapon used}}&lt;br /&gt;
{{hl2msg|bool|headshot|signals a headshot}}&lt;br /&gt;
{{hl2msg|bool|minigun|signals a minigun kill}}&lt;br /&gt;
{{hl2msg|bool|blast|signals a death from blast damage}}&lt;br /&gt;
{{hl2msg|bool|submerged|indicates the infected was submerged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hostname_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hostname_changed|string}}&lt;br /&gt;
{{hl2msg|string|hostname|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== difficulty_changed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|difficulty_changed|string}}&lt;br /&gt;
{{hl2msg|short|newDifficulty|}}&lt;br /&gt;
{{hl2msg|short|oldDifficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_start|string}}&lt;br /&gt;
{{hl2msg|short|rushes|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_rush ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_rush|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_escape_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_escape_start|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_incoming ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_incoming|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_ready ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_ready|string}}&lt;br /&gt;
{{hl2msg|string|campaign|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_vehicle_leaving ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_vehicle_leaving|string}}&lt;br /&gt;
{{hl2msg|short|survivorcount|number of survivors that made it out}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_win ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_win|string}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|short|difficulty|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mission_lost ===&lt;br /&gt;
{{qnotice|As in, the survivor team failed.  Opposite of finale_win, but not necessarily during the finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mission_lost|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_start|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_radio_damaged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_radio_damaged|string}}&lt;br /&gt;
{{hl2msg|short|health|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== final_reportscreen ===&lt;br /&gt;
{{qnotice|Right before the final report screen comes up, let awards possibly fire}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|final_reportscreen|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== map_transition ===&lt;br /&gt;
{{qnotice|When campaign cinematics start}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|map_transition|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_transitioned ===&lt;br /&gt;
{{qnotice|When campaign cinematics end and player is transitioned to first person view}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_transitioned|string}}&lt;br /&gt;
{{hl2msg|short|userid|the person that just finished transitioning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{hl2msg|short|health_restored|amount of health restored}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== heal_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Issues|subject is broken for this event, it always appears to be the player doing the healing}}&lt;br /&gt;
{{begin-hl2msg|heal_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the healing}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== heal_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|heal_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was being healed, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being healed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person giving the ammo}}&lt;br /&gt;
{{hl2msg|short|subject|person receiving ammo}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== give_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|give_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|The giver of the weapon}}&lt;br /&gt;
{{hl2msg|short|recipient|The recipient of the weapon}}&lt;br /&gt;
{{hl2msg|short|weapon|The ID of the weapon given}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had the pills}}&lt;br /&gt;
{{hl2msg|short|subject|person swallowing the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pills_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pills_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the pills}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_no_weapon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_no_weapon|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_full ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_full|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pack_used_fail_doesnt_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pack_used_fail_doesnt_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the ammo pack}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ammo_pile_weapon_cant_use_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ammo_pile_weapon_cant_use_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo pile with a grenade launcher}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is defibrillating.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who used the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it helped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_used_fail ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_used_fail|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use the defibrillator}}&lt;br /&gt;
{{hl2msg|short|subject|person it failed to help}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== defibrillator_interrupted ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|defibrillator_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who was defibrillating, but moved.}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_pack_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_used|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|person who is deploying the pack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_item_already_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_item_already_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an ammo upgrade twice}}&lt;br /&gt;
{{hl2msg|string|upgradeclass|classname of the upgrade we tried to use}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_failed_no_primary ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_failed_no_primary|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who tried to use an upgrade without having a primary weapon}}&lt;br /&gt;
{{hl2msg|string|upgrade|name of the upgrade we tried to use, eg &amp;quot;INCENDIARY_AMMO&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== dead_survivor_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|dead_survivor_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|short|deadplayer|user id of the dead player represented}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== adrenaline_used ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|adrenaline_used|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who had and used the adrenaline}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_success ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_success|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person who was revived}}&lt;br /&gt;
{{hl2msg|bool|lastlife|person revived will die if they fall again}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|1 if person revived was ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== revive_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|revive_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the reviving}}&lt;br /&gt;
{{hl2msg|short|subject|person being revived}}&lt;br /&gt;
{{hl2msg|bool|ledge_hang|person is ledge hanging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_begin ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_begin|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== drag_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|drag_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|person doing the dragging}}&lt;br /&gt;
{{hl2msg|short|subject|person being dragged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated ===&lt;br /&gt;
{{qnotice|when a player becomes incapacitated.  This is also called when a tank is killed.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_incapacitated_start ===&lt;br /&gt;
{{qnotice|when a player is about to become incapacitated, so you can see his last living state}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_incapacitated_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who became incapacitated}}&lt;br /&gt;
{{hl2msg|short|attacker|user ID who made us incapacitated}}&lt;br /&gt;
{{hl2msg|long|attackerentid|if attacker not player, entindex of who made us incapacitated}}&lt;br /&gt;
{{hl2msg|string|weapon|weapon name attacker used}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_start_area ===&lt;br /&gt;
{{qnotice|when a player spawns into the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who entered}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_first_spawn ===&lt;br /&gt;
{{qnotice|when a player spawns for the first time in a given mission}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_first_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who spawned}}&lt;br /&gt;
{{hl2msg|string|map_name|}}&lt;br /&gt;
{{hl2msg|bool|isbot|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
{{qnotice|This Event doesnt exist anymore 1.10.2012}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== player_left_start_area ===&lt;br /&gt;
{{qnotice|when a player leaves the player start area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_start_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who left}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_entered_checkpoint ===&lt;br /&gt;
{{qnotice|when a basecombatcharacter enters a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_entered_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who entered}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one entering}}&lt;br /&gt;
{{hl2msg|long|door|Entindex of the checkpoint door the player entered to get here.}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{hl2msg|string|doorname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_left_checkpoint ===&lt;br /&gt;
{{qnotice|when a player leaves a checkpoint area}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_left_checkpoint|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who left}}&lt;br /&gt;
{{hl2msg|long|entityid|If not a player, the entity index of the one exiting}}&lt;br /&gt;
{{hl2msg|long|area|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoved|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_shoved ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_shoved|string}}&lt;br /&gt;
{{hl2msg|short|entityid|the entity index of the one who was shoved}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked them}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_jump_apex ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_jump_apex|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who jumped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_blocked ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was trying to move}}&lt;br /&gt;
{{hl2msg|short|blocker|player index who kept them from moving}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_now_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_now_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now it}}&lt;br /&gt;
{{hl2msg|short|attacker|player that did the it-ing}}&lt;br /&gt;
{{hl2msg|bool|exploded|whether it was vomit or explosion}}&lt;br /&gt;
{{hl2msg|bool|infected|is the vomit infectious}}&lt;br /&gt;
{{hl2msg|bool|by_boomer|came from a boomer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_no_longer_it ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_no_longer_it|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who is now no longer it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_harasser_set ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_harasser_set|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who woke up the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch woken up}}&lt;br /&gt;
{{hl2msg|bool|first|First time the witch set a harasser}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_spawn|string}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== witch_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|witch_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who killed the witch}}&lt;br /&gt;
{{hl2msg|long|witchid|Entindex of witch that was killed.}}&lt;br /&gt;
{{hl2msg|bool|oneshot|TRUE if the Witch was killed with one shot}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_spawn ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|User ID of the tank spawning now}}&lt;br /&gt;
{{hl2msg|long|tankid|Entindex of tank spawning right now.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== melee_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|melee_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|Player who bashed the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|Entindex of infected what got killed}}&lt;br /&gt;
{{hl2msg|bool|ambush|Infected was unaware when killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== area_cleared ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|area_cleared|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who cleared the area}}&lt;br /&gt;
{{hl2msg|long|area|id of the cleared area}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== award_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|award_earned|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who earned the award}}&lt;br /&gt;
{{hl2msg|long|entityid|client likes ent id}}&lt;br /&gt;
{{hl2msg|long|subjectentid|entity id of other party in the award, if any}}&lt;br /&gt;
{{hl2msg|short|award|id of award earned}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_grab ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_grab|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the grabbing}}&lt;br /&gt;
{{hl2msg|short|victim|player that got grabbed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_bent ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_bent|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_broke_victim_died ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_broke_victim_died|string}}&lt;br /&gt;
{{hl2msg|short|userid|Tongue owner}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_release ===&lt;br /&gt;
{{qnotice|Fired in all cases where the tongue releases a victim, whether choked or not, etc.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_release|string}}&lt;br /&gt;
{{hl2msg|short|userid|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|victim|The (now released) victim}}&lt;br /&gt;
{{hl2msg|long|distance|Distance the victim was dragged.}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== choke_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|The choker}}&lt;br /&gt;
{{hl2msg|short|victim|The person being choked}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== choke_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|choke_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being choked}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tongue_pull_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tongue_pull_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pulled}}&lt;br /&gt;
{{hl2msg|short|smoker|The tongue owner}}&lt;br /&gt;
{{hl2msg|short|release_type|How did it break?}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_shove ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_shove|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== lunge_pounce ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|lunge_pounce|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|long|distance|Distance from pounce start to contact}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== pounce_stopped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|pounce_stopped|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who stopped it}}&lt;br /&gt;
{{hl2msg|short|victim|And who was being pounced}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== fatal_vomit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|fatal_vomit|string}}&lt;br /&gt;
{{hl2msg|short|userid|Who vomited}}&lt;br /&gt;
{{hl2msg|short|victim|And who was killed or incapped}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_call_for_help ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_call_for_help|string}}&lt;br /&gt;
{{hl2msg|short|userid|The actual player entity who is awaiting rescue.}}&lt;br /&gt;
{{hl2msg|long|subject|SurvivorRescue entity representing the player who needs to be rescued from the closet (used for position)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescued ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescued|string}}&lt;br /&gt;
{{hl2msg|short|rescuer|player that did the rescuing}}&lt;br /&gt;
{{hl2msg|short|victim|the survivor being rescued}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survivor_rescue_abandoned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survivor_rescue_abandoned|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== relocated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|relocated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was relocated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== respawning ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|respawning|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who started respawning}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== tank_frustrated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_frustrated|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was culled}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_given ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_given|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who got the weapon}}&lt;br /&gt;
{{hl2msg|short|giver|player that did the giving}}&lt;br /&gt;
{{hl2msg|short|weapon|weapon id given}}&lt;br /&gt;
{{hl2msg|short|weaponentid|weapon entity id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When an item is removed from a survivor's inventory}}&lt;br /&gt;
{{eventnote|Related Events|Called before heal_success, defibrillator_used, upgrade_pack_used, but called after pills_used and adrenaline_used}}&lt;br /&gt;
{{begin-hl2msg|weapon_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who dropped the weapon}}&lt;br /&gt;
{{hl2msg|string|item|either a weapon such as 'tmp' or 'hegrenade', or an item such as 'nvgs'}}&lt;br /&gt;
{{hl2msg|short|propid|entindex of the dropped weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|Override from gameevents.res}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of breaker}}&lt;br /&gt;
{{hl2msg|long|entindex|entindex of thing breaking}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{hl2msg|bool|hulkonly|SF_BREAK_HULK_ONLY}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== achievement_earned ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|byte|player|entindex of the player}}&lt;br /&gt;
{{hl2msg|short|achievement|achievement ID}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spec_target_updated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spec_target_updated|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spawner_give_item ===&lt;br /&gt;
{{qnotice|A spawner has given a player an item (weapon, pills, ammo, health kit, etc)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spawner_give_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|Item recipient}}&lt;br /&gt;
{{hl2msg|string|item|Name of item given}}&lt;br /&gt;
{{hl2msg|long|spawner|entindex of the spawner entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== create_panic_event ===&lt;br /&gt;
{{qnotice|A panic event has been created, though not necessarily started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|create_panic_event|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who was started the panic}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pills ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pills|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_weapons ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_weapons|string}}&lt;br /&gt;
{{hl2msg|long|subject|The weapon_pain_pills spawner that will be indicated}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entity_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|classname|Classname of the entity they see}}&lt;br /&gt;
{{hl2msg|string|entityname|name of the entity they see}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_spawn_visible ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_spawn_visible|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player who sees the entity}}&lt;br /&gt;
{{hl2msg|long|subject|Entindex of the entity they see}}&lt;br /&gt;
{{hl2msg|string|weaponname|weapon name, or &amp;quot;melee&amp;quot;}}&lt;br /&gt;
{{hl2msg|string|subtype|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_near ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_near|string}}&lt;br /&gt;
{{hl2msg|short|userid|The boomer}}&lt;br /&gt;
{{hl2msg|short|victim|The survivor whom the boomer has gotten very close to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== started_pre_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will remind you to ready for the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|started_pre_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_radio ===&lt;br /&gt;
{{qnotice|explain the rescue radio will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_truck ===&lt;br /&gt;
{{qnotice|explain how pulling the lever on the gas truck will start the finale}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_truck|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_panic_button ===&lt;br /&gt;
{{qnotice|explain that pressing this button will start a panic event.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_panic_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The panic button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_elevator_button ===&lt;br /&gt;
{{qnotice|explain how to operate the hospital elevator button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_elevator_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_lift_button ===&lt;br /&gt;
{{qnotice|explain how to operate the lift button.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_lift_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lift button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_church_door ===&lt;br /&gt;
{{qnotice|explain how to provoke the crazy church guy.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_church_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The saferoom door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_emergency_door ===&lt;br /&gt;
{{qnotice|explain how to open the emergency door.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_emergency_door|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The door}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_crane ===&lt;br /&gt;
{{qnotice|explain how to lower the box on the crane.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_crane|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever/button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bridge ===&lt;br /&gt;
{{qnotice|explain how to close the gates to make a bridge.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The button}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gas_can_panic ===&lt;br /&gt;
{{qnotice|explain how to shoot the gas can.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gas_can_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The gas can}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_van_panic ===&lt;br /&gt;
{{qnotice|explain how to start the van.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_van_panic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The van}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mainstreet ===&lt;br /&gt;
{{qnotice|explain how to lower the forklift}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mainstreet|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The forklift}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_train_lever ===&lt;br /&gt;
{{qnotice|explain how to operate the train lever.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_train_lever|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The lever on box car}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_disturbance ===&lt;br /&gt;
{{qnotice|explain that disturbances (car alarm) attract infected horde}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_disturbance|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The source of disturbance}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_goal ===&lt;br /&gt;
{{qnotice|explain where to put the scavenge mode items}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_goal|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The collection device}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_scavenge_leave_area ===&lt;br /&gt;
{{qnotice|explain that leaving the area, starts round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_scavenge_leave_area|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|The entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== begin_scavenge_overtime ===&lt;br /&gt;
{{qnotice|enter overtime in a scavenge round}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|begin_scavenge_overtime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_start ===&lt;br /&gt;
{{qnotice|a scavenge round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_start|string}}&lt;br /&gt;
{{hl2msg|byte|round|round number, 1 based}}&lt;br /&gt;
{{hl2msg|bool|firsthalf|start of the first half of the round}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== scavenge_round_halftime ===&lt;br /&gt;
{{qnotice|a scavenge round is in halftime}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_halftime|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_round_finished ===&lt;br /&gt;
{{qnotice|a scavenge round has ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_round_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_score_tied ===&lt;br /&gt;
{{qnotice|a team just tied the score}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_score_tied|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_round_start ===&lt;br /&gt;
{{qnotice|a versus round has begun}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_blocked ===&lt;br /&gt;
{{qnotice|can't pour the gas, someone else already is}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_blocked|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_completed ===&lt;br /&gt;
{{qnotice|player finished pouring a can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_completed|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_dropped ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_dropped|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gascan_pour_interrupted ===&lt;br /&gt;
{{qnotice|we got interuppted pouring the gas can}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gascan_pour_interrupted|string}}&lt;br /&gt;
{{hl2msg|short|userid|person who interuppted us}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_match_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_match_finished|string}}&lt;br /&gt;
{{hl2msg|byte|winners|winner team}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== use_target ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|use_target|string}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the use target}}&lt;br /&gt;
{{hl2msg|string|classname|classname of the use target}}&lt;br /&gt;
{{hl2msg|bool|isprop|is this a prop that can be carried}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|a new use target has been found}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{eventnote|Called|When a Survivor presses +USE on a useable entity. i.e. Weapons, items, doors}}&lt;br /&gt;
{{eventnote|Related Events|If targetid is an item, item_pickup will be called prior to player_use}}&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user}}&lt;br /&gt;
{{hl2msg|long|targetid|Entindex of the used entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== friendly_fire ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|friendly_fire|string}}&lt;br /&gt;
{{hl2msg|short|attacker|player who fired the weapon}}&lt;br /&gt;
{{hl2msg|short|victim|player who got shot}}&lt;br /&gt;
{{hl2msg|short|guilty|player who was at fault}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_draw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_draw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gameinstructor_nodraw ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gameinstructor_nodraw|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== request_weapon_stats ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|request_weapon_stats|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of user requesting their stats}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_talking_state ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_talking_state|string}}&lt;br /&gt;
{{hl2msg|byte|player|}}&lt;br /&gt;
{{hl2msg|bool|istalking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_pickup ===&lt;br /&gt;
{{qnotice|client event for player has picked up a weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_pickup|string}}&lt;br /&gt;
{{hl2msg|byte|context|split screen message context}}&lt;br /&gt;
{{hl2msg|byte|weaponid|}}&lt;br /&gt;
{{hl2msg|byte|weaponslot|}}&lt;br /&gt;
{{hl2msg|byte|dropped_by_infected|gender of the Infected that dropped the weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== hunter_punched ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_punched|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== hunter_headshot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|hunter_headshot|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who made the headshot}}&lt;br /&gt;
{{hl2msg|long|hunteruserid|user ID of Hunter}}&lt;br /&gt;
{{hl2msg|bool|islunging|TRUE if the Hunter was in the act of lunging}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== zombie_ignited ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|zombie_ignited|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who caused ignition}}&lt;br /&gt;
{{hl2msg|short|gender|gender (type) of the infected}}&lt;br /&gt;
{{hl2msg|long|entityid|entity ID of Tank}}&lt;br /&gt;
{{hl2msg|string|victimname|&amp;quot;Witch&amp;quot;, &amp;quot;Tank&amp;quot;, &amp;quot;Hunter&amp;quot;, &amp;quot;Smoker&amp;quot;, or &amp;quot;Infected&amp;quot;}}&lt;br /&gt;
{{hl2msg|bool|fire_ammo|true if incendiary ammo was used}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== boomer_exploded ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|boomer_exploded|string}}&lt;br /&gt;
{{hl2msg|short|userid|Boomer that exploded}}&lt;br /&gt;
{{hl2msg|short|attacker|player who caused the explosion}}&lt;br /&gt;
{{hl2msg|bool|splashedbile|Exploding boomer splashed bile on Survivors}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_pistol_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_pistol_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-pistol weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== weapon_fire_at_40 ===&lt;br /&gt;
{{qnotice|This is networked, special event for game instructor}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|weapon_fire_at_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|weapon|used weapon name}}&lt;br /&gt;
{{hl2msg|short|weaponid|used weapon ID}}&lt;br /&gt;
{{hl2msg|short|count|number of bullets}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== total_ammo_below_40 ===&lt;br /&gt;
{{qnotice|sent for any ammo type, except those with max ammo 1, or infinite ammo, like pistols}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|total_ammo_below_40|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== player_hurt_concise ===&lt;br /&gt;
{{qnotice|Abbreviated version of 'player_hurt' that is networked}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt_concise|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID who was hurt}}&lt;br /&gt;
{{hl2msg|long|attackerentid|entity id who attacked, if attacker not a player, and userid therefore invalid}}&lt;br /&gt;
{{hl2msg|long|type|damage type}}&lt;br /&gt;
{{hl2msg|short|dmg_health|damage done to health}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== tank_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|tank_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead tank}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|solo|TRUE if a player single-handedly killed the Tank}}&lt;br /&gt;
{{hl2msg|bool|melee_only|TRUE if the tank was only killed by melee attacks (no blast, burn, or bullet damage)}}&lt;br /&gt;
{{hl2msg|bool|l4d1_only|TRUE if l4d1 survivors inflicted damage and the l4d2 survivors did not)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_write_failed ===&lt;br /&gt;
{{qnotice|Used for a notification message when an achievement fails to write}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_write_failed|string}}&lt;br /&gt;
{{hl2msg|None|None|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== ghost_spawn_time ===&lt;br /&gt;
{{qnotice|Used for clients to know how long until they become a ghost (and can spawn)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ghost_spawn_time|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the player that is becoming a ghost}}&lt;br /&gt;
{{hl2msg|short|spawntime|How long of a wait until player is a ghost}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== survival_at_30min ===&lt;br /&gt;
{{qnotice|Used to know when we elapse 30 minutes on a survival map}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_at_30min|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_pre_drawbridge ===&lt;br /&gt;
{{qnotice|Point out the button that will start the gauntlet finale.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_pre_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_drawbridge ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_drawbridge|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_perimeter ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_perimeter|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_deactivate_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_deactivate_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_impound_lot ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_impound_lot|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_window ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_window|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_mall_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_mall_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_coaster_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_coaster_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_decon_wait ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_decon_wait|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gauntlet_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gauntlet_finale_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_float ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_float|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_ferry_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_ferry_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hatch_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hatch_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_shack_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_shack_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_incendiary_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_incendiary_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== upgrade_explosive_ammo ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_explosive_ammo|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== receive_upgrade ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|receive_upgrade|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|upgrade|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_vehicle_arrival ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_vehicle_arrival|string}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== mounted_gun_overheated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|mounted_gun_overheated|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_burger_sign ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_burger_sign|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_button ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_button|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_carousel_destination ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_carousel_destination|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_lighting ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_lighting|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_finale_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_finale_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_survival_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_survival_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== ability_out_of_range ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ability_out_of_range|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|string|ability|ability classname}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_stage_pyrotechnics ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_stage_pyrotechnics|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio1 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio1|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_radio2 ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_radio2|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gates_are_open ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gates_are_open|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c2m4_ticketbooth ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c2m4_ticketbooth|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c3m4_rescue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c3m4_rescue|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_hotel_elevator_doors ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_hotel_elevator_doors|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop_tanker ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop_tanker|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_gun_shop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_gun_shop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_store_item_stop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_store_item_stop|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_generic ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_generic|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_alarm|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_radio ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_radio|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survival_carousel ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survival_carousel|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_return_item ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_return_item|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_save_items ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_save_items|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spit_burst ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spit_burst|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== entered_spit ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entered_spit|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m1_getgas ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m1_getgas|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== temp_c4m3_return_to_boat ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|temp_c4m3_return_to_boat|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c1m4_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c1m4_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== c1m4_scavenge_instructions ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|c1m4_scavenge_instructions|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== punched_clown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|punched_clown|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who punched the clown}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead charger}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|melee|TRUE if a player killed the charger with a melee weapon}}&lt;br /&gt;
{{hl2msg|bool|charging|TRUE if the charger was charging when it died}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== spitter_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|spitter_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead spitter}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{hl2msg|bool|has_spit|TRUE if the spitter spit at some point}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_ride_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_ride_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|player who did the lunging}}&lt;br /&gt;
{{hl2msg|short|victim|player that got lunged}}&lt;br /&gt;
{{hl2msg|short|rescuer|Who stopped it}}&lt;br /&gt;
{{hl2msg|float|ride_length|Duration of our ride}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== jockey_killed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|jockey_killed|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of dead jockey}}&lt;br /&gt;
{{hl2msg|short|attacker|user id of killer}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== non_melee_fired ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|non_melee_fired|string}}&lt;br /&gt;
{{hl2msg|short|userid|User that fired a non-melee weapon}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== infected_decapitated ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|infected_decapitated|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who did the decapitation}}&lt;br /&gt;
{{hl2msg|string|weapon|melee weapon name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== upgrade_pack_added ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|upgrade_pack_added|string}}&lt;br /&gt;
{{hl2msg|short|upgradeid|}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== vomit_bomb_tank ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|vomit_bomb_tank|string}}&lt;br /&gt;
{{hl2msg|short|userid|userid of the player who used the bomb}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== triggered_car_alarm ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|triggered_car_alarm|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== panic_event_finished ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|panic_event_finished|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_charge_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_charge_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_carry_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_carry_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_impact ===&lt;br /&gt;
{{qnotice|ran into a survivor we aren't carrying}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_impact|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_start|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== charger_pummel_end ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|charger_pummel_end|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID of the charger}}&lt;br /&gt;
{{hl2msg|short|victim|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== strongman_bell_knocked_off ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|strongman_bell_knocked_off|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== molotov_thrown ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|molotov_thrown|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== gas_can_forced_drop ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|gas_can_forced_drop|string}}&lt;br /&gt;
{{hl2msg|short|userid|player that forced the drop}}&lt;br /&gt;
{{hl2msg|short|victim|player that dropped it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_need_gnome_to_continue ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_need_gnome_to_continue|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_survivor_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_survivor_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_item_glows_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_item_glows_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_rescue_disabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_rescue_disabled|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_bodyshots_reduced ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_bodyshots_reduced|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_witch_instant_kill ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_witch_instant_kill|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player we're explaining to}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== set_instructor_group_enabled ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|set_instructor_group_enabled|string}}&lt;br /&gt;
{{hl2msg|string|group|}}&lt;br /&gt;
{{hl2msg|short|enabled|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== stashwhacker_game_won ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|stashwhacker_game_won|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== versus_marker_reached ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|versus_marker_reached|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|short|marker|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== start_score_animation ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|start_score_animation|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== survival_round_start ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|survival_round_start|string}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== scavenge_gas_can_destroyed ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|scavenge_gas_can_destroyed|string}}&lt;br /&gt;
{{hl2msg|short|userid|The player that destroyed it}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_gate ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_gate|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_sewer_run ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_sewer_run|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== explain_c6m3_finale ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|explain_c6m3_finale|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== finale_bridge_lowering ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|finale_bridge_lowering|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{hl2msg|long|subject|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== m60_streak_ended ===&lt;br /&gt;
{{qnotice|I was holding down the m60 trigger, and now I'm not}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|m60_streak_ended|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== chair_charged ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|chair_charged|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== song_played ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|song_played|string}}&lt;br /&gt;
{{hl2msg|none|none|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
=== foot_locker_opened ===&lt;br /&gt;
{{qnotice|}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|foot_locker_opened|string}}&lt;br /&gt;
{{hl2msg|short|userid|}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>Darkid</name></author>
		
	</entry>
</feed>