<?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=DJ+Tsunami</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=DJ+Tsunami"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/DJ_Tsunami"/>
	<updated>2026-05-08T15:44:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Handle_API_(SourceMod)&amp;diff=11188</id>
		<title>Handle API (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Handle_API_(SourceMod)&amp;diff=11188"/>
		<updated>2021-04-25T10:22:55Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Handle Security */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The SourceMod [[Handles (SourceMod Scripting)|Handle System]] marshals pointers into typed, unique, 32-bit integers.  This makes coding in SourceMod more cross-platform compatible, type safe, and mistake safe than its predecessor, [[AMX Mod X]].  It also allows for safe object sharing and reference count based object destruction.&lt;br /&gt;
&lt;br /&gt;
The fundamental aspect of Handles is that they encapsulate a single pointer.  This pointer is private data, and can only be read by the Handle's creator.  When the Handle is freed, the pointer is automatically freed (via a special interface), thus ensuring that memory is not leaked.&lt;br /&gt;
&lt;br /&gt;
Handles also provide a simple &amp;quot;security&amp;quot; system for restricting which areas of SourceMod are allowed to directly call certain functions on Handles under a given type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Basic Types=&lt;br /&gt;
==Handle_t==&lt;br /&gt;
The &amp;lt;tt&amp;gt;Handle_t&amp;lt;/tt&amp;gt; type is a 32bit integer.  Currently, it is composed of two 16-bit integers, a serial number and a handle index.  The serial number is private and used for integrity checking.  The index is the internal ID of the Handle, which is tied to the encapsulated pointer and security information.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;tt&amp;gt;Handle_t&amp;lt;/tt&amp;gt; is a unique Handle, however, there are ''cloned'' Handles which are copies of another Handle.  They have their own unique signatures, but they refer to another Handle internally.  Each Handle is also associated with a ''type'', explained below.&lt;br /&gt;
&lt;br /&gt;
==HandleType_t==&lt;br /&gt;
The &amp;lt;tt&amp;gt;HandleType_t&amp;lt;/tt&amp;gt; describes a type under which Handles can be created.  Types can have up to 15 sub-types; sub-types can also have their own sub-types, called child types.  When Handles are being read, they are &amp;quot;type checked,&amp;quot; to make sure they are being read under a given type.  When a type is destroyed, all Handles under the type are destroyed.  If the type has child types, each child type is also destroyed. &lt;br /&gt;
&lt;br /&gt;
Handle types also allow overloading of various Handle operations.  Currently, the only overloaded action is for overloading when a Handle is destroyed.  This allows the encapsulated pointer to be safely destroyed by the type interface.  The interface which overloads type operations is called &amp;lt;tt&amp;gt;IHandleTypeDispatch&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lastly, types provide a &amp;quot;default security&amp;quot; system which lets programmers restrict which functions can be accessed by other areas in SourceMod.  This is explained later.&lt;br /&gt;
&lt;br /&gt;
=Security=&lt;br /&gt;
'''Note:''' Type defaults can be set via &amp;lt;tt&amp;gt;IHandleSys::InitAccessDefaults()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Type Security==&lt;br /&gt;
Often, extensions may want to share HandleType_t values with each other, so they can create Handles of external types.  However, the owner of the handle type may not want other extensions to perform certain actions.  Thus, types can be ''secured'' by an &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt; when created.  Unless the same &amp;lt;tt&amp;gt;IdentityToken&amp;lt;/tt&amp;gt; is provided, a function may fail if restricted.&lt;br /&gt;
&lt;br /&gt;
Type permissions are declared in a &amp;lt;tt&amp;gt;TypeAccess&amp;lt;/tt&amp;gt; struct, which has the following user-set members:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ident&amp;lt;/tt&amp;gt;: The &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt; owner of this type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;access&amp;lt;/tt&amp;gt;: An array where each index is a &amp;lt;tt&amp;gt;HTypeAccessRight&amp;lt;/tt&amp;gt; enumeration member.  If an index is set to false, functions requiring that right will fail unless the correct &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt; is passed in.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;HTypeAccessRight&amp;lt;/tt&amp;gt; enumeration has the following values:&lt;br /&gt;
*&amp;lt;tt&amp;gt;HTypeAccess_Create&amp;lt;/tt&amp;gt;: Handle creation using this type; default is false.&lt;br /&gt;
*&amp;lt;tt&amp;gt;HTypeAccess_Inherit&amp;lt;/tt&amp;gt;: Inheriting this type for child types; default is false.&lt;br /&gt;
&lt;br /&gt;
Below is a list of each Handle System function that requires type permissions, and which permissions may be required:&lt;br /&gt;
*&amp;lt;tt&amp;gt;CreateType&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;HTypeAccess_Inherit&amp;lt;/tt&amp;gt; if a parent is specified&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;RemoveType&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;(none, always secured)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;CreateHandle&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;HTypeAccess_Create&amp;lt;/tt&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Handle Security==&lt;br /&gt;
Handle security permissions inherit from their parent type unless given an alternate set of permissions.  Handles are &amp;quot;secured&amp;quot; by two properties, unlike handle types, which just have one.  When verifying your identity with a secured Handle function, you must use the &amp;lt;tt&amp;gt;HandleSecurity&amp;lt;/tt&amp;gt; struct, which has two properties:&lt;br /&gt;
*&amp;lt;tt&amp;gt;pOwner&amp;lt;/tt&amp;gt;: The owner of the Handle, which is usually a plugin &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;pIdentity&amp;lt;/tt&amp;gt;: The owner of the Handle's type, or the &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt; securing its type.&lt;br /&gt;
&lt;br /&gt;
Handle permissions are specified via the &amp;lt;tt&amp;gt;HandleAccess&amp;lt;/tt&amp;gt; struct.  It is passed either through &amp;lt;tt&amp;gt;CreateType&amp;lt;/tt&amp;gt; for default settings in a given type, or through &amp;lt;tt&amp;gt;CreateHandleEx&amp;lt;/tt&amp;gt; for explicit per-Handle permissions.  This struct has the following members:&lt;br /&gt;
*&amp;lt;tt&amp;gt;access&amp;lt;/tt&amp;gt;: An array where each index is a &amp;lt;tt&amp;gt;HandleAccessRight&amp;lt;/tt&amp;gt; enumeration member.  If set to 0, an access right is allowed without a &amp;lt;tt&amp;gt;HandleSecurity&amp;lt;/tt&amp;gt; instance.  Otherwise, the following bitwise flags are checked:&lt;br /&gt;
**&amp;lt;tt&amp;gt;HANDLE_RESTRICT_IDENTITY&amp;lt;/tt&amp;gt;: If flagged, this access right is only granted if the &amp;lt;tt&amp;gt;pIdentity&amp;lt;/tt&amp;gt; member of the &amp;lt;tt&amp;gt;HandleSecurity&amp;lt;/tt&amp;gt; struct matches the Handle's '''type's''' owner.&lt;br /&gt;
**&amp;lt;tt&amp;gt;HANDLE_RESTRICT_OWNER&amp;lt;/tt&amp;gt;: If flagged, this access right is only granted if the &amp;lt;tt&amp;gt;pOwner&amp;lt;/tt&amp;gt; member of the &amp;lt;tt&amp;gt;Handlesecurity&amp;lt;/tt&amp;gt; struct matches the Handle's owner.&lt;br /&gt;
&lt;br /&gt;
The following access rights exist for Handles:&lt;br /&gt;
*&amp;lt;tt&amp;gt;HandleAccess_Read&amp;lt;/tt&amp;gt;: This Handle's encapsulated pointer can be retrieved.  Defaults to &amp;lt;tt&amp;gt;HANDLE_RESTRICT_IDENTITY&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;HandleAccess_Delete&amp;lt;/tt&amp;gt;: This Handle can be removed or freed.  Defaults to &amp;lt;tt&amp;gt;HANDLE_RESTRICT_OWNER&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;HandleAccess_Clone&amp;lt;/tt&amp;gt;: This Handle can be cloned.  Defaults to 0.&lt;br /&gt;
&lt;br /&gt;
Below is a list of each Handle system function that requires permissions, and which permissions may be required:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FreeHandle&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;HandleAccess_Delete&amp;lt;/tt&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;CloneHandle/CloneHandleEx&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;HandleAccess_Clone&amp;lt;/tt&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;ReadHandle&amp;lt;/tt&amp;gt;: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;HandleAccess_Read&amp;lt;/tt&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SourceMod's generic native wrappers assume follow these rules, however, they assume certain access rights, and will return &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; or 0 if these rights are denied.  Thus, you should make sure your permissions are compatible, unless you explicitly want to deny usage of these functions.&lt;br /&gt;
*&amp;lt;tt&amp;gt;CloneHandle()&amp;lt;/tt&amp;gt;: Passes &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;HandleSecurity&amp;lt;/tt&amp;gt;, meaning &amp;lt;tt&amp;gt;HandleAccess_Clone&amp;lt;/tt&amp;gt; must be 0.&lt;br /&gt;
*&amp;lt;tt&amp;gt;CloseHandle()&amp;lt;/tt&amp;gt;: Passes &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;HandleSecurity::pIdentity&amp;lt;/tt&amp;gt;, and the plugin's &amp;lt;tt&amp;gt;IdentityToken_t&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;HandleSecurity::pOwner&amp;lt;/tt/&amp;gt;.  This means that at most, the only restriction can be &amp;lt;tt&amp;gt;HANDLE_RESTRICT_OWNER&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;HandleAccess_Delete&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Usage Examples=&lt;br /&gt;
Here are some examples of Handle usages.&lt;br /&gt;
&lt;br /&gt;
==Basic Handles==&lt;br /&gt;
The most basic use of Handles is to encapsulate a data structure and allow &amp;lt;tt&amp;gt;CloseHandle&amp;lt;/tt&amp;gt; to universally destroy it.  Let's say we want to implement two natives - &amp;lt;tt&amp;gt;CreateFile&amp;lt;/tt&amp;gt; for creating an empty file, and &amp;lt;tt&amp;gt;WriteLine&amp;lt;/tt&amp;gt; for writing a line to this file.  How could we implement this using the Handle system?&lt;br /&gt;
&lt;br /&gt;
After reading this, it is tempting to think, &amp;quot;Why can't we just return the &amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt; pointer as a &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt;?&amp;quot;  The reason is that a &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; is guaranteed to be a 32bit integer.  There is no guarantee that a pointer will always be this size, however, and thus casting on future platforms could break.  This problem happened in [[AMX Mod X]] and greatly restricted flexibility.  &lt;br /&gt;
&lt;br /&gt;
===Creating the type===&lt;br /&gt;
First, we have to create the type and its Dispatch interface.&lt;br /&gt;
&amp;lt;cpp&amp;gt;HandleType_t g_FileType = 0;	/* Holds the HandleType ID */&lt;br /&gt;
&lt;br /&gt;
class FileTypeHandler : public IHandleTypeDispatch&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	void OnHandleDestroy(HandleType_t type, void *object)&lt;br /&gt;
	{&lt;br /&gt;
		/* :TODO: implement this */&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* Create an instance of the handler */&lt;br /&gt;
FileTypeHandler g_FileTypeHandler;&lt;br /&gt;
&lt;br /&gt;
Initialize()&lt;br /&gt;
{&lt;br /&gt;
	/* Register the type with default security permissions */&lt;br /&gt;
	g_FileType = g_pHandleSys-&amp;gt;CreateType(&amp;quot;File&amp;quot;, &lt;br /&gt;
		&amp;amp;g_FileTypeHandler, &lt;br /&gt;
		0, &lt;br /&gt;
		NULL, &lt;br /&gt;
		NULL, &lt;br /&gt;
		myself-&amp;gt;GetIdentity(), &lt;br /&gt;
		NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Shutdown()&lt;br /&gt;
{&lt;br /&gt;
	/* Remove the type on shutdown */&lt;br /&gt;
	g_pHandleSys-&amp;gt;RemoveType(g_FileType, myself-&amp;gt;GetIdentity());&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating Handles===&lt;br /&gt;
Creating the Handles is fairly easy once we have a valid pointer to stuff in it.&lt;br /&gt;
&amp;lt;cpp&amp;gt;/* native CreateFile(const String:file[]) */&lt;br /&gt;
static cell_t sm_CreateFile(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	char path[PLATFORM_MAX_PATH];&lt;br /&gt;
	char *filename;&lt;br /&gt;
&lt;br /&gt;
	/* Get the filename */&lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[1], &amp;amp;filename);&lt;br /&gt;
	/* Build a full path */&lt;br /&gt;
	g_pSM-&amp;gt;BuildPath(Path_SM, path, sizeof(path), &amp;quot;%s&amp;quot;, filename);&lt;br /&gt;
	&lt;br /&gt;
	/* Open for writing */&lt;br /&gt;
	FILE *fp = fopen(path, &amp;quot;wt&amp;quot;);&lt;br /&gt;
	if (!fp)&lt;br /&gt;
	{&lt;br /&gt;
		return BAD_HANDLE;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Create the Handle with our type, the FILE pointer, the plugin's identity, and our identity */&lt;br /&gt;
	return g_pHandleSys-&amp;gt;CreateHandle(g_FileType, &lt;br /&gt;
		fp, &lt;br /&gt;
		pContext-&amp;gt;GetIdentity(), &lt;br /&gt;
		myself-&amp;gt;GetIdentity(), &lt;br /&gt;
		NULL);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reading/Checking Handles===&lt;br /&gt;
Handles aren't very useful unless you have natives to use them.  Let's say we want to write lines of text to our File type.&lt;br /&gt;
&amp;lt;cpp&amp;gt;/* native WriteLine(Handle:hndl, const String:line[]); */&lt;br /&gt;
static cell_t sm_WriteLine(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	Handle_t hndl = static_cast&amp;lt;Handle_t&amp;gt;(params[1]);&lt;br /&gt;
	HandleError err;&lt;br /&gt;
	HandleSecurity sec;&lt;br /&gt;
&lt;br /&gt;
	/* Build our security descriptor */&lt;br /&gt;
	sec.pOwner = NULL;	/* Not needed, owner access is not checked */&lt;br /&gt;
	sec.pIdentity = myself-&amp;gt;GetIdentity();	/* But only this extension can read */&lt;br /&gt;
&lt;br /&gt;
	/* Attempt to read the given handle as our type, using our security info.&lt;br /&gt;
	 * Note that we read the pointer directly in with a little cast.&lt;br /&gt;
	 * This type of cast is safe since sizeof(void **) == sizeof(void *) == sizeof(T *) in almost all cases.&lt;br /&gt;
	 */&lt;br /&gt;
	FILE *fp;&lt;br /&gt;
	if ((err = g_pHandleSys-&amp;gt;ReadHandle(hndl, g_FileType, &amp;amp;sec, (void **)&amp;amp;fp))&lt;br /&gt;
	     != HandleError_None)&lt;br /&gt;
	{&lt;br /&gt;
		return pContext-&amp;gt;ThrowNativeError(&amp;quot;Invalid file handle %x (error %d)&amp;quot;, hndl, err);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Get the text */&lt;br /&gt;
	char *text;&lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[2], &amp;amp;text);&lt;br /&gt;
&lt;br /&gt;
	/* Write it */&lt;br /&gt;
	fputs(text, fp);&lt;br /&gt;
&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CloseHandle Support===&lt;br /&gt;
Lastly, we need to make it so &amp;lt;tt&amp;gt;CloseHandle()&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;FreeHandle()&amp;lt;/tt&amp;gt; will close our file pointer when removing the Handle, which we skipped before.&lt;br /&gt;
&amp;lt;cpp&amp;gt;class FileTypeHandler : public IHandleTypeDispatch&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	void OnHandleDestroy(HandleType_t type, void *object)&lt;br /&gt;
	{&lt;br /&gt;
		fclose( (FILE *)object );&lt;br /&gt;
	}&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restricting CloseHandle==&lt;br /&gt;
Let's say that, for various reasons, you don't want users to be able to call CloseHandle().  An example of this might be a data type that is non-temporary, or is being called from a forward, and thus should not be touched.  Or, you might have a special deconstructor that takes extra parameters, and thus you need a separate destroy function.&lt;br /&gt;
&lt;br /&gt;
For example, let's create a separate function called &amp;lt;tt&amp;gt;CloseFile&amp;lt;/tt&amp;gt;.  It doesn't do anything particularly special, but we are going to force its usage over CloseHandle().&lt;br /&gt;
&lt;br /&gt;
===New Security Rules===&lt;br /&gt;
&amp;lt;cpp&amp;gt;Initialize()&lt;br /&gt;
{&lt;br /&gt;
	/* Create default access rights */&lt;br /&gt;
	HandleAccess rules;&lt;br /&gt;
	g_pHandleSys-&amp;gt;InitAccessDefaults(NULL, &amp;amp;rules);&lt;br /&gt;
&lt;br /&gt;
	/* Restrict delete to only our identity */&lt;br /&gt;
	rules.access[HandleAccess_Delete] = HANDLE_RESTRICT_IDENTITY;&lt;br /&gt;
&lt;br /&gt;
	/* Register the type with our security permissions */&lt;br /&gt;
	g_FileType = g_pHandleSys-&amp;gt;CreateType(&amp;quot;File&amp;quot;, &lt;br /&gt;
			&amp;amp;g_FileTypeHandler, &lt;br /&gt;
			0, &lt;br /&gt;
			NULL, &lt;br /&gt;
			&amp;amp;rules, &lt;br /&gt;
			myself-&amp;gt;GetIdentity(), &lt;br /&gt;
			NULL);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Implementing the Native===&lt;br /&gt;
&amp;lt;cpp&amp;gt;/* native Closefile(Handle:hndl); */&lt;br /&gt;
static cell_t sm_CloseFile(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	Handle_t hndl = static_cast&amp;lt;Handle_t&amp;gt;(params[1]);&lt;br /&gt;
	HandleError err;&lt;br /&gt;
	HandleSecurity sec;&lt;br /&gt;
&lt;br /&gt;
	/* Build our security descriptor */&lt;br /&gt;
	sec.pOwner = pContext-&amp;gt;GetIdentity();	/* Needed, HANDLE_RESTRICT_OWNER is default */&lt;br /&gt;
	sec.pIdentity = myself-&amp;gt;GetIdentity();	/* But only this extension can read */&lt;br /&gt;
&lt;br /&gt;
	/* Attempt to read the given handle as our type, using our security info.&lt;br /&gt;
	 * Note that we read the pointer directly in with a little cast.&lt;br /&gt;
	 * This type of cast is safe since sizeof(void **) == sizeof(void *) == sizeof(T *) in almost all cases.&lt;br /&gt;
	 */&lt;br /&gt;
	FILE *fp;&lt;br /&gt;
	if ((err = g_pHandleSys-&amp;gt;FreeHandle(hndl, &amp;amp;sec))&lt;br /&gt;
	     != HandleError_None)&lt;br /&gt;
	{&lt;br /&gt;
		return pContext-&amp;gt;ThrowNativeError(&amp;quot;Invalid file handle %x (error %d)&amp;quot;, hndl, err);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restricting CloseHandle Per-Handle==&lt;br /&gt;
Taking our above example, it is possible that we might want some Handles to be closed via CloseHandle(), but others not.  Again, this is useful if you wish to pass a Handle as read-only to a plugin, commonly done when using non-temporary structures or Handles used in Forwards.&lt;br /&gt;
&lt;br /&gt;
In this example, we'll create a global instance of our file type, and this instance will be denied access to CloseHandle(), whereas files returned by OpenFile() will not.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&amp;lt;cpp&amp;gt;Handle_t g_GlobalFile;&lt;br /&gt;
&lt;br /&gt;
Initialize()&lt;br /&gt;
{&lt;br /&gt;
	/* Register the type with default security permissions */&lt;br /&gt;
	g_FileType = g_pHandleSys-&amp;gt;CreateType(&amp;quot;File&amp;quot;, &lt;br /&gt;
			&amp;amp;g_FileTypeHandler, &lt;br /&gt;
			0, &lt;br /&gt;
			NULL, &lt;br /&gt;
			NULL, &lt;br /&gt;
			myself-&amp;gt;GetIdentity(), &lt;br /&gt;
			NULL);&lt;br /&gt;
&lt;br /&gt;
	/* Create our 'global' file */&lt;br /&gt;
	FILE *fp = tmpfile();&lt;br /&gt;
&lt;br /&gt;
	/* Set up the security descriptor */&lt;br /&gt;
	HandleSecurity sec;&lt;br /&gt;
	sec.pOwner = NULL;		/* No owner for this Handle */&lt;br /&gt;
	sec.pIdentity = myself-&amp;gt;GetIdentity();	/* Only this identity will be allowed */&lt;br /&gt;
&lt;br /&gt;
	/* Set up the access permissions */&lt;br /&gt;
	HandleAccess rules;&lt;br /&gt;
	g_pHandleSys-&amp;gt;InitAccessDefaults(NULL, &amp;amp;rules);&lt;br /&gt;
	rules.access[HandleAccess_Delete] |= HANDLE_RESTRICT_IDENTITY;&lt;br /&gt;
&lt;br /&gt;
	/* Finally, create the Handle with our rules */&lt;br /&gt;
	g_GlobalFile = g_pHandleSys-&amp;gt;CreateHandleEx(g_FileType, fp, &amp;amp;sec, &amp;amp;rules, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Shutdown()&lt;br /&gt;
{&lt;br /&gt;
	/* Remove our global Handle (not needed, but we do it for clarity */&lt;br /&gt;
	HandleSecurity sec;&lt;br /&gt;
	sec.pOwner = NULL;&lt;br /&gt;
	sec.pIdentity = myself-&amp;gt;GetIdentity();&lt;br /&gt;
&lt;br /&gt;
	g_pHandleSys-&amp;gt;FreeHandle(g_GlobalFile, &amp;amp;sec);&lt;br /&gt;
&lt;br /&gt;
	/* Remove the type on shutdown */&lt;br /&gt;
	g_pHandleSys-&amp;gt;RemoveType(g_FileType, myself-&amp;gt;GetIdentity());&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=11141</id>
		<title>Creating Natives (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=11141"/>
		<updated>2021-01-15T09:48:47Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Creating the Native */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod allows plugins to create their own natives that other plugins can use.  This is very similar to AMX Mod X's {{amxx_func|register_native}} function.  It is a powerful inter-plugin communication resource that can greatly enhance the functionality you provide.&lt;br /&gt;
&lt;br /&gt;
''Prerequisites:'' You should have a good grasp of Pawn or SourcePawn scripting, as well as how [[Tags (Scripting)|Tags]] work.&amp;lt;br&amp;gt;&lt;br /&gt;
''Note:'' Most functions herein can be found in the [[SourceMod SDK]], under &amp;lt;tt&amp;gt;plugins/include/functions.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Before creating natives, you should always document and specify exactly how they will work.  This means writing your &amp;quot;include file&amp;quot; beforehand.  Not only does this guide you in writing your natives, but it has the added benefit of completing a large portion of documentation at the same time.&lt;br /&gt;
&lt;br /&gt;
==Include File==&lt;br /&gt;
For our first example, let's start off with a simple native that adds two numbers, a float and a non-float.  It might look like this:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/** Double-include prevention */&lt;br /&gt;
#if defined _mynatives_included_&lt;br /&gt;
  #endinput&lt;br /&gt;
#endif&lt;br /&gt;
#define _mynatives_included_&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adds two numbers together.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num1    An integer.&lt;br /&gt;
 * @param num2    A float.&lt;br /&gt;
 * @return        The float value of the integer and float added together.&lt;br /&gt;
 */&lt;br /&gt;
native float My_AddNumbers(int num1, int num2);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The documentation and commenting style above is a SourceMod Development Team convention.  While you are not required to follow it for your own code, it may be a good idea to enhance readability (as readers will expect the style to conform).&lt;br /&gt;
&lt;br /&gt;
==Creating the Native==&lt;br /&gt;
To actually create the native, first let's define the native handler itself.  From the [https://sm.alliedmods.net/new-api/functions/NativeCall API reference] we can see that there are two prototypes. We will use the second one:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;function any (Handle plugin, int numParams)&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus, we have a function like:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public any Native_My_AddNumbers(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we don't use the same function name as we did in our include file.  This is to prevent a possible ''name clash''.  Otherwise, two different symbols (one a native, another a function) could have the same name, and that's not allowed.  We'll see later how we bind the native to its actual name.&lt;br /&gt;
&lt;br /&gt;
Next, we need to implement our native.  &lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public any Native_My_AddNumbers(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	/* Retrieve the first parameter we receive */&lt;br /&gt;
	int num1 = GetNativeCell(1);&lt;br /&gt;
	/* Retrieve the second parameter we receive */&lt;br /&gt;
	float num2 = view_as&amp;lt;float&amp;gt;(GetNativeCell(2));&lt;br /&gt;
	/* Add them together */&lt;br /&gt;
	float value = num1 + num2;&lt;br /&gt;
	/* Return the value */&lt;br /&gt;
	return value;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should note three important details.  The first is that we have to manually grab the parameters -- they're not easily sent via arguments.  This is for technical reasons that go beyond the scope of this document.  That means you have to know exactly ''how'' to grab each parameter.  For our example, we know that both parameters are simply cells, and thus we can use &amp;lt;tt&amp;gt;GetNativeCell&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
However, the second detail is that there is no &amp;lt;tt&amp;gt;GetNativeCellFloat&amp;lt;/tt&amp;gt;.  This is because a &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt; is still a cell; the data is just interpreted differently.  Thus, we ''cast'' the type to &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt; manually.  '''This is different from calling float(GetNativeCell(2)).'''  In fact, that would not work; the &amp;lt;tt&amp;gt;float()&amp;lt;/tt&amp;gt; call would interpret the cell as an integer, when in fact it's already a float, just with the wrong type (i.e., no type at all).&lt;br /&gt;
&lt;br /&gt;
Lastly, we did not need to verify &amp;lt;tt&amp;gt;numParams&amp;lt;/tt&amp;gt;.  The compiler will always send the correct amount of parameters - the user can't mess this up in any easy way.  Only if you use variadic arguments, or add parameters and need to support older binaries, do you need to handle &amp;lt;tt&amp;gt;numParams&amp;lt;/tt&amp;gt; variations.&lt;br /&gt;
&lt;br /&gt;
==Registering the Native==&lt;br /&gt;
Natives must be registered in &amp;lt;tt&amp;gt;AskPluginLoad2&amp;lt;/tt&amp;gt;.  Although they can be registered elsewhere, only this function guarantees that all other plugins will see your native.  The definition for this forward is in &amp;lt;tt&amp;gt;sourcemod.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	CreateNative(&amp;quot;My_AddNumbers&amp;quot;, Native_My_AddNumbers);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, any plugin will be able to use our native as if it were from a Core or a C++ extension.&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
==By-Reference==&lt;br /&gt;
Sometimes, it may be desirable to return data through by-reference parameters.  For example, observe the following native prototype:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/**&lt;br /&gt;
 * Closes a Handle, and sets the variable to INVALID_HANDLE by reference.&lt;br /&gt;
 *&lt;br /&gt;
 * @param hndl     Handle to close and clear.&lt;br /&gt;
 * @return         Anything that CloseHandle() returns.&lt;br /&gt;
 */&lt;br /&gt;
native bool AltCloseHandle(Handle &amp;amp;hndl);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this would look like:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public int Native_AltCloseHandle(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	Handle hndl = view_as&amp;lt;Handle&amp;gt;(GetNativeCellRef(1));&lt;br /&gt;
	SetNativeCellRef(1, 0);   /* Zero out the variable by reference */&lt;br /&gt;
	return CloseHandle(hndl);&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we have a native that is &amp;quot;safer&amp;quot; than a normal &amp;lt;tt&amp;gt;CloseHandle&amp;lt;/tt&amp;gt;, as it ensures we don't hold onto invalid Handles.&lt;br /&gt;
&lt;br /&gt;
==Strings==&lt;br /&gt;
Strings can be retrieved and altered via dynamic natives.  Observe the following native prototype:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/**&lt;br /&gt;
 * Converts a string to upper case.&lt;br /&gt;
 *&lt;br /&gt;
 * @param str      String to convert.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void StringToUpper(char[] str);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this is very easy, because of dynamic arrays:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public int Native_StringToUpper(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int len;&lt;br /&gt;
	GetNativeStringLength(1, len);&lt;br /&gt;
&lt;br /&gt;
	if (len &amp;lt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	char[] str = new char[len + 1];&lt;br /&gt;
	GetNativeString(1, str, len + 1);&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; len; i++)&lt;br /&gt;
	{&lt;br /&gt;
		/* 5th bit specifies case in ASCII -- &lt;br /&gt;
		 * this is not UTF-8 compatible.&lt;br /&gt;
		 */&lt;br /&gt;
		if ((str[i] &amp;amp; (1 &amp;lt;&amp;lt; 5)) == (1 &amp;lt;&amp;lt; 5))&lt;br /&gt;
		{&lt;br /&gt;
			str[i] &amp;amp;= ~(1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SetNativeString(1, str, len+1, false);&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arrays==&lt;br /&gt;
Working with arrays is very similar to strings.  For example, observe the following native prototype:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/**&lt;br /&gt;
 * Sums an array of numbers and returns the sum.&lt;br /&gt;
 *&lt;br /&gt;
 * @param array     Array of numbers to sum.&lt;br /&gt;
 * @param size      Size of array.&lt;br /&gt;
 * @return          Sum of the array elements.&lt;br /&gt;
 */&lt;br /&gt;
native int SumArray(const int array[], int size);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this could look like:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public int Native_SumArray(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int size = GetNativeCell(2);&lt;br /&gt;
	if (size &amp;lt; 1)&lt;br /&gt;
	{&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int array[size], total;&lt;br /&gt;
	GetNativeArray(1, array, size);&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
	{&lt;br /&gt;
		total += array[i];&lt;br /&gt;
	}&lt;br /&gt;
	return total;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, there is a &amp;lt;tt&amp;gt;SetNativeArray&amp;lt;/tt&amp;gt;, which is used to alter array contents.&lt;br /&gt;
&lt;br /&gt;
==Variable Arguments==&lt;br /&gt;
Variable arguments are usually used when dealing with [[Format Class Functions (SourceMod Scripting)|format class functions]], however it is also possible to use them for general functionality.  The only trick is that unlike normal parameters, every variable argument parameter is passed by-reference.  This adds no change for arrays and strings, but for floats, handles, numbers, or anything else that fits in a cell, &amp;lt;tt&amp;gt;GetNativeCellRef&amp;lt;/tt&amp;gt; must be used instead.&lt;br /&gt;
&lt;br /&gt;
As an example, let's convert our function from above to use variable arguments:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/**&lt;br /&gt;
 * Sums a list of numbers.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num    First number to use as a base.&lt;br /&gt;
 * @param ...    Any number of additional numbers to add.&lt;br /&gt;
 * @return       Sum of all numbers passed.&lt;br /&gt;
 */&lt;br /&gt;
native int SumParams(int num, ...);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this would look like:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public int Native_SumParams(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int base = GetNativeCell(1);&lt;br /&gt;
	for (int i = 2; i &amp;lt;= numParams; i++)&lt;br /&gt;
	{&lt;br /&gt;
		base += GetNativeCellRef(i);&lt;br /&gt;
	}&lt;br /&gt;
	return base;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Format Functions==&lt;br /&gt;
It is also possible to create your own [[Format Class Functions (SourceMod Scripting)|format class functions]].  This topic is much more complicated than the previous ones, as the native string formatter allows for many different configurations.  This is mainly for optimization.  Note that a formatting routine deals with two buffers: the input format string, and the output buffer.  &amp;lt;tt&amp;gt;FormatNativeString&amp;lt;/tt&amp;gt;, by default, uses parameter indexes directly so you don't have to copy or locally store any of these buffers.&lt;br /&gt;
&lt;br /&gt;
The most common usage of this is to accept a user-formatted string and to not&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/**&lt;br /&gt;
 * Prints a message with a [DEBUG] prefix to the server.&lt;br /&gt;
 *&lt;br /&gt;
 * @param fmt         Format string.&lt;br /&gt;
 * @param ...         Format arguments.&lt;br /&gt;
 */&lt;br /&gt;
native void DebugPrint(const char[] fmt, any ...);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be easily implemented as:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;native int DebugPrint(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	char buffer[1024]; &lt;br /&gt;
	int written;&lt;br /&gt;
&lt;br /&gt;
	FormatNativeString(0, /* Use an output buffer */&lt;br /&gt;
		1, /* Format param */&lt;br /&gt;
		2, /* Format argument #1 */&lt;br /&gt;
		sizeof(buffer), /* Size of output buffer */&lt;br /&gt;
		written, /* Store # of written bytes */&lt;br /&gt;
		buffer /* Use our buffer */&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
	PrintToServer(&amp;quot;[DEBUG] %s&amp;quot;, buffer);&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Throwing Errors==&lt;br /&gt;
Often, your native will encounter an unrecoverable error, and you wish to trigger a fatal exception.  This is equivalent to &amp;lt;tt&amp;gt;IPluginContext::ThrowNativeError&amp;lt;/tt&amp;gt;, and will halt the current function execution in the plugin.  The debugger will be invoked and a backtrace will be printed out (if the plugin is in debug mode).  Although the current function is cancelled, the plugin will continue to operate normally afterward.&lt;br /&gt;
&lt;br /&gt;
For example, let's say we have a native that operates on clients.  We want to throw an error if we get a client index that is invalid or disconnected.  We could do this like so:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;public int MyFunction(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int client = GetNativeCell(1);&lt;br /&gt;
	if (client &amp;lt; 1 || client &amp;gt; MaxClients)&lt;br /&gt;
	{&lt;br /&gt;
		return ThrowNativeError(SP_ERROR_NATIVE, &amp;quot;Invalid client index (%d)&amp;quot;, client);&lt;br /&gt;
	}&lt;br /&gt;
	if (!IsClientConnected(client))&lt;br /&gt;
	{&lt;br /&gt;
		return ThrowNativeError(SP_ERROR_NATIVE, &amp;quot;Client %d is not connected&amp;quot;, client);&lt;br /&gt;
	}&lt;br /&gt;
	/* Code */&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating Natives for Methodmaps==&lt;br /&gt;
Declaring natives for methodmaps is similar to other natives, with a few requirements:&lt;br /&gt;
&lt;br /&gt;
# The &amp;lt;tt&amp;gt;CreateNative&amp;lt;/tt&amp;gt; string argument is in the format &amp;lt;tt&amp;gt;Tag.Function&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# The function is declared as a &amp;quot;member&amp;quot; of the methodmap.&lt;br /&gt;
# The magic &amp;quot;this&amp;quot; parameter is implicitly passed in first.&lt;br /&gt;
&lt;br /&gt;
Here's an example of a shared plugin and its corresponding include file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;/* sharedplugin.sp */&lt;br /&gt;
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	CreateNative(&amp;quot;Number.PrintToClient&amp;quot;, Native_PrintNumberToClient);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_PrintNumberToClient(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int number = GetNativeCell(1);&lt;br /&gt;
	int client = GetNativeCell(2);&lt;br /&gt;
&lt;br /&gt;
	PrintToChat(client, &amp;quot;%d&amp;quot;, number);&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* sharedplugin.inc */&lt;br /&gt;
methodmap Number&lt;br /&gt;
{&lt;br /&gt;
	public Number(int number)&lt;br /&gt;
	{&lt;br /&gt;
		return view_as&amp;lt;Number&amp;gt;(number);&lt;br /&gt;
	}&lt;br /&gt;
	public native void PrintToClient(int client);&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Building_SourceMod&amp;diff=11125</id>
		<title>Building SourceMod</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Building_SourceMod&amp;diff=11125"/>
		<updated>2020-12-13T16:20:27Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: Fix link to VS2017 Build Tools, add link to VS2019 Build Tools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Compiling SourceMod is not difficult, but requires a number of prerequisites.  This article details the requirements and steps to being able to build working SourceMod binaries.&lt;br /&gt;
&lt;br /&gt;
Note that specific compiler versions are required to maintain ABI compatibility with Source engine binaries.&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Install Visual Studio or Visual C++. VS/VC 2010 or above is required for SourceMod 1.6.x and earlier. VS/VC 2013 Update 2 or above is required for SourceMod 1.7.x and later (Express editions should work fine). VS/VC 2015 is required for SourceMod 1.10.x or later. If you use 2013 or higher, make sure to get the &amp;quot;Desktop&amp;quot; version: [http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-desktop Visual Studio Express 2013 for Desktop].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;With VS/VC 2017, you may use [https://download.visualstudio.microsoft.com/download/pr/b8d403d9-01a4-45a0-9229-db5572fd5e4e/997600ae09705dfc6d069d8ad2cfad1962d8ff6fedd6c9fe5abee36c7c919f34/vs_BuildTools.exe the build tools installer] to install the minimal set of packages.  You will want to install the following:  .NET 4.6.1 SDK and corrresponding targeting pack, C++/CLI support, VC++2015.3 v14.00 toolset for desktop, Visual C++ Build Tools core features, Windows 8.1 SDK, and Windows Universal C Runtime.  When attempting to configure and build, use the &amp;quot;VS2015 x86 Native Tools Command Prompt&amp;quot; Start Menu option to have the build tools available in the current Command Prompt's PATH.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;With [https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019 Build Tools for Visual Studio 2019], you can install the following individual components:  MSVC v140 - VS 2015 C++ build tools (v14.00), Windows Universal CRT SDK, and Windows 10 SDK.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Install [http://git-scm.com/ Git]. Make sure that you select the option that adds Git to PATH.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Next, you will need to start an environment capable of running Python and interacting with the Visual Studio compiler.&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Install [http://python.org/ Python] 2.7. It will install to C:\Python27 by default. (Version 3.4 will work, but is not recommended for compatibility with other tools).&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Add Python to your &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; variable. Go to Control Panel, System, Advanced, Environment Variables. Add &amp;lt;tt&amp;gt;C:\Python27;C:\Python27\Scripts&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; (or wherever your Python install is).&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Under Start, Programs, Microsoft Visual Studio, select the &amp;quot;Visual Studio Tools&amp;quot; folder and run &amp;quot;Visual Studio Command Prompt&amp;quot;. Alternately, open a normal command prompt and run &amp;lt;tt&amp;gt;&amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars.bat&amp;quot;&amp;lt;/tt&amp;gt;. Substitute your Visual Studio version if needed.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Install Git, via either system packages or from the [http://git-scm.com/ Git] distribution.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Install a C++ compiler and dependencies. SourceMod officially supports clang. For example, on Ubuntu/Debian:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install clang lib32stdc++-7-dev lib32z1-dev libc6-dev-i386 linux-libc-dev:i386&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Archlinux==&lt;br /&gt;
&lt;br /&gt;
# Enable multilib repository as described in the [https://wiki.archlinux.org/index.php/multilib Archlinux wiki page].&lt;br /&gt;
# Install the following packages:&lt;br /&gt;
#:&amp;lt;pre&amp;gt;pacman -S git python2 gcc-multilib lib32-glibc lib32-libstdc++5 lib32-zlib&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
Mac OS X 10.7 or higher is required to build, however, SourceMod will work on 10.5. SourceMod will neither build nor run on older PPC Macs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Install the Xcode Command Line Tools.&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;For OS X 10.9 or higher, run the command below in Terminal and click the Install button in the window that appears.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xcode-select --install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;For earlier versions of OS X, download and install Xcode from the App Store. Launch Xcode and then navigate to Preferences -&amp;gt; Downloads -&amp;gt; Components -&amp;gt; Command Line Tools -&amp;gt; Install. If you have recently upgraded Xcode, you will need to perform this step again. SourceMod cannot build without Xcode's command line tools.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Downloading Source and Dependencies=&lt;br /&gt;
&lt;br /&gt;
First, grab the SourceMod source tree. We recommend placing it inside its own folder, since we'll also need to download its dependencies.&lt;br /&gt;
&lt;br /&gt;
'''You should do a recursive checkout of the git repo since the sourcepawn repo is a submodule of sourcemod now, see https://stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules to do that.'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p alliedmodders&lt;br /&gt;
cd alliedmodders&lt;br /&gt;
git clone --recursive https://github.com/alliedmodders/sourcemod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, run the &amp;lt;tt&amp;gt;checkout-deps.sh&amp;lt;/tt&amp;gt; script. This will download all dependencies and attempt to install AMBuild. If you are using Linux or OS X, it may prompt you for your sudo password at the very end. If you want to skip this and install AMBuild manually, just Ctrl+C. (Do not run the checkout script with sudo.)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bash sourcemod/tools/checkout-deps.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After it's done, you should see a large number of hl2sdk folders and other assorted dependencies, like MySQL, Metamod:Source, and AMBuild.&lt;br /&gt;
&lt;br /&gt;
If you are on Windows, you can use 'checkout-deps' PowerShell script (if it exists), you just may need to swap ExecutionPolicy to a less restrictive one. (See: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies).&lt;br /&gt;
&lt;br /&gt;
Otherwise, you can manually download the dependencies with the commands below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone --mirror https://github.com/alliedmodders/hl2sdk hl2sdk-proxy-repo&lt;br /&gt;
# For each SDK you want to build with:&lt;br /&gt;
# git clone hl2sdk-proxy-repo hl2sdk-&amp;lt;SDK&amp;gt; -b &amp;lt;SDK&amp;gt;&lt;br /&gt;
# e.g. git clone hl2sdk-proxy-repo hl2sdk-csgo -b csgo&lt;br /&gt;
&lt;br /&gt;
git clone https://github.com/alliedmodders/metamod-source mmsource-1.10 -b 1.10-dev&lt;br /&gt;
&lt;br /&gt;
# If building version 1.10 of SourceMod, use MySQL 5.5&lt;br /&gt;
wget https://cdn.mysql.com/archives/mysql-5.5/mysql-5.5.54-win32.zip mysql-5.5&lt;br /&gt;
&lt;br /&gt;
# If building &amp;lt; version 1.10 of SourceMod, use MySQL 5.0&lt;br /&gt;
wget https://cdn.mysql.com/archives/mysql-5.0/mysql-noinstall-5.0.24a-win32.zip mysql-5.0&lt;br /&gt;
&lt;br /&gt;
# Install AMBuild&lt;br /&gt;
git clone https://github.com/alliedmodders/ambuild&lt;br /&gt;
pip install ./ambuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you can skip MySQL and SDK versions you don't plan to build.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
&lt;br /&gt;
The first time you are building a SourceMod tree, you must ''configure'' the build. This step initializes some basic information and allows some customization around how things get compiled.&lt;br /&gt;
&lt;br /&gt;
First create a build folder within your sourcemod folder, and then run &amp;lt;tt&amp;gt;configure.py&amp;lt;/tt&amp;gt;. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd sourcemod&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
python ../configure.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is safe to reconfigure over an old build. However, it's probably a bad idea to configure inside a random, non-empty folder.&lt;br /&gt;
&lt;br /&gt;
There are a few extra options you can pass to &amp;lt;tt&amp;gt;configure&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*--enable-debug - Compile with symbols and debug checks/assertions.&lt;br /&gt;
*--enable-optimize - Compile with optimizations.&lt;br /&gt;
*--no-sse - Disable floating point optimizations (if you have a very, very old CPU).&lt;br /&gt;
*--no-mysql - Don't build the MySQL database module.&lt;br /&gt;
*--sdks css - Only build css.&lt;br /&gt;
&lt;br /&gt;
See configure.py for all the options.&lt;br /&gt;
&lt;br /&gt;
=Building=&lt;br /&gt;
&lt;br /&gt;
To build SourceMod, simply type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ambuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your build folder. Alternately, you can specify the path of the build folder:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ambuild debug-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full package layout that would be shipped for release is in the &amp;lt;tt&amp;gt;package&amp;lt;/tt&amp;gt; folder of the build.&lt;br /&gt;
&lt;br /&gt;
=Deprecated Tools=&lt;br /&gt;
==Visual Studio Project Files==&lt;br /&gt;
In the future, we will use AMBuild to automatically generate project files, and the existing project files will be removed from the SourceMod tree. In the meantime however, it is possible to use these files. Unfortunately, they require a bit of extra work to use.&lt;br /&gt;
&lt;br /&gt;
First, make sure you've downloaded all necessary dependencies (SDKs, Metamod:Source source code, and MySQL) via the &amp;lt;tt&amp;gt;checkout-windows-deps.bat&amp;lt;/tt&amp;gt; script. Next,&lt;br /&gt;
#Open the Control Panel (for example, via Start -&amp;gt; Settings).&lt;br /&gt;
#Open the System control.  If you don't see it, you may need to switch to &amp;quot;Classic view&amp;quot; (either via the left-hand pane or by going to Tools -&amp;gt; Folder Options).&lt;br /&gt;
#Click the Advanced tab.&lt;br /&gt;
#Click the Environment Variables button.&lt;br /&gt;
&lt;br /&gt;
Now, add your environment variables to either your User settings or your System settings. Create a new variable for each item in the list below. You may omit SDKs that you do not plan to build against. The item names are in &amp;lt;tt&amp;gt;fixed-width font&amp;lt;/tt&amp;gt; and their value descriptions follow.&lt;br /&gt;
*&amp;lt;tt&amp;gt;MMSOURCE19&amp;lt;/tt&amp;gt; - Path to Metamod:Source 1.10+&lt;br /&gt;
*&amp;lt;tt&amp;gt;MMSOURCE18&amp;lt;/tt&amp;gt; - Path to Metamod:Source 1.10+&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK&amp;lt;/tt&amp;gt; - Path to HL2SDK Ep1/Original&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKOB&amp;lt;/tt&amp;gt; - Path to HL2SDK Ep2/OrangeBox for mods&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKOBVALVE&amp;lt;/tt&amp;gt; - Path to HL2SDK Source 2009 (HL2:DM, DoD:S, TF2)&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK-SWARM&amp;lt;/tt&amp;gt; - Path to HL2SDK Alien Swarm&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK-BGT&amp;lt;/tt&amp;gt; - Path to HL2SDK for Bloody Good Time&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKCSGO&amp;lt;/tt&amp;gt; - Path to HL2SDK CS:GO&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKCSS&amp;lt;/tt&amp;gt; - Path to HL2SDK CS:S&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK-DARKM&amp;lt;/tt&amp;gt; - Path to HL2SDK Dark Messiah&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK-EYE&amp;lt;/tt&amp;gt; - Path to HL2SDK E.Y.E.: Divine Cybermancy&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKL4D&amp;lt;/tt&amp;gt; - Path to HL2SDK L4D1&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKL4D2&amp;lt;/tt&amp;gt; - Path to HL2SDK L4D2&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK-DOTA&amp;lt;/tt&amp;gt; - Path to HL2SDK DOTA 2&lt;br /&gt;
*&amp;lt;tt&amp;gt;MYSQL5&amp;lt;/tt&amp;gt; - Path to the folder that contains MySQL's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt; folders.&lt;br /&gt;
&lt;br /&gt;
==Makefiles==&lt;br /&gt;
Makefiles are deprecated and will be removed from the tree soon.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=List_of_custom_SourceMod_includes&amp;diff=11098</id>
		<title>List of custom SourceMod includes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=List_of_custom_SourceMod_includes&amp;diff=11098"/>
		<updated>2020-08-30T13:47:22Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Plugins/Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
    To do:&lt;br /&gt;
    ▪ Add linkage to each specific raw .inc file;&lt;br /&gt;
      ▪ Best way to do this?&lt;br /&gt;
      ▪ Are we allowed to upload .inc files to the wiki?&lt;br /&gt;
      ▪ Would there be any objections to it?&lt;br /&gt;
    ▪ Find and add any other custom includes;&lt;br /&gt;
      ▪ 404UNF: Currently scanning through all of Snippets &amp;amp; Tutorials&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following is a list of custom includes created by various users on AlliedModders. Some are standalone includes designed to be used with any project, others are includes that come with a plugin or extension but can also be used in other projects.&lt;br /&gt;
&lt;br /&gt;
== Standalone Includes ==&lt;br /&gt;
{| style=&amp;quot;width: 80em; text-align: center;&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Author&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Filename&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 30em;&amp;quot; | Notes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=232476 Advanced MOTDPanel]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=150845 Dr. McKay]&lt;br /&gt;
| &amp;lt;code&amp;gt;advanced_motd.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=233282 Append New ConVar]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=210752 KissLick]&lt;br /&gt;
| &amp;lt;code&amp;gt;convar_append.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=204254 AutoExecConfig]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=157964 Impact123]&lt;br /&gt;
| &amp;lt;code&amp;gt;autoexecconfig.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=299839 CBaseAnimatingOverlay]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=181730 Pelipoika]&lt;br /&gt;
| &amp;lt;code&amp;gt;cbaseanimatingoverlay.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=307157 Client Methodmaps]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=232360 ThatKidWhoGames]&lt;br /&gt;
| &amp;lt;code&amp;gt;clients_methodmap.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=306620 Client Preferences Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=224722 xXDeathreusXx]&lt;br /&gt;
| &amp;lt;code&amp;gt;clientprefs_stocks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=96831 Colors]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=17252 exvel]&lt;br /&gt;
| &amp;lt;code&amp;gt;colors.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=302788 Color Manipulation]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=278689 hmmmmm]&lt;br /&gt;
| &amp;lt;code&amp;gt;colourmanip.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=267743 ColorVariables]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=210752 KissLick]&lt;br /&gt;
| &amp;lt;code&amp;gt;colorvariables.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=279187 CS:GO Items]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=237260 xCoderx]&lt;br /&gt;
| &amp;lt;code&amp;gt;csgoitems.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=285744 Data String Parameter]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59694 Drixevel]&lt;br /&gt;
| &amp;lt;code&amp;gt;data_string_parameter.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allows you to pass a string through a data parameter.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=264897 DString - Dynamic Strings]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=102471 Eun]&lt;br /&gt;
| &amp;lt;code&amp;gt;DString.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allows you to use strings with dynamic lengths.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=237045 EmitSoundAny]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=38996 Powerlord]&lt;br /&gt;
| &amp;lt;code&amp;gt;emitsoundany.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| '''Outdated'''; CSGO no longer requires special sound handling for mp3s&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=303716 L4D/L4D2 Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59694 Drixevel]&lt;br /&gt;
| &amp;lt;code&amp;gt;l4d.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=100084 LogHelper]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=37514 psychonic]&lt;br /&gt;
| &amp;lt;code&amp;gt;loghelper.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Contains stocks for many HL Standard log line formats, and also gets around the current limitations of Sourcemod's &amp;lt;code&amp;gt;%L&amp;lt;/code&amp;gt; format operator and &amp;lt;code&amp;gt;FormatUserLogText()&amp;lt;/code&amp;gt; function (not including team name on log line).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=265325 Menu Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=210752 KissLick]&lt;br /&gt;
| &amp;lt;code&amp;gt;menu_stocks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allows you to pass a value (cell, float or string) to menu callback.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=306954 Menu Targeting]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=278689 hmmmmm]&lt;br /&gt;
| &amp;lt;code&amp;gt;menu_targeting.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=185016 MoreColors]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=150845 Dr. McKay]&lt;br /&gt;
| &amp;lt;code&amp;gt;morecolors.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=247770 MultiColors]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=178115 Bara]&lt;br /&gt;
| &amp;lt;code&amp;gt;multicolors.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=304459 Nested StringMaps]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=226515 Kinsi]&lt;br /&gt;
| &amp;lt;code&amp;gt;NestedStringMap.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=298248 Overlays]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=259929 shanapu]&lt;br /&gt;
| &amp;lt;code&amp;gt;overlays.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=307742 ParseRange]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=180597 ddhoward]&lt;br /&gt;
| &amp;lt;code&amp;gt;parseRange.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Takes a string indicating a range of numbers or multiple ranges of numbers, and returns an ArrayList containing individual values.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=314096 Print Valve Translations]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=180597 Powerlord]&lt;br /&gt;
| &amp;lt;code&amp;gt;printvalvetranslation.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Wrapper around the TextMsg usermessage to print game translations to chat, hintbox, center text, or client console&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=172593 SHA-1 Hashing Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=41418 Peace-Maker]&lt;br /&gt;
| &amp;lt;code&amp;gt;sha1.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Provides 2 stock functions to calculate the SHA-1 hash for a given string or file.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=206496 Smart Download Manager]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=79786 Zephyrus]&lt;br /&gt;
| &amp;lt;code&amp;gt;smartdm.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=306471 SM-JSON]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=270503 clug]&lt;br /&gt;
| &amp;lt;code&amp;gt;json.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=148387 SMLib]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=27799 Berni]&lt;br /&gt;
| &amp;lt;code&amp;gt;smlib.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=304040 SourceMod Miscellaneous Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59694 Drixevel]&lt;br /&gt;
| &amp;lt;code&amp;gt;sourcemod-misc.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=283913 Table Buffer for Console]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=190571 ofir753]&lt;br /&gt;
| &amp;lt;code&amp;gt;consoletable.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allows you to format an oriented table for console output.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=155911 TF2 Alternative HUD Text]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=51338 GNCMatt]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2_hud.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=300350 Unix Time for SourceMod]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=185471 milutinke]&lt;br /&gt;
| &amp;lt;code&amp;gt;unixtime_sourcemod.inc&amp;lt;/code&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=300303 Variable Arguments for Functions]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=253813 Kailo]&lt;br /&gt;
| &amp;lt;code&amp;gt;valist.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=307906 Vector Helpers]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=224722 xXDeathreusXx]&lt;br /&gt;
| &amp;lt;code&amp;gt;vector_helpers.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Extends functionality of SourceMod vectors so you don't have to iterate through array blocks every time you want to do a simple operation on a vector.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=302597 WebFix]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=261613 Byte]&lt;br /&gt;
| &amp;lt;code&amp;gt;webfix.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| '''Outdated'''; Use [https://forums.alliedmods.net/showthread.php?t=302530 VGUI URL Cache Buster] instead.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Plugins/Extensions ==&lt;br /&gt;
{| style=&amp;quot;width: 80em; text-align: center;&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Author&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: auto;&amp;quot; | Filename&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 30em;&amp;quot; | Notes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=300927 ASteamBot]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=198439 Arkarr]&lt;br /&gt;
| &amp;lt;code&amp;gt;asteambot.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=294511 Bank]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=198439 Arkarr]&lt;br /&gt;
| &amp;lt;code&amp;gt;bank.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=193067 Be the Robot]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=152150 MasterOfTheXP]&lt;br /&gt;
| &amp;lt;code&amp;gt;betherobot.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=197815 Collision Hooks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=49537 VoiDeD]&lt;br /&gt;
| &amp;lt;code&amp;gt;collisionhooks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=180114 DHooks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=26021 Dr!fter]&lt;br /&gt;
| &amp;lt;code&amp;gt;dhooks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allows plugins to create dynamic hooks which normally would need an extension&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=292663 Discord/Slack API]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=74431 zipcore]&lt;br /&gt;
| &amp;lt;code&amp;gt;discord.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=270519 Dynamic Objects]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=240520 Neuro Toxin]&lt;br /&gt;
| &amp;lt;code&amp;gt;dynamic.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=311477 GeoIP2]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=100698 Accelerator74]&lt;br /&gt;
| &amp;lt;code&amp;gt;geoip.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=303671 HexTags Chat/Score Colors]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=273262 Papero]&lt;br /&gt;
| &amp;lt;code&amp;gt;hextags.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=270962 HTTP Server w/ RCON Multiplexer]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59029 asherkin]&lt;br /&gt;
| &amp;lt;code&amp;gt;webcon.inc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conplex.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=114979 L4D2 Infected Spawn API]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=67285 V10]&lt;br /&gt;
| &amp;lt;code&amp;gt;l4d2_InfectedSpawnApi.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Custom infected boss spawning API.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=298024 REST in Pawn]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=34668 DJ Tsunami]&lt;br /&gt;
| &amp;lt;code&amp;gt;ripext.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| High performance HTTP client for JSON REST APIs. Supports HTTP/2, HTTPS and gzip.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=199794 Server Whitelist Advanced]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=10216 RedSword]&lt;br /&gt;
| &amp;lt;code&amp;gt;serverwhitelistadvanced.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=67640 Socket]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=33075 sfPlayer]&lt;br /&gt;
| &amp;lt;code&amp;gt;socket.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=61000 SourceBans]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=26272 Olly]&lt;br /&gt;
| &amp;lt;code&amp;gt;sourcebans.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=263735 SourceBans++]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=246631 Sarabveer]&lt;br /&gt;
| &amp;lt;code&amp;gt;sourcebanspp.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=129146 SourceIRC]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=80180 Azelphur]&lt;br /&gt;
| &amp;lt;code&amp;gt;sourceirc.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=170630 SteamTools]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59029 asherkin]&lt;br /&gt;
| &amp;lt;code&amp;gt;steamtools.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=229556 SteamWorks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=57030 KyleS]&lt;br /&gt;
| &amp;lt;code&amp;gt;SteamWorks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=281488 Super Spray Handler]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=194280 TheWreckingCrew6]&lt;br /&gt;
| &amp;lt;code&amp;gt;ssh.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=210221 TF2Attributes]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=84304 FlaminSarge]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2attributes.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=315011 TF2 Econ Data]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=252787 nosoop]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf_econ_data.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=255885 TF2 Item DB]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=101497 bottiger]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2idb.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
| '''Outdated'''; Use [https://forums.alliedmods.net/showthread.php?t=315011 TF2 Econ Data] instead.  For plugins that are already written for TF2 Item DB, use [https://github.com/nosoop/SM-TFEconDataCompat the compatibility shim].&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=115100 TF2Items]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=59029 asherkin]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2items.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=255743 TF2Items Extended Stocks]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=149090 ReFlexPoison]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2itemsextended.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?p=1337899 TF2Items Give Weapon]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=84304 FlaminSarge]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2items_giveweapon.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=293722 TF2 Taunts TF2IDB]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=264797 fakuivan]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2_taunts_tf2idb.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=189562 TF2 Pyro Air Jump]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=70143 Leonardo]&lt;br /&gt;
| &amp;lt;code&amp;gt;tf2pyroairjump.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://forums.alliedmods.net/showthread.php?t=302530 VGUI URL Cache Buster]&lt;br /&gt;
| [https://forums.alliedmods.net/member.php?u=252787 nosoop]&lt;br /&gt;
| &amp;lt;code&amp;gt;vgui_motd_stocks.inc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Handles_(SourceMod_Scripting)&amp;diff=11048</id>
		<title>Handles (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Handles_(SourceMod_Scripting)&amp;diff=11048"/>
		<updated>2020-08-15T08:41:41Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Cloning Handles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Handles are a special data type used in [[:Category:SourceMod Scripting|SourceMod Scripting]].  They represent a single internal and unique object.  For example, there are &amp;quot;File&amp;quot; Handles for files, and &amp;quot;Menu&amp;quot; Handles for menus, but they are both encapsulated under the &amp;quot;Handle&amp;quot; [[Tags (SourceMod Scripting)|tag]].&lt;br /&gt;
&lt;br /&gt;
Handles are more than &amp;quot;pointers&amp;quot; from C or C++ because they have a ''reference count''.  This means that the number of copies floating around in memory is tracked.  The actual internal object is not destroyed until each copy is also destroyed.&lt;br /&gt;
&lt;br /&gt;
Since SourcePawn does not have [[Garbage Collection]], Handles are a special way of intelligently allowing plugins and SourceMod to manage their own memory.&lt;br /&gt;
&lt;br /&gt;
For more information on using Handles in the SourceMod API, see [[Handle API (SourceMod)]].&lt;br /&gt;
&lt;br /&gt;
=Opening Handles=&lt;br /&gt;
Opening a Handle is usually done implicitly by a native function.  For example, OpenDirectory opens a new Handle which is used in other Directory natives.  This associates a ''type'' with the Handle.  Trying to use a Directory Handle with any other non-Directory native will cause an error (HandleError_Type), because Handles are type checked.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;Handle hndl = OpenDirectory(&amp;quot;addons/sourcemod/configs&amp;quot;);&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Closing Handles=&lt;br /&gt;
==Basic operation==&lt;br /&gt;
Closing a Handle means seeing if the internal object can be removed from memory.  For example, if a plugin creates an SQL connection, closing the Handle means closing and destroying the connection. This is almost always done using the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator and specifying the handle to close, e.g. &amp;lt;tt&amp;gt;delete hDir;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==When to close==&lt;br /&gt;
When a plugin unloads, all of its Handles are automatically destroyed.  This does not mean, however, that closing Handles is optional.  Consider the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;bool IsFileInFolder(const char[] path, const char[] file)&lt;br /&gt;
{&lt;br /&gt;
  char path[PLATFORM_MAX_PATH];&lt;br /&gt;
  FileType type;&lt;br /&gt;
&lt;br /&gt;
  DirectoryListing dir = OpenDirectory(path);&lt;br /&gt;
  if (dir == null)&lt;br /&gt;
  {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while (dir.GetNext(path, sizeof(path), type))&lt;br /&gt;
  {&lt;br /&gt;
    if (type == FileType_File &amp;amp;&amp;amp; StrEqual(path, file))&lt;br /&gt;
    {&lt;br /&gt;
      delete dir;&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delete dir;&lt;br /&gt;
&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function searches a directory for a single file.  If this function were to not close the handle with the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator, it would [[Memory Leak|leak memory]] every time it was called, and eventually the script would fill up with a large number of lingering Handles that were left open.&lt;br /&gt;
&lt;br /&gt;
So, when do you close Handles?  There are generally two rules of thumb to go by:&lt;br /&gt;
*If the native uses terminology such as &amp;quot;Opens a [...]&amp;quot; or &amp;quot;Creates a [...]&amp;quot; or gives explicit directions for closing.&lt;br /&gt;
*If the Handle represents a temporary object or piece of information, and you will no longer be using it.&lt;br /&gt;
&lt;br /&gt;
Most of the time, you will be closing Handles.  Check the Handle Type documentation at the end of this page.&lt;br /&gt;
&lt;br /&gt;
==When you can't close==&lt;br /&gt;
There are a few Handle types that cannot be closed.  The major one is the Handle which identifies a plugin.  Plugins cannot unload themselves, and thus destroying their own Handles is not allowed.&lt;br /&gt;
&lt;br /&gt;
Furthermore, a script cannot close a Handle that is owned by another plugin.  This is for protection against API mistakes and accidental errors.  For example, if a Handle is shared between two plugins, one accidental free could invalidate a Handle unexpectedly.  To allow the sharing of Handles, see [[#Cloning Handles|Cloning Handles]].&lt;br /&gt;
&lt;br /&gt;
==Reference counters==&lt;br /&gt;
Closing Handles does not always destroy the internal data.  This is the case when Handles are [[#Cloning Handles|cloned]].  Each clone adds a ''reference count'' to the Handle, and closing each clone removes one reference count.  The original object is only actually destroyed once the Handle has no more reference counters.  &lt;br /&gt;
&lt;br /&gt;
=Cloning Handles=&lt;br /&gt;
As briefly described earlier, there is a problem when scripts try to share Handles.  Imagine this scenario:&lt;br /&gt;
*Plugin 'A' creates a Handle.&lt;br /&gt;
*Plugin 'B' received the Handle.&lt;br /&gt;
*Plugin 'A' is unloaded, and the Handle is destroyed.&lt;br /&gt;
*Plugin 'B' tries to use the Handle.&lt;br /&gt;
&lt;br /&gt;
To prevent this, the CloneHandle native is provided.  This function returns a ''new'' Handle that is a &amp;quot;copy&amp;quot; of the original.  While their values won't be equal, they contain the same internal data.  The data itself will not be destroyed until each copy and the original are closed with the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator.  It does not matter what order they are freed in, however, each Handle can only be freed once.&lt;br /&gt;
&lt;br /&gt;
There are two ways of cloning.  A plugin can either clone a Handle itself, and become the owner, or it can explicitly set a new owner.  The difference is one of API design.  Example of the former:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;Database g_hSQL;&lt;br /&gt;
/**&lt;br /&gt;
 * The other plugin calling this function must pass his ID in,&lt;br /&gt;
 * but doesn't have to call CloneHandle()&lt;br /&gt;
 */&lt;br /&gt;
public Database GetGlobalSQL(Handle otherPlugin)&lt;br /&gt;
{&lt;br /&gt;
   return view_as&amp;lt;Database&amp;gt;(CloneHandle(g_hSQL, otherPlugin));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This code would appear in the other plugin&lt;br /&gt;
 */&lt;br /&gt;
Database sql = GetGlobalSQL(myself);&lt;br /&gt;
/* ... */&lt;br /&gt;
delete sql;&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of the latter:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;Database g_hSQL;&lt;br /&gt;
/**&lt;br /&gt;
 * The calling plugin must call CloneHandle() himself.&lt;br /&gt;
 */&lt;br /&gt;
public Database GetGlobalSQL()&lt;br /&gt;
{&lt;br /&gt;
   return g_hSQL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This code would appear in the other plugin&lt;br /&gt;
 */&lt;br /&gt;
Database sql = GetGlobalSQL();&lt;br /&gt;
if (sql != null)&lt;br /&gt;
{&lt;br /&gt;
   sql = view_as&amp;lt;Database&amp;gt;(CloneHandle(sql));&lt;br /&gt;
}&lt;br /&gt;
delete sql;&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Handle Types=&lt;br /&gt;
The following is a list of some common Handle types provided by SourceMod and some documentation on each.&lt;br /&gt;
&lt;br /&gt;
==BitBuffers==&lt;br /&gt;
{{HandleType|bf_read or bf_write|Only if explicitly stated|Only if it can also be closed|Core|bitbuffer.inc}}&lt;br /&gt;
&lt;br /&gt;
There are four types of BitBuffer Handles.  They are separated into ''bf_write'' (writable buffer) and ''bf_read'' (readable buffer).  These are directly abstracted from their Half-Life 2 counterpart.  Internally, there are separate Handle types for each; certain functions will use BitBuffer handles that cannot be freed.&lt;br /&gt;
&lt;br /&gt;
==ConVars==&lt;br /&gt;
{{HandleType|ConVar|No|No|Core|convars.inc}}&lt;br /&gt;
&lt;br /&gt;
ConVar Handles are primarily used for getting and setting a console variable's value. They cannot be cloned nor deleted since they exist until SourceMod is shut down.&lt;br /&gt;
&lt;br /&gt;
==DataPacks==&lt;br /&gt;
{{HandleType|DataPack|Yes|Yes|Core|datapack.inc}}&lt;br /&gt;
&lt;br /&gt;
DataPack Handles are used to pack data into a sequential stream, for unpacking later.  They are unidirectional, meaning that reading and writing affects the same position in the stream.&lt;br /&gt;
&lt;br /&gt;
The DataPack type is exposed for Extensions to use.&lt;br /&gt;
&lt;br /&gt;
==Directories==&lt;br /&gt;
{{HandleType|Directory|Yes|Yes|Core|files.inc}}&lt;br /&gt;
&lt;br /&gt;
Directory Handles are used for opening and enumerating the contents of a directory (folder) on the filesystem.&lt;br /&gt;
&lt;br /&gt;
==Database Drivers==&lt;br /&gt;
{{HandleType|DBDriver|Yes|No|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
DBDriver Handles contain information about a database driver.  They are static and cannot be closed.&lt;br /&gt;
&lt;br /&gt;
==Database Queries==&lt;br /&gt;
{{HandleType|IQuery|Yes|No|Core|dbi.inc}}&lt;br /&gt;
{{HandleType|IPreparedQuery|Yes|No|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
Database Queries wrap an &amp;lt;tt&amp;gt;IQuery&amp;lt;/tt&amp;gt; pointer for database queries.  Closing a query frees its resources, including any prepared statement information and any result sets.&lt;br /&gt;
&lt;br /&gt;
==Databases==&lt;br /&gt;
{{HandleType|IDatabase|Yes|Yes|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
Database Handles wrap an &amp;lt;tt&amp;gt;IDatabase&amp;lt;/tt&amp;gt; pointer for database connections.  Closing these disconnects the database and frees any related resources.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
{{HandleType|Event|No|No|Core|events.inc}}&lt;br /&gt;
&lt;br /&gt;
Event Handles are used for getting and setting data in Half-Life 2 game events as well as for firing them. They can only be closed using CancelCreatedEvent() if the event was not fired for some reason.&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
{{HandleType|File|Yes|Yes|Core|files.inc}}&lt;br /&gt;
&lt;br /&gt;
File Handles are used for opening, reading from, writing to, and creating to files on the file system.&lt;br /&gt;
&lt;br /&gt;
==Forwards==&lt;br /&gt;
{{HandleType|Forward|Yes|Only if explicitly stated|Core|functions.inc}}&lt;br /&gt;
&lt;br /&gt;
Forward Handles are primarily used when calling functions inside a forward container. There are two types of forwards: global and private. Only private forwards can be cloned.&lt;br /&gt;
&lt;br /&gt;
==KeyValues==&lt;br /&gt;
{{HandleType|KeyValues|Yes|No|Core|keyvalues.inc}}&lt;br /&gt;
&lt;br /&gt;
KeyValues Handles abstract the Valve data type &amp;lt;tt&amp;gt;KeyValues&amp;lt;/tt&amp;gt;, which are tree-based, recursive key to value mapping structures, often used to enumerate properties or configuration file directives.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
{{HandleType|Plugin|No|No|Core|sourcemod.inc}}&lt;br /&gt;
&lt;br /&gt;
Plugin Handles are used for the unique identification of a Plugin.  They are owned by Core and cannot be cloned or closed by any other plugin or extension.  However, plugins can use Handles for certain natives which enumerate or retrieve information on plugins.  &lt;br /&gt;
&lt;br /&gt;
Plugin Handles should not be cached globally, as plugins can become unloaded, and the Handle will be invalid.&lt;br /&gt;
&lt;br /&gt;
==Plugin Iterators==&lt;br /&gt;
{{HandleType|PluginIter|Yes|No|Core|sourcemod.inc}}&lt;br /&gt;
&lt;br /&gt;
Plugin Iterators allow you to walk over a list of plugins.  They are intended for temporary use only.&lt;br /&gt;
&lt;br /&gt;
==Protobuf==&lt;br /&gt;
{{HandleType|protobuf|No|No|Core|protobuf.inc}}&lt;br /&gt;
&lt;br /&gt;
Protobuf Handles are currently used for usermessages in supported games. They directly reference protobuf Messages, which can be a usermessage or a Message field inside of a usermessage. They are owned and managed by Core and cannot be cloned or closed by a plugin.&lt;br /&gt;
&lt;br /&gt;
==SMC Parsers==&lt;br /&gt;
{{HandleType|SMC Parser|Yes|No|Core|textparse.inc}}&lt;br /&gt;
&lt;br /&gt;
SMC Parsers are Handles which contain a set of functions for hooking parse events in an SMC file.  Since they directly reference functions in a plugin, they cannot be cloned.&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
{{HandleType|Timer|Yes|No|Core|timers.inc}}&lt;br /&gt;
&lt;br /&gt;
Timers are temporary Handles which are automatically closed on any of the following events:&lt;br /&gt;
*The timer ends (via Plugin_Stop or being a one-time timer that is finished)&lt;br /&gt;
*The timer is killed via &amp;lt;tt&amp;gt;KillTimer&amp;lt;/tt&amp;gt;&lt;br /&gt;
*The timer is closed via &amp;lt;tt&amp;gt;delete hHandle;&amp;lt;/tt&amp;gt;&lt;br /&gt;
*The timer's parent plugin unloads&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Handles_(SourceMod_Scripting)&amp;diff=11047</id>
		<title>Handles (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Handles_(SourceMod_Scripting)&amp;diff=11047"/>
		<updated>2020-08-15T08:35:18Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* When to close */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Handles are a special data type used in [[:Category:SourceMod Scripting|SourceMod Scripting]].  They represent a single internal and unique object.  For example, there are &amp;quot;File&amp;quot; Handles for files, and &amp;quot;Menu&amp;quot; Handles for menus, but they are both encapsulated under the &amp;quot;Handle&amp;quot; [[Tags (SourceMod Scripting)|tag]].&lt;br /&gt;
&lt;br /&gt;
Handles are more than &amp;quot;pointers&amp;quot; from C or C++ because they have a ''reference count''.  This means that the number of copies floating around in memory is tracked.  The actual internal object is not destroyed until each copy is also destroyed.&lt;br /&gt;
&lt;br /&gt;
Since SourcePawn does not have [[Garbage Collection]], Handles are a special way of intelligently allowing plugins and SourceMod to manage their own memory.&lt;br /&gt;
&lt;br /&gt;
For more information on using Handles in the SourceMod API, see [[Handle API (SourceMod)]].&lt;br /&gt;
&lt;br /&gt;
=Opening Handles=&lt;br /&gt;
Opening a Handle is usually done implicitly by a native function.  For example, OpenDirectory opens a new Handle which is used in other Directory natives.  This associates a ''type'' with the Handle.  Trying to use a Directory Handle with any other non-Directory native will cause an error (HandleError_Type), because Handles are type checked.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;Handle hndl = OpenDirectory(&amp;quot;addons/sourcemod/configs&amp;quot;);&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Closing Handles=&lt;br /&gt;
==Basic operation==&lt;br /&gt;
Closing a Handle means seeing if the internal object can be removed from memory.  For example, if a plugin creates an SQL connection, closing the Handle means closing and destroying the connection. This is almost always done using the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator and specifying the handle to close, e.g. &amp;lt;tt&amp;gt;delete hDir;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==When to close==&lt;br /&gt;
When a plugin unloads, all of its Handles are automatically destroyed.  This does not mean, however, that closing Handles is optional.  Consider the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;bool IsFileInFolder(const char[] path, const char[] file)&lt;br /&gt;
{&lt;br /&gt;
  char path[PLATFORM_MAX_PATH];&lt;br /&gt;
  FileType type;&lt;br /&gt;
&lt;br /&gt;
  DirectoryListing dir = OpenDirectory(path);&lt;br /&gt;
  if (dir == null)&lt;br /&gt;
  {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while (dir.GetNext(path, sizeof(path), type))&lt;br /&gt;
  {&lt;br /&gt;
    if (type == FileType_File &amp;amp;&amp;amp; StrEqual(path, file))&lt;br /&gt;
    {&lt;br /&gt;
      delete dir;&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delete dir;&lt;br /&gt;
&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function searches a directory for a single file.  If this function were to not close the handle with the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator, it would [[Memory Leak|leak memory]] every time it was called, and eventually the script would fill up with a large number of lingering Handles that were left open.&lt;br /&gt;
&lt;br /&gt;
So, when do you close Handles?  There are generally two rules of thumb to go by:&lt;br /&gt;
*If the native uses terminology such as &amp;quot;Opens a [...]&amp;quot; or &amp;quot;Creates a [...]&amp;quot; or gives explicit directions for closing.&lt;br /&gt;
*If the Handle represents a temporary object or piece of information, and you will no longer be using it.&lt;br /&gt;
&lt;br /&gt;
Most of the time, you will be closing Handles.  Check the Handle Type documentation at the end of this page.&lt;br /&gt;
&lt;br /&gt;
==When you can't close==&lt;br /&gt;
There are a few Handle types that cannot be closed.  The major one is the Handle which identifies a plugin.  Plugins cannot unload themselves, and thus destroying their own Handles is not allowed.&lt;br /&gt;
&lt;br /&gt;
Furthermore, a script cannot close a Handle that is owned by another plugin.  This is for protection against API mistakes and accidental errors.  For example, if a Handle is shared between two plugins, one accidental free could invalidate a Handle unexpectedly.  To allow the sharing of Handles, see [[#Cloning Handles|Cloning Handles]].&lt;br /&gt;
&lt;br /&gt;
==Reference counters==&lt;br /&gt;
Closing Handles does not always destroy the internal data.  This is the case when Handles are [[#Cloning Handles|cloned]].  Each clone adds a ''reference count'' to the Handle, and closing each clone removes one reference count.  The original object is only actually destroyed once the Handle has no more reference counters.  &lt;br /&gt;
&lt;br /&gt;
=Cloning Handles=&lt;br /&gt;
As briefly described earlier, there is a problem when scripts try to share Handles.  Imagine this scenario:&lt;br /&gt;
*Plugin 'A' creates a Handle.&lt;br /&gt;
*Plugin 'B' received the Handle.&lt;br /&gt;
*Plugin 'A' is unloaded, and the Handle is destroyed.&lt;br /&gt;
*Plugin 'B' tries to use the Handle.&lt;br /&gt;
&lt;br /&gt;
To prevent this, the CloneHandle native is provided.  This function returns a ''new'' Handle that is a &amp;quot;copy&amp;quot; of the original.  While their values won't be equal, they contain the same internal data.  The data itself will not be destroyed until each copy and the original are closed with the &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; operator.  It does not matter what order they are freed in, however, each Handle can only be freed once.&lt;br /&gt;
&lt;br /&gt;
There are two ways of cloning.  A plugin can either clone a Handle itself, and become the owner, or it can explicitly set a new owner.  The difference is one of API design.  Example of the former:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;DataBase g_hSQL;&lt;br /&gt;
/**&lt;br /&gt;
 * The other plugin calling this function must pass his ID in,&lt;br /&gt;
 * but doesn't have to call CloneHandle()&lt;br /&gt;
 */&lt;br /&gt;
public Database GetGlobalSQL(Handle otherPlugin)&lt;br /&gt;
{&lt;br /&gt;
   return view_as&amp;lt;DataBase&amp;gt;(CloneHandle(g_hSQL, otherPlugin));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This code would appear in the other plugin&lt;br /&gt;
 */&lt;br /&gt;
DataBase sql = GetGlobalSQL(myself);&lt;br /&gt;
/* ... */&lt;br /&gt;
delete sql;&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of the latter:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;DataBase g_hSQL;&lt;br /&gt;
/**&lt;br /&gt;
 * The calling plugin must call CloneHandle() himself.&lt;br /&gt;
 */&lt;br /&gt;
public DataBase GetGlobalSQL()&lt;br /&gt;
{&lt;br /&gt;
   return g_hSQL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This code would appear in the other plugin&lt;br /&gt;
 */&lt;br /&gt;
DataBase sql = GetGlobalSQL();&lt;br /&gt;
if (sql != INVALID_HANDLE)&lt;br /&gt;
{&lt;br /&gt;
   sql = view_as&amp;lt;DataBase&amp;gt;(CloneHandle(sql));&lt;br /&gt;
}&lt;br /&gt;
delete sql;&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Handle Types=&lt;br /&gt;
The following is a list of some common Handle types provided by SourceMod and some documentation on each.&lt;br /&gt;
&lt;br /&gt;
==BitBuffers==&lt;br /&gt;
{{HandleType|bf_read or bf_write|Only if explicitly stated|Only if it can also be closed|Core|bitbuffer.inc}}&lt;br /&gt;
&lt;br /&gt;
There are four types of BitBuffer Handles.  They are separated into ''bf_write'' (writable buffer) and ''bf_read'' (readable buffer).  These are directly abstracted from their Half-Life 2 counterpart.  Internally, there are separate Handle types for each; certain functions will use BitBuffer handles that cannot be freed.&lt;br /&gt;
&lt;br /&gt;
==ConVars==&lt;br /&gt;
{{HandleType|ConVar|No|No|Core|convars.inc}}&lt;br /&gt;
&lt;br /&gt;
ConVar Handles are primarily used for getting and setting a console variable's value. They cannot be cloned nor deleted since they exist until SourceMod is shut down.&lt;br /&gt;
&lt;br /&gt;
==DataPacks==&lt;br /&gt;
{{HandleType|DataPack|Yes|Yes|Core|datapack.inc}}&lt;br /&gt;
&lt;br /&gt;
DataPack Handles are used to pack data into a sequential stream, for unpacking later.  They are unidirectional, meaning that reading and writing affects the same position in the stream.&lt;br /&gt;
&lt;br /&gt;
The DataPack type is exposed for Extensions to use.&lt;br /&gt;
&lt;br /&gt;
==Directories==&lt;br /&gt;
{{HandleType|Directory|Yes|Yes|Core|files.inc}}&lt;br /&gt;
&lt;br /&gt;
Directory Handles are used for opening and enumerating the contents of a directory (folder) on the filesystem.&lt;br /&gt;
&lt;br /&gt;
==Database Drivers==&lt;br /&gt;
{{HandleType|DBDriver|Yes|No|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
DBDriver Handles contain information about a database driver.  They are static and cannot be closed.&lt;br /&gt;
&lt;br /&gt;
==Database Queries==&lt;br /&gt;
{{HandleType|IQuery|Yes|No|Core|dbi.inc}}&lt;br /&gt;
{{HandleType|IPreparedQuery|Yes|No|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
Database Queries wrap an &amp;lt;tt&amp;gt;IQuery&amp;lt;/tt&amp;gt; pointer for database queries.  Closing a query frees its resources, including any prepared statement information and any result sets.&lt;br /&gt;
&lt;br /&gt;
==Databases==&lt;br /&gt;
{{HandleType|IDatabase|Yes|Yes|Core|dbi.inc}}&lt;br /&gt;
&lt;br /&gt;
Database Handles wrap an &amp;lt;tt&amp;gt;IDatabase&amp;lt;/tt&amp;gt; pointer for database connections.  Closing these disconnects the database and frees any related resources.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
{{HandleType|Event|No|No|Core|events.inc}}&lt;br /&gt;
&lt;br /&gt;
Event Handles are used for getting and setting data in Half-Life 2 game events as well as for firing them. They can only be closed using CancelCreatedEvent() if the event was not fired for some reason.&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
{{HandleType|File|Yes|Yes|Core|files.inc}}&lt;br /&gt;
&lt;br /&gt;
File Handles are used for opening, reading from, writing to, and creating to files on the file system.&lt;br /&gt;
&lt;br /&gt;
==Forwards==&lt;br /&gt;
{{HandleType|Forward|Yes|Only if explicitly stated|Core|functions.inc}}&lt;br /&gt;
&lt;br /&gt;
Forward Handles are primarily used when calling functions inside a forward container. There are two types of forwards: global and private. Only private forwards can be cloned.&lt;br /&gt;
&lt;br /&gt;
==KeyValues==&lt;br /&gt;
{{HandleType|KeyValues|Yes|No|Core|keyvalues.inc}}&lt;br /&gt;
&lt;br /&gt;
KeyValues Handles abstract the Valve data type &amp;lt;tt&amp;gt;KeyValues&amp;lt;/tt&amp;gt;, which are tree-based, recursive key to value mapping structures, often used to enumerate properties or configuration file directives.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
{{HandleType|Plugin|No|No|Core|sourcemod.inc}}&lt;br /&gt;
&lt;br /&gt;
Plugin Handles are used for the unique identification of a Plugin.  They are owned by Core and cannot be cloned or closed by any other plugin or extension.  However, plugins can use Handles for certain natives which enumerate or retrieve information on plugins.  &lt;br /&gt;
&lt;br /&gt;
Plugin Handles should not be cached globally, as plugins can become unloaded, and the Handle will be invalid.&lt;br /&gt;
&lt;br /&gt;
==Plugin Iterators==&lt;br /&gt;
{{HandleType|PluginIter|Yes|No|Core|sourcemod.inc}}&lt;br /&gt;
&lt;br /&gt;
Plugin Iterators allow you to walk over a list of plugins.  They are intended for temporary use only.&lt;br /&gt;
&lt;br /&gt;
==Protobuf==&lt;br /&gt;
{{HandleType|protobuf|No|No|Core|protobuf.inc}}&lt;br /&gt;
&lt;br /&gt;
Protobuf Handles are currently used for usermessages in supported games. They directly reference protobuf Messages, which can be a usermessage or a Message field inside of a usermessage. They are owned and managed by Core and cannot be cloned or closed by a plugin.&lt;br /&gt;
&lt;br /&gt;
==SMC Parsers==&lt;br /&gt;
{{HandleType|SMC Parser|Yes|No|Core|textparse.inc}}&lt;br /&gt;
&lt;br /&gt;
SMC Parsers are Handles which contain a set of functions for hooking parse events in an SMC file.  Since they directly reference functions in a plugin, they cannot be cloned.&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
{{HandleType|Timer|Yes|No|Core|timers.inc}}&lt;br /&gt;
&lt;br /&gt;
Timers are temporary Handles which are automatically closed on any of the following events:&lt;br /&gt;
*The timer ends (via Plugin_Stop or being a one-time timer that is finished)&lt;br /&gt;
*The timer is killed via &amp;lt;tt&amp;gt;KillTimer&amp;lt;/tt&amp;gt;&lt;br /&gt;
*The timer is closed via &amp;lt;tt&amp;gt;delete hHandle;&amp;lt;/tt&amp;gt;&lt;br /&gt;
*The timer's parent plugin unloads&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Natives_(SourceMod_Development)&amp;diff=11028</id>
		<title>Natives (SourceMod Development)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Natives_(SourceMod_Development)&amp;diff=11028"/>
		<updated>2020-07-30T16:58:23Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* When to use By Ref */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Natives are functions which are available to plugins via Core itself, or a C++ extension.  They are called &amp;quot;natives&amp;quot; because they must be translated via a ''native interface''.  This article explains the various parameter passing conventions in SourcePawn, as well as how to use them in your own natives.&lt;br /&gt;
&lt;br /&gt;
To understand the contents of this article, you will need to read [[Writing_Extensions#Creating_Native_Functions|Creating Natives]], the Native section in the introductory article on creating extensions.&lt;br /&gt;
&lt;br /&gt;
In this article, &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt; refers to the C/C++ data type, and &amp;lt;tt&amp;gt;Float&amp;lt;/tt&amp;gt; (note capital 'F') refers to the SourcePawn [[Tags (Scripting)|tag]].&lt;br /&gt;
&lt;br /&gt;
=By Value versus By Reference=&lt;br /&gt;
There are two ways to pass integers/Floats to native implementations.  They are ''by value'' (ByVal) and ''by reference'' (ByRef).  ByVal means that a copy of the value is passed to the native.  This is the default behaviour.  ByRef means a ''reference'' is passed to the native, and this reference points to the value.  Both will be explained below.&lt;br /&gt;
&lt;br /&gt;
Note that arrays and strings, as will be explained later, are always passed by reference.  This is because they are usually larger structures, and passing them ByVal would require copying their data, wasting CPU cycles.&lt;br /&gt;
&lt;br /&gt;
==By Value==&lt;br /&gt;
Passing by value is the default behaviour for primitive data types (integers, Floats, or any tag that's cell-based).  Data is treated normally as raw, copied input.  Observe the following native:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the number decremented by one.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num		Number to decrement.&lt;br /&gt;
 * @return		Decremented number.&lt;br /&gt;
 */&lt;br /&gt;
native Decrement(num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How would we use this native?  Since &amp;lt;tt&amp;gt;num&amp;lt;/tt&amp;gt; is passed as a value, it cannot change in the native code.  This means we have to use the return value as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;//Decrements a number 5 times&lt;br /&gt;
Example(num)&lt;br /&gt;
{&lt;br /&gt;
	num = Decrement(num);&lt;br /&gt;
	num = Decrement(num);&lt;br /&gt;
	num = Decrement(num);&lt;br /&gt;
	num = Decrement(num);&lt;br /&gt;
	num = Decrement(num);&lt;br /&gt;
	return num;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==By Reference==&lt;br /&gt;
Let's reuse the above example to use reference passing.  Observe the new native below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Subtracts one from the given number, by reference.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num		Number to subtract, by reference.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native Decrement(&amp;amp;num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the ampersand ('&amp;amp;') before the parameter name -- this specifies that it is passed by reference.  Now, let's see how this would look in our script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;Example(num)&lt;br /&gt;
{&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	return num;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &amp;lt;tt&amp;gt;Decrement&amp;lt;/tt&amp;gt; is acting on the &amp;lt;tt&amp;gt;num&amp;lt;/tt&amp;gt; variable ''itself'', not a copy of it.  Thus, num will decrease 5 times.  In fact, scripts can even do this internally.  We can shorten the example even more:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;Example(&amp;amp;num)&lt;br /&gt;
{&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
	Decrement(num);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==When to use By Ref==&lt;br /&gt;
There is a misconception that passing by reference is always better than by value.  After all, copying data sounds excessive.  However, by value in SourcePawn only works on 32bit values, and thus copying the value is inherent to the processor, and trivial.&lt;br /&gt;
&lt;br /&gt;
On the other hand, passing by reference is slightly more expensive.  First, the compiler has to generate a little extra code to compute the local address of the variable.  Second, the native code itself has to translate the local address to a ''real virtual address'' (native memory).&lt;br /&gt;
&lt;br /&gt;
It is a good idea to only use by reference when you need it.  A common usage is when you need to return more than one piece of data, and you can't fit it into the return value of your native or function.  In this case, by reference is ideal.&lt;br /&gt;
&lt;br /&gt;
=Integers/Floats=&lt;br /&gt;
&lt;br /&gt;
==By Value==&lt;br /&gt;
Natives based purely on by-value floating point or integer input are generally the easiest to make.  Let's take a simple function which takes in a Float and an integer, and returns a Float:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Raises a number to an integer power.&lt;br /&gt;
 *&lt;br /&gt;
 * @param fNum		Base number (Float).&lt;br /&gt;
 * @param exp		Exponent (integer).&lt;br /&gt;
 * @return		Computed exponent result as a Float.&lt;br /&gt;
 */&lt;br /&gt;
native Float:FloatIntPower(Float:fNum, exp);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this native might look like:&lt;br /&gt;
&amp;lt;cpp&amp;gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static cell_t sm_FloatIntPower(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	float f1 = sp_ctof(params[1]);&lt;br /&gt;
	int num = params[2];&lt;br /&gt;
	&lt;br /&gt;
	float result = (float)pow(f1, (double)f2);&lt;br /&gt;
	return sp_ftoc(result);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Integers, as we saw in the introduction, are accessed from the parameter stack normally.  Floats, however, must be ''reinterpret casted'' from a &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;.  Two inline functions are provided for this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sp_ctof&amp;lt;/tt&amp;gt;: Convert a &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt; to a &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;sp_ftoc&amp;lt;/tt&amp;gt;: Convert a &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt; to a &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==By Reference==&lt;br /&gt;
By reference is a little more tricky.  Let's first implement our &amp;lt;tt&amp;gt;Decrement&amp;lt;/tt&amp;gt; native from earlier.  A refresher:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native Decrement(&amp;amp;num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we try to use our above code, &amp;lt;tt&amp;gt;params[1]&amp;lt;/tt&amp;gt; will no longer hold a value.  Instead, it holds a ''local address'' in the plugin.  We must use the &amp;lt;tt&amp;gt;LocalToPhysAddr&amp;lt;/tt&amp;gt; function to translate this.  It takes in a local address and returns back a physical pointer, which we can then modify.  This will modify the value in the script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_Decrement(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t *addr;&lt;br /&gt;
&lt;br /&gt;
	/* Translate the address. */&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[1], &amp;amp;addr);&lt;br /&gt;
&lt;br /&gt;
	/* Decrement the number */&lt;br /&gt;
	*addr -= 1;&lt;br /&gt;
&lt;br /&gt;
	/* We have to return something, even if the plugin doesn't use the value */&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
''Note: LocalToPhysAddr can return an error code.  For all practical purposes, this will never error, unless there is some memory or corruption issue, so checking it isn't necessary.''&lt;br /&gt;
&lt;br /&gt;
This works the same way for floats.  Let's say we change our native to this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Decrements a Float by an integer, and stores the result by reference.&lt;br /&gt;
 *&lt;br /&gt;
 * @param fNum		Float number to decrement (by ref).&lt;br /&gt;
 * @param decamt	Amount to decrement by.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native Decrement(&amp;amp;Float:fNum, decamt);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example is fairly contrived -- our native simply performs a subtract operation.  But let's look at the implementation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_Decrement(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t *addr;&lt;br /&gt;
&lt;br /&gt;
	/* Translate the address. */&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[1], &amp;amp;addr);&lt;br /&gt;
&lt;br /&gt;
	/* Get the value */&lt;br /&gt;
	float val = sp_ctof(*addr);&lt;br /&gt;
	/* Decrement */&lt;br /&gt;
	val -= params[2];&lt;br /&gt;
	/* Store back */&lt;br /&gt;
	*addr = sp_ftoc(val);&lt;br /&gt;
&lt;br /&gt;
	/* We have to return something, even if the plugin doesn't use the value */&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that even though the first parameter was passed by reference, the second was not, and is accessed normally.&lt;br /&gt;
&lt;br /&gt;
=Arrays=&lt;br /&gt;
&lt;br /&gt;
==Basic Arrays==&lt;br /&gt;
Arrays are always passed by reference.  The first example is an array which contains a list of numbers to sum.  Observe the native:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Averages an array of numbers.&lt;br /&gt;
 *&lt;br /&gt;
 * @param array		Array of numbers to average.&lt;br /&gt;
 * @param num		Number of slots in the array.&lt;br /&gt;
 * @return		Average number as a Float.&lt;br /&gt;
 */&lt;br /&gt;
native Float:Average(array[], num);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;Example()&lt;br /&gt;
{&lt;br /&gt;
	new numbers[5] = {5, 6, 1, 3, 8};&lt;br /&gt;
	return Average(numbers, 5);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implementation, like the by ref examples above, requires &amp;lt;tt&amp;gt;LocalToPhysAddr&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_Average(IPluginContext *pContext, cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t *array;&lt;br /&gt;
	float sum = 0.0f, average;&lt;br /&gt;
&lt;br /&gt;
	if (params[2] &amp;lt; 1)&lt;br /&gt;
	{&lt;br /&gt;
		/* 0 works without sp_ftoc() */&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[1], &amp;amp;array);&lt;br /&gt;
	for (cell_t i=0; i&amp;lt;params[2]; i++)&lt;br /&gt;
	{&lt;br /&gt;
		sum += array[i];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	average = sum / params[2];&lt;br /&gt;
&lt;br /&gt;
	return sp_ftoc(average);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Float Arrays==&lt;br /&gt;
This works similarly for Float arrays.  Let's take Vectors an example, with the following native:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Adds two vectors together.&lt;br /&gt;
 *&lt;br /&gt;
 * @param r	Array to store the result in.&lt;br /&gt;
 * @param v1	First vector to add.&lt;br /&gt;
 * @param v2	Second vector to add.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native AddVectors(Float:r[3], const Float:v1[3], const Float:v2[3]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implementation is straightforward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_AddVectors(IPluginContext *pContext, cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	cell_t *v1, *v2;&lt;br /&gt;
	float result[3];&lt;br /&gt;
	&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[2], &amp;amp;v1);&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[3], &amp;amp;v2);&lt;br /&gt;
&lt;br /&gt;
	result[0] = sp_ctof(v1[0]) + sp_ctof(v2[0]);&lt;br /&gt;
	result[1] = sp_ctof(v1[1]) + sp_ctof(v2[1]);&lt;br /&gt;
	result[2] = sp_ctof(v1[2]) + sp_ctof(v2[2]);&lt;br /&gt;
&lt;br /&gt;
	cell_t *r;&lt;br /&gt;
	pContext-&amp;gt;LocalToPhysAddr(params[1], &amp;amp;r);&lt;br /&gt;
	r[0] = sp_ftoc(result[0]);&lt;br /&gt;
	r[1] = sp_ftoc(result[1]);&lt;br /&gt;
	r[2] = sp_ftoc(result[2]);&lt;br /&gt;
	&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we only store the result after we have computed the input, rather than store directly.  This is a bit more work, but is good practice in case users re-use data inputs, and risk overwriting inputs as they are written.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Float:origin[3];&lt;br /&gt;
AddVectors(origin, origin, origin);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Strings=&lt;br /&gt;
Strings are just like arrays, in that they are passed by reference.  The only difference is that each character is stored in a byte, not a 32bit &amp;lt;tt&amp;gt;cell_t&amp;lt;/tt&amp;gt;.  However, to make coding a bit easier for you, the coder, there are separate functions.&lt;br /&gt;
*&amp;lt;tt&amp;gt;LocalToString&amp;lt;/tt&amp;gt;: Converts a local address to a physical string address.&lt;br /&gt;
*&amp;lt;tt&amp;gt;StringToLocal&amp;lt;/tt&amp;gt;: Copies a physical string into a local address buffer.&lt;br /&gt;
*&amp;lt;tt&amp;gt;StringToLocalUTF8&amp;lt;/tt&amp;gt;: Same as &amp;lt;tt&amp;gt;StringToLocal&amp;lt;/tt&amp;gt;, but only copies the maximum amount possible without cutting off any multi byte characters.&lt;br /&gt;
&lt;br /&gt;
First, let's take an easy example: the infamous strlen.&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Returns the length of a string.&lt;br /&gt;
 * &lt;br /&gt;
 * @param string	String to calculate.&lt;br /&gt;
 * @return		Number of bytes in the string.&lt;br /&gt;
 */&lt;br /&gt;
native strlen(const String:string[]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_StrLen(IPluginContext *pContext, cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	char *str;&lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[1], &amp;amp;str);&lt;br /&gt;
	return strlen(str);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, let's say we want to modify the string.  There is an important note here: since the string is passed by reference, when you modify the string, it is also modified in the plugin.  This is a huge difference from AMX Mod X, where strings were essentially by value in most cases, and you had to copy results back.&lt;br /&gt;
&lt;br /&gt;
Thus, if we wanted to copy a new result into &amp;lt;tt&amp;gt;str&amp;lt;/tt&amp;gt; in the above implementation, it would be very easy.  If we were implementing &amp;lt;tt&amp;gt;strcpy()&amp;lt;/tt&amp;gt;, we would have to use &amp;lt;tt&amp;gt;memmove()&amp;lt;/tt&amp;gt; to make sure there are no overlaps.  Let's do this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Copies one string onto another.&lt;br /&gt;
 *&lt;br /&gt;
 * @param dest		Destination buffer to copy to.&lt;br /&gt;
 * @param length	Maximum length of the buffer.&lt;br /&gt;
 * @param source	Source to copy from.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native StringCopy(String:dest[], length, const String:source);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation using &amp;lt;tt&amp;gt;memmove&amp;lt;/tt&amp;gt; for safety:&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_StringCopy(IPluginContext *pContext, cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	char *dest, *src;&lt;br /&gt;
	size_t len;&lt;br /&gt;
&lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[1], &amp;amp;dest);&lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[3], &amp;amp;src);&lt;br /&gt;
	&lt;br /&gt;
	/* Perform bounds checking */&lt;br /&gt;
	len = strlen(src);&lt;br /&gt;
	if (len &amp;gt;= params[2])&lt;br /&gt;
	{&lt;br /&gt;
		len = params[2] - 1;&lt;br /&gt;
	} else {&lt;br /&gt;
		len = params[2];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Copy */&lt;br /&gt;
	memmove(dest, src, len);&lt;br /&gt;
&lt;br /&gt;
	dest[len] = '\0';&lt;br /&gt;
&lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can also use &amp;lt;tt&amp;gt;StringToLocal&amp;lt;/tt&amp;gt;, which would requires a temporary buffer for the original string:&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t sm_StringCopy(IPluginContext *pContext, cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	char *src;&lt;br /&gt;
	char buffer[2048];&lt;br /&gt;
	size_t len;&lt;br /&gt;
 &lt;br /&gt;
	pContext-&amp;gt;LocalToString(params[3], &amp;amp;src);&lt;br /&gt;
 &lt;br /&gt;
	snprintf(buffer, sizeof(buffer), &amp;quot;%s&amp;quot;, src);&lt;br /&gt;
	pContext-&amp;gt;StringToLocal(params[1], params[2], buffer);&lt;br /&gt;
 &lt;br /&gt;
	return 1;&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generally, you will be using &amp;lt;tt&amp;gt;StringToLocal&amp;lt;/tt&amp;gt; for setting strings from outside sources, because it calculates addresses and overflows for you.  However, you must make sure that you are not overwriting memory as you are reading it, or else programmers who are using certain types of array slicing may find themselves getting unexpected results.&lt;br /&gt;
&lt;br /&gt;
=Advanced=&lt;br /&gt;
==Default Arguments==&lt;br /&gt;
Any type of parameter can have a default argument.  For example, here is a native where every argument has a default parameter:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native RandomStuff(a=0, Float:b=1.0f, &amp;amp;c=0, const String:d[]=&amp;quot;&amp;quot;, e[3] = {0,1,2});&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that even by reference parameters can have default arguments, as shown above.  This does not change the code; it just means the address will contain the default value.  &lt;br /&gt;
&lt;br /&gt;
Scripts can force default values.  Example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native RandomStuff(a, b, c=0, d=0);&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
{&lt;br /&gt;
	RandomStuff(1, 2, _, d);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The underscore ('_') means &amp;quot;use the default value for this argument.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Variable Arguments==&lt;br /&gt;
Variable arguments means any number of arguments can be passed.  An example of this looks like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native FormatText(const String:format[], {Float,String,_}:...);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;{Float,Handle_}:&amp;lt;/tt&amp;gt; is a multi-tag specifier that means any extra parameters must be either a &amp;lt;tt&amp;gt;Float&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;, or have no tag at all.  The &amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt; characters mean any number of parameters can follow.&lt;br /&gt;
&lt;br /&gt;
'''There is one important note about variable arguments.  They are always passed by reference.'''  This means if you have a function which supports variable arguments, and an integer is passed, you will need to use &amp;lt;tt&amp;gt;LocalToPhysAddr&amp;lt;/tt&amp;gt; as required with by reference parameters.  &lt;br /&gt;
&lt;br /&gt;
==Argument Counts/Backwards Compatibility==&lt;br /&gt;
In native handlers, the &amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt; array has a 0th index which stores the number of parameters it contains.  This is useful for both Default Arguments and Variable Arguments.  &lt;br /&gt;
&lt;br /&gt;
For example, consider the following native:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native DoSomething(index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's say that this native exists in plugins for six months.  After that, you decide to add a new parameter.  You want two conditions to be true after you release this update:&lt;br /&gt;
*Old plugins in binary form should still work on newer installations.&lt;br /&gt;
*Old plugins should still compile fine on the new API.&lt;br /&gt;
&lt;br /&gt;
The second condition is solved by using default arguments.  You should choose a value that will mimic the old functionality of the native.&lt;br /&gt;
&amp;lt;pawn&amp;gt;native DoSomething(index, newparam = 0);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, when changing the implementation, you should detect whether &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; contains ''one parameter'' or ''two parameters''.  If it only contains one, you know to use the old version.  If it contains two, you know to use the later version and accept the second parameter.&lt;br /&gt;
&lt;br /&gt;
Similarly, you can use the &amp;lt;tt&amp;gt;params[0]&amp;lt;/tt&amp;gt; count to detect how many arguments were passed to a variable argument native.  This is used primarily in [[Format Class Functions (SourceMod Scripting)|Format Class Functions]] for parameter-count validation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Throwing Errors/Invoking the Debugger=&lt;br /&gt;
Often, you will write a native and realize that you need to tell the plugin that a serious error has occurred.  A good example of this is if you are writing a function which requires a player index, but that index is beyond the reasonable bounds for the maximum players in the server.&lt;br /&gt;
&lt;br /&gt;
In this case, it is a good idea to throw a ''runtime error''.  This is an error that halts the plugin and invokes a call trace from the debugger.  The halt is not permanent, but it does break the execution flow of the current callback.&lt;br /&gt;
&lt;br /&gt;
There are two ways to throw a native error: &amp;lt;tt&amp;gt;ThrowNativeErrorEx()&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ThrowNativeError()&amp;lt;/tt&amp;gt;.  The former lets you specify a detailed error code from &amp;lt;tt&amp;gt;sp_vm_types.h&amp;lt;/tt&amp;gt;.  The latter is a helper function for generic errors, and it returns 0, allowing you to return with the function itself.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;static cell_t GetPlayerFrags(IPluginContext *pContext, const cell_t *params)&lt;br /&gt;
{&lt;br /&gt;
	if (params[1] &amp;lt; 0 || params[1] &amp;gt; maxplayers)&lt;br /&gt;
	{&lt;br /&gt;
		return pContext-&amp;gt;ThrowNativeError(&amp;quot;Invalid client index: %d&amp;quot;, params[1]);&lt;br /&gt;
	}&lt;br /&gt;
	/* ... rest of code ... */&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Don't worry about including extra information, such as your native name or the module name.  The debugger knows all of this information and will decide what to print to the user.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=DataPacks&amp;diff=10907</id>
		<title>DataPacks</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=DataPacks&amp;diff=10907"/>
		<updated>2020-03-23T14:04:52Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* WritePackCell */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DataPacks are a way to store and move around various types of data in [[:Category:SourceMod Scripting|SourceMod Scripting]]. Since some things are not possible in SourcePawn, such as a function consuming a String, DataPacks help us get these Strings and other items where they need to go.&lt;br /&gt;
&lt;br /&gt;
=Example of using a DataPack=&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
//writing&lt;br /&gt;
DataPack pack = new DataPack();&lt;br /&gt;
pack.WriteCell(23);&lt;br /&gt;
pack.WriteString(&amp;quot;I'm a little teapot.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//reading&lt;br /&gt;
pack.Reset(); //resets the index to the beginning, necessary for read.&lt;br /&gt;
int cellValue = pack.ReadCell();&lt;br /&gt;
char buffer[1024];&lt;br /&gt;
pack.ReadString(buffer, 1024);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Creating a DataPack=&lt;br /&gt;
Creating a DataPack is very simple; all you need is a Handle to write to.&lt;br /&gt;
&amp;lt;pawn&amp;gt;Datapack dataPackHandle = new DataPack();&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information on using Handles, see [[Handle API (SourceMod)]].&lt;br /&gt;
&lt;br /&gt;
=DataPack Functions=&lt;br /&gt;
On you have created your DataPack, you can use a variety of functions to manage the DataPack.&lt;br /&gt;
&lt;br /&gt;
==WritePackCell==&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void WritePackCell(Handle pack, any cell);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WritePackFloat==&lt;br /&gt;
This function can be used to write a Float to a DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void WritePackFloat(Handle pack, float val);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WritePackString==&lt;br /&gt;
This function can be used to write a String to a DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void WritePackString(Handle pack, const char[] str);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ReadPackCell==&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native any ReadPackCell(Handle pack);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ReadPackFloat==&lt;br /&gt;
This function can be used to read a Float from a DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native float ReadPackFloat(Handle pack);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ReadPackString==&lt;br /&gt;
This function can be used to read a String from a DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void ReadPackString(Handle pack, char[] buffer, maxlen);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ResetPack==&lt;br /&gt;
This function resets your position in the DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void ResetPack(Handle pack, bool clear=false);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==GetPackPosition==&lt;br /&gt;
This function gets your current position in the DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native int GetPackPosition(Handle pack);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SetPackPosition==&lt;br /&gt;
This function sets your current position in the DataPack.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native void SetPackPosition(Handle pack, int position);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Disposing of a DataPack=&lt;br /&gt;
To dispose of a DataPack, all you have to do is close its Handle.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;CloseHandle(dataPackHandle);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10893</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10893"/>
		<updated>2020-01-12T20:27:30Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
	char name[MAX_NAME_LENGTH];&lt;br /&gt;
	GetClientName(victim, name, sizeof(name));&lt;br /&gt;
	&lt;br /&gt;
	if (attacker != victim)&lt;br /&gt;
	{&lt;br /&gt;
		char other[MAX_NAME_LENGTH];&lt;br /&gt;
		GetClientName(attacker, other, sizeof(other));&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot);&lt;br /&gt;
	} else if (!attacker) {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot);&lt;br /&gt;
	} else {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		char weapon[64];&lt;br /&gt;
		int result;&lt;br /&gt;
&lt;br /&gt;
		event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
		/* Start function call */&lt;br /&gt;
		Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
		/* Push parameters one at a time */&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
		Call_PushString(weapon);&lt;br /&gt;
		Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		/* Finish the call, get the result */&lt;br /&gt;
		Call_Finish(result);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	char weapon[64];&lt;br /&gt;
	Action result;&lt;br /&gt;
&lt;br /&gt;
	event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
	/* Start function call */&lt;br /&gt;
	Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
	/* Push parameters one at a time */&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
	Call_PushString(weapon);&lt;br /&gt;
	Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	/* Finish the call, get the result */&lt;br /&gt;
	Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
	return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward = new PrivateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
	CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
	g_hDeathFwd = new PrivateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	g_hDeathFwd.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	Call_StartForward(g_hDeathFwd);&lt;br /&gt;
	Call_PushCell(client);&lt;br /&gt;
	Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=10892</id>
		<title>Creating Natives (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=10892"/>
		<updated>2020-01-12T20:22:52Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod allows plugins to create their own natives that other plugins can use.  This is very similar to AMX Mod X's {{amxx_func|register_native}} function.  It is a powerful inter-plugin communication resource that can greatly enhance the functionality you provide.&lt;br /&gt;
&lt;br /&gt;
''Prerequisites:'' You should have a good grasp of Pawn or SourcePawn scripting, as well as how [[Tags (Scripting)|Tags]] work.&amp;lt;br&amp;gt;&lt;br /&gt;
''Note:'' Most functions herein can be found in the [[SourceMod SDK]], under &amp;lt;tt&amp;gt;plugins/include/functions.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Before creating natives, you should always document and specify exactly how they will work.  This means writing your &amp;quot;include file&amp;quot; beforehand.  Not only does this guide you in writing your natives, but it has the added benefit of completing a large portion of documentation at the same time.&lt;br /&gt;
&lt;br /&gt;
==Include File==&lt;br /&gt;
For our first example, let's start off with a simple native that adds two numbers, a float and a non-float.  It might look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/** Double-include prevention */&lt;br /&gt;
#if defined _mynatives_included_&lt;br /&gt;
  #endinput&lt;br /&gt;
#endif&lt;br /&gt;
#define _mynatives_included_&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adds two numbers together.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num1    An integer.&lt;br /&gt;
 * @param num2    A float.&lt;br /&gt;
 * @return        The float value of the integer and float added together.&lt;br /&gt;
 */&lt;br /&gt;
native float My_AddNumbers(int num1, int num2);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The documentation and commenting style above is a SourceMod Development Team convention.  While you are not required to follow it for your own code, it may be a good idea to enhance readability (as readers will expect the style to conform).&lt;br /&gt;
&lt;br /&gt;
==Creating the Native==&lt;br /&gt;
To actually create the native, first let's define the native handler itself.  From &amp;lt;tt&amp;gt;functions.inc&amp;lt;/tt&amp;gt; we can see that this follows the prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef NativeCall = function int (Handle plugin, int numParams);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus, we have a function like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_My_AddNumbers(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we don't use the same function name as we did in our include file.  This is to prevent a possible ''name clash''.  Otherwise, two different symbols (one a native, another a function) could have the same name, and that's not allowed.  We'll see later how we bind the native to its actual name.&lt;br /&gt;
&lt;br /&gt;
Next, we need to implement our native.  &lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_My_AddNumbers(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	/* Retrieve the first parameter we receive */&lt;br /&gt;
	int num1 = GetNativeCell(1);&lt;br /&gt;
	/* Retrieve the second parameter we receive */&lt;br /&gt;
	float num2 = view_as&amp;lt;float&amp;gt;(GetNativeCell(2));&lt;br /&gt;
	/* Add them together */&lt;br /&gt;
	float value = num1 + num2;&lt;br /&gt;
	/* Return the value */&lt;br /&gt;
	return value;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should note four important details.  The first is that we have to manually grab the parameters -- they're not easily sent via arguments.  This is for technical reasons that go beyond the scope of this document.  That means you have to know exactly ''how'' to grab each parameter.  For our example, we know that both parameters are simply cells, and thus we can use &amp;lt;tt&amp;gt;GetNativeCell&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
However, the second detail is that there is no &amp;lt;tt&amp;gt;GetNativeCellFloat&amp;lt;/tt&amp;gt;.  This is because a &amp;lt;tt&amp;gt;Float&amp;lt;/tt&amp;gt; is still a cell; the data is just interpreted differently.  Thus, we ''change'' the tag to &amp;lt;tt&amp;gt;Float&amp;lt;/tt&amp;gt; manual.  '''This is different from calling float(GetNativeCell(2)).'''  In fact, that would not work; the &amp;lt;tt&amp;gt;float()&amp;lt;/tt&amp;gt; call would interpret the cell as an integer, when in fact it's already a float, just with the wrong tag (i.e., no tag at all).&lt;br /&gt;
&lt;br /&gt;
Similarly, the third detail is that we cannot simply put &amp;lt;tt&amp;gt;return value&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;return FloatRound(value)&amp;lt;/tt&amp;gt;.  The reason is that our native is supposed to be returning a float.  If we return &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt;, we'll get a tag mismatch.  If we return &amp;lt;tt&amp;gt;FloatRound(value)&amp;lt;/tt&amp;gt;, we'll be returning an integer when a float is expected.  The solution is to change the tag to the default tag, which will retain the value but remove the tag warning.&lt;br /&gt;
&lt;br /&gt;
Lastly, we did not need to verify &amp;lt;tt&amp;gt;numParams&amp;lt;/tt&amp;gt;.  The compiler will always send the correct amount of parameters - the user can't mess this up in any easy way.  Only if you use variadic arguments, or add parameters and need to support older binaries, do you need to handle &amp;lt;tt&amp;gt;numParams&amp;lt;/tt&amp;gt; variations.&lt;br /&gt;
&lt;br /&gt;
==Registering the Native==&lt;br /&gt;
Natives must be registered in &amp;lt;tt&amp;gt;AskPluginLoad2&amp;lt;/tt&amp;gt;.  Although they can be registered elsewhere, only this function guarantees that all other plugins will see your native.  The definition for this forward is in &amp;lt;tt&amp;gt;sourcemod.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	CreateNative(&amp;quot;My_AddNumbers&amp;quot;, Native_My_AddNumbers);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, any plugin will be able to use our native as if it were from a Core or a C++ extension.&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
==By-Reference==&lt;br /&gt;
Sometimes, it may be desirable to return data through by-reference parameters.  For example, observe the following native prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Closes a Handle, and sets the variable to INVALID_HANDLE by reference.&lt;br /&gt;
 *&lt;br /&gt;
 * @param hndl     Handle to close and clear.&lt;br /&gt;
 * @return         Anything that CloseHandle() returns.&lt;br /&gt;
 */&lt;br /&gt;
native bool AltCloseHandle(Handle &amp;amp;hndl);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this would look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_AltCloseHandle(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	Handle hndl = view_as&amp;lt;Handle&amp;gt;(GetNativeCellRef(1));&lt;br /&gt;
	SetNativeCellRef(1, 0);   /* Zero out the variable by reference */&lt;br /&gt;
	return CloseHandle(hndl);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we have a native that is &amp;quot;safer&amp;quot; than a normal &amp;lt;tt&amp;gt;CloseHandle&amp;lt;/tt&amp;gt;, as it ensures we don't hold onto invalid Handles.&lt;br /&gt;
&lt;br /&gt;
==Strings==&lt;br /&gt;
Strings can be retrieved and altered via dynamic natives.  Observe the following native prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Converts a string to upper case.&lt;br /&gt;
 *&lt;br /&gt;
 * @param str      String to convert.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void StringToUpper(char[] str);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this is very easy, because of dynamic arrays:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_StringToUpper(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int len;&lt;br /&gt;
	GetNativeStringLength(1, len);&lt;br /&gt;
&lt;br /&gt;
	if (len &amp;lt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	char[] str = new char[len + 1];&lt;br /&gt;
	GetNativeString(1, str, len + 1);&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; len; i++)&lt;br /&gt;
	{&lt;br /&gt;
		/* 5th bit specifies case in ASCII -- &lt;br /&gt;
		 * this is not UTF-8 compatible.&lt;br /&gt;
		 */&lt;br /&gt;
		if ((str[i] &amp;amp; (1 &amp;lt;&amp;lt; 5)) == (1 &amp;lt;&amp;lt; 5))&lt;br /&gt;
		{&lt;br /&gt;
			str[i] &amp;amp;= ~(1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SetNativeString(1, str, len+1, false);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arrays==&lt;br /&gt;
Working with arrays is very similar to strings.  For example, observe the following native prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Sums an array of numbers and returns the sum.&lt;br /&gt;
 *&lt;br /&gt;
 * @param array     Array of numbers to sum.&lt;br /&gt;
 * @param size      Size of array.&lt;br /&gt;
 * @return          Sum of the array elements.&lt;br /&gt;
 */&lt;br /&gt;
native int SumArray(const int array[], int size);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this could look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_SumArray(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int size = GetNativeCell(2);&lt;br /&gt;
	if (size &amp;lt; 1)&lt;br /&gt;
	{&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int array[size], total;&lt;br /&gt;
	GetNativeArray(1, array, size);&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
	{&lt;br /&gt;
		total += array[i];&lt;br /&gt;
	}&lt;br /&gt;
	return total;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, there is a &amp;lt;tt&amp;gt;SetNativeArray&amp;lt;/tt&amp;gt;, which is used to alter array contents.&lt;br /&gt;
&lt;br /&gt;
==Variable Arguments==&lt;br /&gt;
Variable arguments are usually used when dealing with [[Format Class Functions (SourceMod Scripting)|format class functions]], however it is also possible to use them for general functionality.  The only trick is that unlike normal parameters, every variable argument parameter is passed by-reference.  This adds no change for arrays and strings, but for floats, handles, numbers, or anything else that fits in a cell, &amp;lt;tt&amp;gt;GetNativeCellRef&amp;lt;/tt&amp;gt; must be used instead.&lt;br /&gt;
&lt;br /&gt;
As an example, let's convert our function from above to use variable arguments:&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Sums a list of numbers.&lt;br /&gt;
 *&lt;br /&gt;
 * @param num    First number to use as a base.&lt;br /&gt;
 * @param ...    Any number of additional numbers to add.&lt;br /&gt;
 * @return       Sum of all numbers passed.&lt;br /&gt;
 */&lt;br /&gt;
native int SumParams(int num, ...);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this would look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int Native_SumParams(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int base = GetNativeCell(1);&lt;br /&gt;
	for (int i = 2; i &amp;lt;= numParams; i++)&lt;br /&gt;
	{&lt;br /&gt;
		base += GetNativeCellRef(i);&lt;br /&gt;
	}&lt;br /&gt;
	return base;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Format Functions==&lt;br /&gt;
It is also possible to create your own [[Format Class Functions (SourceMod Scripting)|format class functions]].  This topic is much more complicated than the previous ones, as the native string formatter allows for many different configurations.  This is mainly for optimization.  Note that a formatting routine deals with two buffers: the input format string, and the output buffer.  &amp;lt;tt&amp;gt;FormatNativeString&amp;lt;/tt&amp;gt;, by default, uses parameter indexes directly so you don't have to copy or locally store any of these buffers.&lt;br /&gt;
&lt;br /&gt;
The most common usage of this is to accept a user-formatted string and to not&lt;br /&gt;
&amp;lt;pawn&amp;gt;/**&lt;br /&gt;
 * Prints a message with a [DEBUG] prefix to the server.&lt;br /&gt;
 *&lt;br /&gt;
 * @param fmt         Format string.&lt;br /&gt;
 * @param ...         Format arguments.&lt;br /&gt;
 */&lt;br /&gt;
native void DebugPrint(const char[] fmt, any ...);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be easily implemented as:&lt;br /&gt;
&amp;lt;pawn&amp;gt;native int DebugPrint(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	char buffer[1024]; &lt;br /&gt;
	int written;&lt;br /&gt;
&lt;br /&gt;
	FormatNativeString(0, /* Use an output buffer */&lt;br /&gt;
		1, /* Format param */&lt;br /&gt;
		2, /* Format argument #1 */&lt;br /&gt;
		sizeof(buffer), /* Size of output buffer */&lt;br /&gt;
		written, /* Store # of written bytes */&lt;br /&gt;
		buffer /* Use our buffer */&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
	PrintToServer(&amp;quot;[DEBUG] %s&amp;quot;, buffer);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Throwing Errors==&lt;br /&gt;
Often, your native will encounter an unrecoverable error, and you wish to trigger a fatal exception.  This is equivalent to &amp;lt;tt&amp;gt;IPluginContext::ThrowNativeError&amp;lt;/tt&amp;gt;, and will halt the current function execution in the plugin.  The debugger will be invoked and a backtrace will be printed out (if the plugin is in debug mode).  Although the current function is cancelled, the plugin will continue to operate normally afterward.&lt;br /&gt;
&lt;br /&gt;
For example, let's say we have a native that operates on clients.  We want to throw an error if we get a client index that is invalid or disconnected.  We could do this like so:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int MyFunction(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int client = GetNativeCell(1);&lt;br /&gt;
	if (client &amp;lt; 1 || client &amp;gt; MaxClients)&lt;br /&gt;
	{&lt;br /&gt;
		return ThrowNativeError(SP_ERROR_NATIVE, &amp;quot;Invalid client index (%d)&amp;quot;, client);&lt;br /&gt;
	}&lt;br /&gt;
	if (!IsClientConnected(client))&lt;br /&gt;
	{&lt;br /&gt;
		return ThrowNativeError(SP_ERROR_NATIVE, &amp;quot;Client %d is not connected&amp;quot;, client);&lt;br /&gt;
	}&lt;br /&gt;
	/* Code */&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating Natives for Methodmaps==&lt;br /&gt;
Declaring natives for methodmaps is similar to other natives, with a few requirements:&lt;br /&gt;
&lt;br /&gt;
# The &amp;lt;tt&amp;gt;CreateNative&amp;lt;/tt&amp;gt; string argument is in the format &amp;lt;tt&amp;gt;Tag.Function&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# The function is declared as a &amp;quot;member&amp;quot; of the methodmap.&lt;br /&gt;
# The magic &amp;quot;this&amp;quot; parameter is implicitly passed in first.&lt;br /&gt;
&lt;br /&gt;
Here's an example of a shared plugin and its corresponding include file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;/* sharedplugin.sp */&lt;br /&gt;
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	CreateNative(&amp;quot;Number.PrintToClient&amp;quot;, Native_PrintNumberToClient);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_PrintNumberToClient(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	int number = GetNativeCell(1);&lt;br /&gt;
	int client = GetNativeCell(2);&lt;br /&gt;
&lt;br /&gt;
	PrintToChat(client, &amp;quot;%d&amp;quot;, number);&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* sharedplugin.inc */&lt;br /&gt;
methodmap Number&lt;br /&gt;
{&lt;br /&gt;
	public Number(int number)&lt;br /&gt;
	{&lt;br /&gt;
		return view_as&amp;lt;Number&amp;gt;(number);&lt;br /&gt;
	}&lt;br /&gt;
	public native void PrintToClient(int client);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10891</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10891"/>
		<updated>2020-01-12T20:13:25Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Private Forwards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
	char name[MAX_NAME_LENGTH];&lt;br /&gt;
	GetClientName(victim, name, sizeof(name))&lt;br /&gt;
	&lt;br /&gt;
	if (attacker != victim)&lt;br /&gt;
	{&lt;br /&gt;
		char other[MAX_NAME_LENGTH];&lt;br /&gt;
		GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
	} else if (!attacker) {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	} else {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		char weapon[64];&lt;br /&gt;
		int result;&lt;br /&gt;
&lt;br /&gt;
		event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
		/* Start function call */&lt;br /&gt;
		Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
		/* Push parameters one at a time */&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
		Call_PushString(weapon);&lt;br /&gt;
		Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		/* Finish the call, get the result */&lt;br /&gt;
		Call_Finish(result);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	char weapon[64];&lt;br /&gt;
	Action result;&lt;br /&gt;
&lt;br /&gt;
	event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
	/* Start function call */&lt;br /&gt;
	Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
	/* Push parameters one at a time */&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
	Call_PushString(weapon);&lt;br /&gt;
	Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	/* Finish the call, get the result */&lt;br /&gt;
	Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
	return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward = new PrivateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
	CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
	g_hDeathFwd = new PrivateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
	g_hDeathFwd.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	Call_StartForward(g_hDeathFwd);&lt;br /&gt;
	Call_PushCell(client);&lt;br /&gt;
	Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10890</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10890"/>
		<updated>2020-01-12T20:10:48Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Global Forwards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
	char name[MAX_NAME_LENGTH];&lt;br /&gt;
	GetClientName(victim, name, sizeof(name))&lt;br /&gt;
	&lt;br /&gt;
	if (attacker != victim)&lt;br /&gt;
	{&lt;br /&gt;
		char other[MAX_NAME_LENGTH];&lt;br /&gt;
		GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
	} else if (!attacker) {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	} else {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		char weapon[64];&lt;br /&gt;
		int result;&lt;br /&gt;
&lt;br /&gt;
		event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
		/* Start function call */&lt;br /&gt;
		Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
		/* Push parameters one at a time */&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
		Call_PushString(weapon);&lt;br /&gt;
		Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		/* Finish the call, get the result */&lt;br /&gt;
		Call_Finish(result);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
	RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	char weapon[64];&lt;br /&gt;
	Action result;&lt;br /&gt;
&lt;br /&gt;
	event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
	/* Start function call */&lt;br /&gt;
	Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
	/* Push parameters one at a time */&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
	Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
	Call_PushString(weapon);&lt;br /&gt;
	Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	/* Finish the call, get the result */&lt;br /&gt;
	Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
	return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new PrivateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
   return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
   g_hDeathFwd = new PrivateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_hDeathFwd.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   Call_StartForward(g_hDeathFwd);&lt;br /&gt;
   Call_PushCell(client);&lt;br /&gt;
   Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10889</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10889"/>
		<updated>2020-01-12T20:10:10Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Generic Calling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
	char name[MAX_NAME_LENGTH];&lt;br /&gt;
	GetClientName(victim, name, sizeof(name))&lt;br /&gt;
	&lt;br /&gt;
	if (attacker != victim)&lt;br /&gt;
	{&lt;br /&gt;
		char other[MAX_NAME_LENGTH];&lt;br /&gt;
		GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
	} else if (!attacker) {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	} else {&lt;br /&gt;
		PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		char weapon[64];&lt;br /&gt;
		int result;&lt;br /&gt;
&lt;br /&gt;
		event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
		/* Start function call */&lt;br /&gt;
		Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
		/* Push parameters one at a time */&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
		Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
		Call_PushString(weapon);&lt;br /&gt;
		Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		/* Finish the call, get the result */&lt;br /&gt;
		Call_Finish(result);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   char weapon[64];&lt;br /&gt;
   Action result;&lt;br /&gt;
&lt;br /&gt;
   event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
   /* Start function call */&lt;br /&gt;
   Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
   /* Push parameters one at a time */&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
   Call_PushString(weapon);&lt;br /&gt;
   Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   /* Finish the call, get the result */&lt;br /&gt;
   Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
   return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new PrivateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
   return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
   g_hDeathFwd = new PrivateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_hDeathFwd.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   Call_StartForward(g_hDeathFwd);&lt;br /&gt;
   Call_PushCell(client);&lt;br /&gt;
   Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10888</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10888"/>
		<updated>2020-01-12T20:05:01Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Private Forwards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
   char name[MAX_NAME_LENGTH];&lt;br /&gt;
   GetClientName(victim, name, sizeof(name))&lt;br /&gt;
   &lt;br /&gt;
   if (attacker != victim)&lt;br /&gt;
   {&lt;br /&gt;
      char other[MAX_NAME_LENGTH];&lt;br /&gt;
      GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
   } else if (!attacker) {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   } else {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      char weapon[64];&lt;br /&gt;
      int result;&lt;br /&gt;
&lt;br /&gt;
      event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
      /* Start function call */&lt;br /&gt;
      Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
      /* Push parameters one at a time */&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
      Call_PushString(weapon);&lt;br /&gt;
      Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
      /* Finish the call, get the result */&lt;br /&gt;
      Call_Finish(result);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   char weapon[64];&lt;br /&gt;
   Action result;&lt;br /&gt;
&lt;br /&gt;
   event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
   /* Start function call */&lt;br /&gt;
   Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
   /* Push parameters one at a time */&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
   Call_PushString(weapon);&lt;br /&gt;
   Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   /* Finish the call, get the result */&lt;br /&gt;
   Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
   return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new PrivateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrivateForward g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
   return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
   g_hDeathFwd = new PrivateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   g_hDeathFwd.AddFunction(plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   Call_StartForward(g_hDeathFwd);&lt;br /&gt;
   Call_PushCell(client);&lt;br /&gt;
   Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10887</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=10887"/>
		<updated>2020-01-12T20:00:01Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Global Forwards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot)&lt;br /&gt;
{&lt;br /&gt;
   char name[MAX_NAME_LENGTH];&lt;br /&gt;
   GetClientName(victim, name, sizeof(name))&lt;br /&gt;
   &lt;br /&gt;
   if (attacker != victim)&lt;br /&gt;
   {&lt;br /&gt;
      char other[MAX_NAME_LENGTH];&lt;br /&gt;
      GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
   } else if (!attacker) {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   } else {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public void EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      char weapon[64];&lt;br /&gt;
      int result;&lt;br /&gt;
&lt;br /&gt;
      event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
      /* Start function call */&lt;br /&gt;
      Call_StartFunction(null, OnClientDied);&lt;br /&gt;
&lt;br /&gt;
      /* Push parameters one at a time */&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
      Call_PushString(weapon);&lt;br /&gt;
      Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
      /* Finish the call, get the result */&lt;br /&gt;
      Call_Finish(result);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GlobalForward g_DeathForward;&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = new GlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;my_plugin&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action EventHandler(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   char weapon[64];&lt;br /&gt;
   Action result;&lt;br /&gt;
&lt;br /&gt;
   event.GetString(&amp;quot;weapon&amp;quot;, weapon, sizeof(weapon));&lt;br /&gt;
&lt;br /&gt;
   /* Start function call */&lt;br /&gt;
   Call_StartForward(g_DeathForward);&lt;br /&gt;
&lt;br /&gt;
   /* Push parameters one at a time */&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;attacker&amp;quot;)));&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;)));&lt;br /&gt;
   Call_PushString(weapon);&lt;br /&gt;
   Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   /* Finish the call, get the result */&lt;br /&gt;
   Call_Finish(result);&lt;br /&gt;
  &lt;br /&gt;
   return result;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef OnClientDiedFunc = function Action (int attacker, int victim, const char[] weapon, bool headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native void HookClientDeath(OnClientDiedFunc func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = CreateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell)&lt;br /&gt;
   CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath)&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int Native_HookClientDeath(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   AddToForward(g_DeathForward, plugin, GetNativeFunction(1))&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;Handle g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// typedef MyFunction = function void (int client);&lt;br /&gt;
// native void My_NativeEx(MyFunction func);&lt;br /&gt;
public APLRes AskPluginLoad2(Handle plugin, bool late, const char[] error, int err_max)&lt;br /&gt;
{&lt;br /&gt;
   RegPluginLibrary(&amp;quot;MyPlugin&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
   return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
   g_hDeathFwd = CreateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int My_Native(Handle plugin, int numParams)&lt;br /&gt;
{&lt;br /&gt;
   AddToForward(g_hDeathFwd, plugin, GetNativeFunction(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action Event_Death(Event event, const char[] name, bool dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   int client = GetClientOfUserId(event.GetInt(&amp;quot;userid&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
   Call_StartForward(g_hDeathFwd);&lt;br /&gt;
   Call_PushCell(client);&lt;br /&gt;
   Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Custom_Admin_Menu_(SourceMod)&amp;diff=8914</id>
		<title>Custom Admin Menu (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Custom_Admin_Menu_(SourceMod)&amp;diff=8914"/>
		<updated>2013-04-25T21:48:06Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Parameter List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The custom menu feature allows server admins to add new items to the SourceMod admin menu. It is designed to be used as a complement to plugins adding themselves to the menu. For more information see [[Admin Menu (SourceMod Scripting)]].&lt;br /&gt;
&lt;br /&gt;
Admins configure their menu using the config file (sourcemod/configs/adminmenu_custom.txt) and this is generated into a set of items and categories for the admin menu when the server starts.&lt;br /&gt;
&lt;br /&gt;
==Parameter List==&lt;br /&gt;
&lt;br /&gt;
These are all the parameters that can be specified to configure your menu. Most are optional and have a default value if they are not found. See the [[#Example Command|Example Command]] and/or the attached [[#Example Files|Example Files]] for information on how to lay out your config file.&lt;br /&gt;
&lt;br /&gt;
*cmd - command to be executed (#1,#2 etc for parameters - no limit on these) Use @num to have the parameter sent without being surrounded by &amp;quot;quotes&amp;quot;&lt;br /&gt;
*admin - admin level required to access the command - see [[#Admin Levels|Admin Levels]]&lt;br /&gt;
*execute - 'server' or 'player' - selects whether to execute as a client command or server command - defaults to 'player'&lt;br /&gt;
*1 - Information about parameter 1 (#1) - You need as many of these as you have parameters&lt;br /&gt;
**type - defaults to 'list' if not provided&lt;br /&gt;
***'groupplayer' 	- List of [[#Group Submenus|Groups]] + connected player &lt;br /&gt;
***'group' 			- List of [[#Group Submenus|Groups]]&lt;br /&gt;
***'player' 		- List of players&lt;br /&gt;
***'list'			- Custom Defined list of Options&lt;br /&gt;
***'mapcycle'		- Auto filled with the contents of your mapcycle file&lt;br /&gt;
***'onoff'			- On or Off menu that sends the numbers 1/0 (good for cvars etc)&lt;br /&gt;
**path - Only required for type mapcycle. Path (including file name and extension) to the file containing a list of maps (straight text formatting like mapcycle.txt) - defaults to 'mapcycle.txt'&lt;br /&gt;
**method - 'name', 'steamid', 'userid', 'userid2' (doesn't prepend the '#'), 'clientid', 'ip' - only needed for groupplayer/player menus - defaults to name&lt;br /&gt;
**title - To be shown for the parameter selection menu (optional)&lt;br /&gt;
**1-x	 - List parameters - only needed for 'list' type parameters&lt;br /&gt;
**1.-x. - Text to be shown for parameter - only needed for 'list' type parameters (optional, above will be used as text if ommited)&lt;br /&gt;
**1* - x* - Admin level required to see this option (same as the rest of the admin types)&lt;br /&gt;
&lt;br /&gt;
==Example Command==&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
&amp;quot;Commands&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;Fun Commands&amp;quot;&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;Set Player Speed&amp;quot;&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;cmd&amp;quot;			&amp;quot;sm_speed #1 @2&amp;quot;&lt;br /&gt;
			&amp;quot;admin&amp;quot;			&amp;quot;sm_kick&amp;quot;&lt;br /&gt;
			&amp;quot;execute&amp;quot;		&amp;quot;player&amp;quot;&lt;br /&gt;
			&amp;quot;1&amp;quot;&lt;br /&gt;
			{&lt;br /&gt;
				&amp;quot;type&amp;quot; 		&amp;quot;groupplayer&amp;quot;&lt;br /&gt;
				&amp;quot;method&amp;quot;	&amp;quot;name&amp;quot;&lt;br /&gt;
				&amp;quot;title&amp;quot;		&amp;quot;Player/Team to Edit&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
			}&lt;br /&gt;
			&amp;quot;2&amp;quot;&lt;br /&gt;
			{&lt;br /&gt;
				&amp;quot;type&amp;quot; 		&amp;quot;list&amp;quot;&lt;br /&gt;
				&amp;quot;title&amp;quot;		&amp;quot;Speed Multiplier&amp;quot;&lt;br /&gt;
				&amp;quot;1&amp;quot;		&amp;quot;1.0&amp;quot;&lt;br /&gt;
				&amp;quot;1.&amp;quot;		&amp;quot;Normal&amp;quot;&lt;br /&gt;
				&amp;quot;2&amp;quot;		&amp;quot;0.8&amp;quot;&lt;br /&gt;
				&amp;quot;2.&amp;quot;		&amp;quot;80%&amp;quot;&lt;br /&gt;
				&amp;quot;3&amp;quot;		&amp;quot;0.5&amp;quot;&lt;br /&gt;
				&amp;quot;3.&amp;quot;		&amp;quot;Half&amp;quot;&lt;br /&gt;
				&amp;quot;4&amp;quot;		&amp;quot;1.5&amp;quot;&lt;br /&gt;
				&amp;quot;4.&amp;quot;		&amp;quot;50% Boost&amp;quot;&lt;br /&gt;
				&amp;quot;5&amp;quot;		&amp;quot;2.0&amp;quot;&lt;br /&gt;
				&amp;quot;5.&amp;quot;		&amp;quot;Double&amp;quot;&lt;br /&gt;
				&amp;quot;5*&amp;quot;		&amp;quot;sm_ban&amp;quot; &lt;br /&gt;
				//restrict the double option to admins who have access to the 'sm_ban' override&lt;br /&gt;
			}&lt;br /&gt;
		&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
Using the above as the contents of your adminmenu_custom.txt config file would create a new category option in the admin menu called 'Fun Commands'.&lt;br /&gt;
*This category would contain an option called : &amp;quot;Set Player Speed&amp;quot;.&lt;br /&gt;
*Selecting it would prompt another menu titled: &amp;quot;Player/Team to Edit&amp;quot; containing a list of Groups and Player Names.&lt;br /&gt;
*Selecting one of these would prompt a second menu titled &amp;quot;Speed Multiplier&amp;quot;.&lt;br /&gt;
*List of options like &amp;quot;Normal&amp;quot;, &amp;quot;80%&amp;quot; etc.&lt;br /&gt;
*Example command sent if the user selected &amp;quot;Double&amp;quot; (through the player using FakeClientCommand)  - 'sm_speed &amp;quot;@CT&amp;quot; 2.0'&lt;br /&gt;
&lt;br /&gt;
NB: You can use \ as an escape character. So \&amp;quot; will let you add quotes to your strings.&lt;br /&gt;
&lt;br /&gt;
==Admin Levels==&lt;br /&gt;
&lt;br /&gt;
	All 'admin' types now require a string command name. This command can be already existing (sm_ban) or completely imaginary (onlycrabscanusethis).&lt;br /&gt;
	&lt;br /&gt;
	If the command exists that section (or list option) will require the exact same access level as that command (including any overrides you have specified).&amp;lt;br&amp;gt;&lt;br /&gt;
	E.g. You use sm_ban as the admin level for a submenu, so anyone that can access sm_ban will also be able to access this menu option (By default this is admins with the 'ban' flag). However if you have overridden sm_ban in one of your lower groups (&amp;quot;override&amp;quot; &amp;quot;allow&amp;quot; - in admin_groups.cfg). This group will also have access.&lt;br /&gt;
	&lt;br /&gt;
	If the command doesn't exist you will need to add it to your overrides sections as if it was a normal command. This can be done in admin_overrides.cfg (to assign flag letters to this command),&lt;br /&gt;
	and/or in admin_groups.cfg (to give access to the command to a specified group or remove it from a group even though they have the flag)&lt;br /&gt;
&lt;br /&gt;
If no admin level is specified for a base command it will default to the first argument of the &amp;quot;cmd&amp;quot; string. For example having&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
&amp;quot;cmd&amp;quot;		&amp;quot;sm_ban #1 #2&amp;quot;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would have a default admin override string of 'sm_ban'&lt;br /&gt;
	&lt;br /&gt;
For more information, see [[Overriding Command Access (SourceMod)|Overriding Command Access]]&lt;br /&gt;
&lt;br /&gt;
==Group Submenus==&lt;br /&gt;
&lt;br /&gt;
Types 'group' and 'groupplayer' auto-add pre configured options to the menu. These options are configured using sourcemod/configs/adminmenu_grouping.txt&lt;br /&gt;
&lt;br /&gt;
They are generally used to provide common commands like '@all' , '@t' etc to your menus.&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
&lt;br /&gt;
If you wish to add items to an existing SourceMod category you will need to specify it’s internal name within the &amp;quot;commands&amp;quot; group. The three categories provided by SourceMod are:&lt;br /&gt;
&lt;br /&gt;
*PlayerCommands&lt;br /&gt;
*ServerCommands&lt;br /&gt;
*VotingCommands&lt;br /&gt;
&lt;br /&gt;
==Sorting==&lt;br /&gt;
Categories and items added using the dynamic menu can be sorted in the same way as normal items. For more information, see [[Admin Menu Configuration (SourceMod)|Admin Menu Configuration]]&lt;br /&gt;
&lt;br /&gt;
You need to specify the name you gave the command in your configuration file. For the provided example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
&amp;quot;item&amp;quot;	&amp;quot;Set Player Speed&amp;quot;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
==Extra Uses==&lt;br /&gt;
An example of using the dynamic menu to its full potential: Giving admins access to some cvars while not letting them have general 'sm_cvar' access.&lt;br /&gt;
&lt;br /&gt;
Add the cvar you want to make available using the command directly and set the 'execute' parameter to 'server'&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
&amp;quot;cmd&amp;quot;		&amp;quot;mp_friendlyfire #1&amp;quot;&lt;br /&gt;
&amp;quot;execute&amp;quot;	&amp;quot;server&amp;quot;&lt;br /&gt;
&amp;quot;admin&amp;quot;		&amp;quot;sm_kick&amp;quot;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This fires the command directly through rcon so it bypasses the normal SourceMod admin requirements and only checks what you set using the 'admin' parameter. This method can be used to create a list of commonly used (and low impact) cvars that your lower admins can change at will, without giving them access to everything. The same method works for rcon commands.&lt;br /&gt;
&lt;br /&gt;
==Example Files==&lt;br /&gt;
&lt;br /&gt;
Example adminmenu_custom.txt setup with Super Commands examples:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://alliedmods.net/~pred/supercmdsmenu.ini adminmenu_custom.txt]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A Full example setup thanks to uE|Tekniqal:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://alliedmods.net/~pred/smsuper.ini adminmenu_custom.txt]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://alliedmods.net/~pred/admin_overrides.cfg admin_overrides.cfg]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://alliedmods.net/~pred/admin_groups.cfg admin_groups.cfg]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Public_Commands_(SourceMod)&amp;diff=8913</id>
		<title>Public Commands (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Public_Commands_(SourceMod)&amp;diff=8913"/>
		<updated>2013-04-18T22:29:42Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following commands are available to players on SourceMod servers using the provided [[Base Plugins (SourceMod)|base plugin]] set.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;rockthevote.smx&amp;lt;/tt&amp;gt; is not enabled by default.&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| currentmap&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays the name of the current map.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ff&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays whether friendly fire is on or off.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| motd&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays the Message of the Day (MOTD) window.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| nextmap&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Shows the next map in the mapcycle to the user.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| nominate&lt;br /&gt;
| rockthevote.smx&lt;br /&gt;
| &amp;amp;lt;map&amp;amp;gt;&lt;br /&gt;
| Nominates a map for rtv.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| rtv OR rockthevote&lt;br /&gt;
| rockthevote.smx&lt;br /&gt;
| &lt;br /&gt;
| Starts a rockthevote vote.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| thetime&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays the current time of the server.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| timeleft&lt;br /&gt;
| basetriggers.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays the time left in the map cycle.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_settings&lt;br /&gt;
| clientprefs.smx&lt;br /&gt;
| &lt;br /&gt;
| Displays the client settings menu.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_cookies&lt;br /&gt;
| clientprefs.smx&lt;br /&gt;
| &amp;lt;name&amp;gt; [value]&lt;br /&gt;
| With no arguments displays the list of available cookies, specify a name to show or change it's value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=8831</id>
		<title>Function Calling API (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=8831"/>
		<updated>2013-02-06T10:58:29Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Private Forwards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceMod provides plugins with an API for calling functions.  This API can be used to call public functions in any plugin, including public functions in the same plugin.  &lt;br /&gt;
&lt;br /&gt;
This article is split into two sections.  The first is on generic function calling, which is used for single function calls.  The second is on Forwards, which is used for calling multiple functions in one operation.&lt;br /&gt;
&lt;br /&gt;
For more information on forwards, readers should see [[Writing_Extensions#Creating_Events.2FForwards|forwards in extensions]].&lt;br /&gt;
&lt;br /&gt;
=Generic Calling=&lt;br /&gt;
There are four steps to calling a function in a plugin:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obtaining a &amp;quot;call Handle.&amp;quot;  This is either in the form of a function ID, tagged with &amp;lt;tt&amp;gt;Function:&amp;lt;/tt&amp;gt;, or a Forward Handle, tagged with &amp;lt;tt&amp;gt;Handle:&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Starting the call.&lt;br /&gt;
 &amp;lt;li&amp;gt;Pushing parameters in increasing order in a way that matches the function prototype.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Ending the the call, which performs the call operation and returns the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For simplicity, let's consider calling a function in our own plugin.  We have the following function:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public OnClientDied(attacker, victim, const String:weapon[], bool:headshot)&lt;br /&gt;
{&lt;br /&gt;
   decl String:name[65]&lt;br /&gt;
   GetClientName(victim, name, sizeof(name))&lt;br /&gt;
   &lt;br /&gt;
   if (attacker != victim)&lt;br /&gt;
   {&lt;br /&gt;
      decl String:other[65]&lt;br /&gt;
      GetClientName(attacker, other, sizeof(other))&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by &amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, other, weapon, headshot)&lt;br /&gt;
   } else if (!attacker) {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;world\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   } else {&lt;br /&gt;
      PrintToServer(&amp;quot;&amp;lt;\&amp;quot;%s\&amp;quot;&amp;gt; killed by \&amp;quot;self\&amp;quot; with \&amp;quot;%s\&amp;quot; (headshot: %d)&amp;quot;, name, weapon, headshot)&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public EventHandler(Handle:event, const String:name[], bool:dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   if (StrEqual(name, &amp;quot;player_death&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      decl String:weapon[64], result&lt;br /&gt;
      GetEventString(event, &amp;quot;weapon&amp;quot;, weapon, sizeof(weapon))&lt;br /&gt;
&lt;br /&gt;
      /* Start function call */&lt;br /&gt;
      Call_StartFunction(INVALID_HANDLE, OnClientDied)&lt;br /&gt;
&lt;br /&gt;
      /* Push parameters one at a time */&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(GetEventInt(event, &amp;quot;attacker&amp;quot;)))&lt;br /&gt;
      Call_PushCell(GetClientOfUserId(GetEventInt(event, &amp;quot;userid&amp;quot;)))&lt;br /&gt;
      Call_PushString(weapon)&lt;br /&gt;
      Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
      /* Finish the call, get the result */&lt;br /&gt;
      Call_Finish(result)&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basic example shows starting and completing a function call.  However, the real use of function calling is with forwards, which is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
=Forwards=&lt;br /&gt;
Forwards are much more advantageous over single function calls.  They are expandable containers, so you can store and complete many calls with very little action.  Furthermore, they also adjust themselves when contained plugins are unloaded.  Lastly, they are type-checked; each forward's parameter types must be known in advance, and if you push a mismatching type, the call will not complete.&lt;br /&gt;
&lt;br /&gt;
Forwards must be created using the following types:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Any&amp;lt;/tt&amp;gt; - Any parameter type can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Cell&amp;lt;/tt&amp;gt; - A non-Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Float&amp;lt;/tt&amp;gt; - A Float cell can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_String&amp;lt;/tt&amp;gt; - A string can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_Array&amp;lt;/tt&amp;gt; - An array can be pushed&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_VarArgs&amp;lt;/tt&amp;gt; - This and all further parameters can be any type, but will be by reference.  This cannot be the first parameter type, and if it is used, it must be the last parameter type.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_CellByRef&amp;lt;/tt&amp;gt; - A non-Float cell by reference&lt;br /&gt;
*&amp;lt;tt&amp;gt;Param_FloatByRef&amp;lt;/tt&amp;gt; - A Float cell by reference&lt;br /&gt;
&lt;br /&gt;
Strings and arrays are implicitly by-reference.  When pushing variable argument parameters, if anything is pushed by-value, it will be internally automatically converted to by-reference.&lt;br /&gt;
&lt;br /&gt;
Since Forwards will call multiple functions in a row, it needs to know how to interpret the return values of functions.  There are four predefined methods:&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Ignore&amp;lt;/tt&amp;gt; - All return values will be ignored; 0 will be returned at the end.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Single&amp;lt;/tt&amp;gt; - Only the last return value will be returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Event&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value (&amp;lt;tt&amp;gt;core.inc&amp;lt;/tt&amp;gt;).  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; acts as &amp;lt;tt&amp;gt;Plugin_Handled&amp;lt;/tt&amp;gt;.  The highest value is returned.&lt;br /&gt;
*&amp;lt;tt&amp;gt;ET_Hook&amp;lt;/tt&amp;gt; - Function should return an &amp;lt;tt&amp;gt;Action&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;Plugin_Stop&amp;lt;/tt&amp;gt; ends the forward call immediately.&lt;br /&gt;
&lt;br /&gt;
Let's write a simple example.  Our plugin, Plugin A, wants to tell other plugins when a player dies.  It has two ways of doing this, either via a ''global'' forward or a ''private'' forward.  A global forward acts upon all functions in all plugins that match a single name.  A private forward lets you explicitly manage which functions are in the container.&lt;br /&gt;
&lt;br /&gt;
==Global Forwards==&lt;br /&gt;
Global forwards are very simple to use.  After creation, they do not need to be maintained.  An example plugin below creates a global forward with the following prototype:&lt;br /&gt;
&amp;lt;pawn&amp;gt;forward OnClientDied(attacker, victim, const String:weapon[], bool:headshot);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_DeathForward&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = CreateGlobalForward(&amp;quot;OnClientDied&amp;quot;, ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell)&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:EventHandler(Handle:event, const String:name[], bool:dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
   decl String:weapon[64], Action:result&lt;br /&gt;
   GetEventString(event, &amp;quot;weapon&amp;quot;, weapon, sizeof(weapon))&lt;br /&gt;
&lt;br /&gt;
   /* Start function call */&lt;br /&gt;
   Call_StartForward(g_DeathForward)&lt;br /&gt;
&lt;br /&gt;
   /* Push parameters one at a time */&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(GetEventInt(event, &amp;quot;attacker&amp;quot;)))&lt;br /&gt;
   Call_PushCell(GetClientOfUserId(GetEventInt(event, &amp;quot;userid&amp;quot;)))&lt;br /&gt;
   Call_PushString(weapon)&lt;br /&gt;
   Call_PushCell(GetEventInt(event, &amp;quot;headshot&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
   /* Finish the call, get the result */&lt;br /&gt;
   Call_Finish(_:result)&lt;br /&gt;
  &lt;br /&gt;
   return result&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Private Forwards==&lt;br /&gt;
Private forwards require you to manually add functions to its container.  This can leave you with much more flexibility.  Like global forwards, they automatically remove functions from unloaded plugins.  &lt;br /&gt;
&lt;br /&gt;
Usually, this is done using dynamic natives; a plugin will expose a function to add to its own forwards.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;functag OnClientDiedFunc Action:public(attacker, victim, const String:weapon[], bool:headshot);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Calls the target function when a client dies.&lt;br /&gt;
 *&lt;br /&gt;
 * @param func      OnClientDiedFunc function.&lt;br /&gt;
 * @noreturn&lt;br /&gt;
 */&lt;br /&gt;
native HookClientDeath(OnClientDiedFunc:func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
   g_DeathForward = CreateForward(ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell)&lt;br /&gt;
   CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath)&lt;br /&gt;
   HookEvent(&amp;quot;player_death&amp;quot;, EventHandler)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Native_HookClientDeath(Handle:plugin, numParams)&lt;br /&gt;
{&lt;br /&gt;
   AddToForward(g_DeathForward, plugin, Function:GetNativeCell(1))&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the code to call the forward does not need to change at all.&lt;br /&gt;
&lt;br /&gt;
A complete implementation of a private forward may look like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;functag MyFunction public(client);&lt;br /&gt;
native My_NativeEx(MyFunction:func);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hDeathFwd;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// functag MyFunction public(client);&lt;br /&gt;
// native My_NativeEx(MyFunction:func);&lt;br /&gt;
public APLRes:AskPluginLoad2(Handle:plugin, bool:late, const String:error[], err_max)&lt;br /&gt;
{&lt;br /&gt;
	CreateNative(&amp;quot;My_NativeEx&amp;quot;, My_Native);&lt;br /&gt;
	return APLRes_Success;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	HookEvent(&amp;quot;player_death&amp;quot;, Event_Death);&lt;br /&gt;
	g_hDeathFwd = CreateForward(ET_Ignore, Param_Cell);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public My_Native(Handle:plugin, numParams)&lt;br /&gt;
{&lt;br /&gt;
	AddToForward(g_hDeathFwd, plugin, Function:GetNativeCell(1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:Event_Death(Handle:event, const String:name[], bool:dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	new client = GetClientOfUserId(GetEventInt(event, &amp;quot;userid&amp;quot;));&lt;br /&gt;
	Call_StartForward(g_hDeathFwd);&lt;br /&gt;
	Call_PushCell(client);&lt;br /&gt;
	Call_Finish();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=SQL_(SourceMod_Scripting)&amp;diff=8818</id>
		<title>SQL (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=SQL_(SourceMod_Scripting)&amp;diff=8818"/>
		<updated>2013-01-17T21:33:19Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Prepared Statements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is an introduction to using SourceMod's SQL features.  It is not an introduction or tutorial about SQL or any specific SQL implementation.&lt;br /&gt;
&lt;br /&gt;
SourceMod's SQL layer is formally called ''DBI'', or the '''D'''ata'''b'''ase '''I'''nterface.  The interface is a generic abstraction of common SQL functions.  To connect to a specific database implementation (such as MySQL, or sqLite), a SourceMod DBI &amp;quot;driver&amp;quot; must be loaded.  Currently, there are drivers for MySQL and SQLite&lt;br /&gt;
&lt;br /&gt;
SourceMod automatically detects and loads drivers on demand (if they exist, of course).  All database natives are in &amp;lt;tt&amp;gt;scripting/include/dbi.inc&amp;lt;/tt&amp;gt;.  The C++ API is in &amp;lt;tt&amp;gt;public/IDBDriver.h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Connecting=&lt;br /&gt;
There are two ways to connect to a database.  The first is through named configurations.  Named configurations are preset configurations listed in &amp;lt;tt&amp;gt;configs/databases.cfg&amp;lt;/tt&amp;gt;.  SourceMod specifies that if SQL is being used, there should always be one configuration named &amp;quot;default.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example of such a configuration looks like:&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;quot;default&amp;quot;&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;host&amp;quot;				&amp;quot;localhost&amp;quot;&lt;br /&gt;
		&amp;quot;database&amp;quot;			&amp;quot;sourcemod&amp;quot;&lt;br /&gt;
		&amp;quot;user&amp;quot;				&amp;quot;root&amp;quot;&lt;br /&gt;
		&amp;quot;pass&amp;quot;				&amp;quot;&amp;quot;&lt;br /&gt;
		//&amp;quot;timeout&amp;quot;			&amp;quot;0&amp;quot;&lt;br /&gt;
		//&amp;quot;port&amp;quot;			&amp;quot;0&amp;quot;&lt;br /&gt;
	}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connections based on named configurations can be instantiated with either &amp;lt;tt&amp;gt;SQL_Connect&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;SQL_DefConnect&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
The other option is to use &amp;lt;tt&amp;gt;SQL_ConnectEx&amp;lt;/tt&amp;gt; and manually specify all connection parameters.&lt;br /&gt;
&lt;br /&gt;
Example of a typical connection:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new String:error[255]&lt;br /&gt;
new Handle:db = SQL_DefConnect(error, sizeof(error))&lt;br /&gt;
&lt;br /&gt;
if (db == INVALID_HANDLE)&lt;br /&gt;
{&lt;br /&gt;
	PrintToServer(&amp;quot;Could not connect: %s&amp;quot;, error)&lt;br /&gt;
} else {&lt;br /&gt;
	CloseHandle(db)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Queries=&lt;br /&gt;
&lt;br /&gt;
==No Results==&lt;br /&gt;
The simplest queries are ones which do not return results -- for example, CREATE, DROP, UPDATE, INSERT, and DELETE.  For such queries it is recommended to use &amp;lt;tt&amp;gt;SQL_FastQuery()&amp;lt;/tt&amp;gt;.  The name does not imply that the query will be faster, but rather, it is faster to write code using this function.  For example, given that &amp;lt;tt&amp;gt;db&amp;lt;/tt&amp;gt; is a valid database Handle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;if (!SQL_FastQuery(db, &amp;quot;UPDATE stats SET players = players + 1&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
	new String:error[255]&lt;br /&gt;
	SQL_GetError(db, error, sizeof(error))&lt;br /&gt;
	PrintToServer(&amp;quot;Failed to query (error: %s)&amp;quot;, error)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
If a query returns a result set and the results must be processed, you must use &amp;lt;tt&amp;gt;SQL_Query()&amp;lt;/tt&amp;gt;.  Unlike &amp;lt;tt&amp;gt;SQL_FastQuery()&amp;lt;/tt&amp;gt;, this function returns a Handle which must be closed.&lt;br /&gt;
&lt;br /&gt;
An example of a query which will produce results is:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:query = SQL_Query(db, &amp;quot;SELECT userid FROM vb_user WHERE username = 'BAILOPAN'&amp;quot;)&lt;br /&gt;
if (query == INVALID_HANDLE)&lt;br /&gt;
{&lt;br /&gt;
	new String:error[255]&lt;br /&gt;
	SQL_GetError(db, error, sizeof(error))&lt;br /&gt;
	PrintToServer(&amp;quot;Failed to query (error: %s)&amp;quot;, error)&lt;br /&gt;
} else {&lt;br /&gt;
	/* Process results here!&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	/* Free the Handle */&lt;br /&gt;
	CloseHandle(query)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Prepared Statements=&lt;br /&gt;
Prepared statements are another method of querying.  The idea behind a prepared statement is that you construct a query &amp;quot;template&amp;quot; once, and re-use it as many times as needed.  Prepared statements have the following benefits:&lt;br /&gt;
*A good SQL implementation will be able to cache the query better if it is a prepared statement.&lt;br /&gt;
*You don't have to rebuild the entire query string every execution.&lt;br /&gt;
*You don't have to allocate a new query structure on every execution.&lt;br /&gt;
*Input is &amp;quot;always&amp;quot; secure (more on this later).&lt;br /&gt;
&lt;br /&gt;
A prepared statement has &amp;quot;markers&amp;quot; for inputs.  For example, let's consider a function that takes in a database Handle and a name, and retrieves some info from a table:&lt;br /&gt;
&amp;lt;pawn&amp;gt;GetSomeInfo(Handle:db, const String:name[])&lt;br /&gt;
{&lt;br /&gt;
	new Handle:hQuery&lt;br /&gt;
	new String:query[100]&lt;br /&gt;
&lt;br /&gt;
	/* Create enough space to make sure our string is quoted properly  */&lt;br /&gt;
	new buffer_len = strlen(name) * 2 + 1&lt;br /&gt;
	new String:new_name[buffer_len]&lt;br /&gt;
&lt;br /&gt;
	/* Ask the SQL driver to make sure our string is safely quoted */&lt;br /&gt;
	SQL_EscapeString(db, name, new_name, buffer_len)&lt;br /&gt;
&lt;br /&gt;
	/* Build the query */&lt;br /&gt;
	Format(query, sizeof(query), &amp;quot;SELECT userid FROM vb_user WHERE username = '%s'&amp;quot;, new_name)&lt;br /&gt;
	&lt;br /&gt;
	/* Execute the query */&lt;br /&gt;
	if ((hQuery = SQL_Query(query)) == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		return 0&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Get some info here&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	CloseHandle(hQuery)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observe a version with prepared statements:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:hUserStmt = INVALID_HANDLE;&lt;br /&gt;
GetSomeInfo(Handle:db, const String:name[])&lt;br /&gt;
{&lt;br /&gt;
	/* Check if we haven't already created the statement */&lt;br /&gt;
	if (hUserStmt == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		new String:error[255]&lt;br /&gt;
		hUserStmt = SQL_PrepareQuery(db, &amp;quot;SELECT userid FROM vb_user WHERE username = ?&amp;quot;, error, sizeof(error));&lt;br /&gt;
		if (hUserStmt == INVALID_HANDLE)&lt;br /&gt;
		{&lt;br /&gt;
			return 0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SQL_BindParamString(hUserStmt, 0, name, false);&lt;br /&gt;
	if (!SQL_Execute(hUserStmt))&lt;br /&gt;
	{&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get some info here&lt;br /&gt;
	 */&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important differences:&lt;br /&gt;
*The input string (&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;) did not need to be backticked (quoted).  The SQL engine automatically performs all type safety and insertion checks.&lt;br /&gt;
*There was no need for quotation marks around the parameter marker, &amp;lt;tt&amp;gt;?&amp;lt;/tt&amp;gt;, even though it accepted a string.&lt;br /&gt;
*We only needed to create the statement Handle once; after that it can live for the lifetime of the database connection.&lt;br /&gt;
&lt;br /&gt;
=Processing Results=&lt;br /&gt;
Processing results is done in the same manner for both normal queries and prepared statements.  The important functions are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_GetRowCount()&amp;lt;/tt&amp;gt; - Returns the number of rows.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_FetchRow()&amp;lt;/tt&amp;gt; - Fetches the next row if one is available.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_Fetch[Int|String|Float]()&amp;lt;/tt&amp;gt; - Fetches data from a field in the current row.&lt;br /&gt;
&lt;br /&gt;
Let's consider a sample table that looks like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;CREATE TABLE users (&lt;br /&gt;
	name VARCHAR(64) NOT NULL PRIMARY KEY,&lt;br /&gt;
	age INT UNSIGNED NOT NULL&lt;br /&gt;
	);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following example has code that will print out all users matching a certain age.  There is an example for both prepared statements and normal queries.&lt;br /&gt;
&amp;lt;pawn&amp;gt;PrintResults(Handle:query)&lt;br /&gt;
{&lt;br /&gt;
	/* Even if we have just one row, you must call SQL_FetchRow() first */&lt;br /&gt;
	new String:name[65]&lt;br /&gt;
	while (SQL_FetchRow(query))&lt;br /&gt;
	{&lt;br /&gt;
		SQL_FetchString(query, 0, name, sizeof(name))&lt;br /&gt;
		PrintToServer(&amp;quot;Name \&amp;quot;%s\&amp;quot; was found.&amp;quot;, name)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool:GetByAge_Query(Handle:db, age)&lt;br /&gt;
{&lt;br /&gt;
	new String:query[100]&lt;br /&gt;
	Format(query, sizeof(query), &amp;quot;SELECT name FROM users WHERE age = %d&amp;quot;, age)&lt;br /&gt;
&lt;br /&gt;
	new Handle:hQuery = SQL_Query(db, query)&lt;br /&gt;
	if (hQuery == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		return false&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	PrintResults(hQuery)&lt;br /&gt;
&lt;br /&gt;
	CloseHandle(hQuery)&lt;br /&gt;
&lt;br /&gt;
	return true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
new Handle:hAgeStmt = INVALID_HANDLE&lt;br /&gt;
bool:GetByAge_Statement(Handle:db, age)&lt;br /&gt;
{&lt;br /&gt;
	if (hAgeSmt == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		new String:error[255]&lt;br /&gt;
		if ((hAgeStmt = SQL_PrepareQuery(db, &lt;br /&gt;
			&amp;quot;SELECT name FROM users WHERE age = ?&amp;quot;, &lt;br /&gt;
			error, &lt;br /&gt;
			sizeof(error))) &lt;br /&gt;
		     == INVALID_HANDLE)&lt;br /&gt;
		{&lt;br /&gt;
			return false&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SQL_BindParamInt(hAgeStmt, 0, age)&lt;br /&gt;
	if (!SQL_Execute(hAgeStmt))&lt;br /&gt;
	{&lt;br /&gt;
		return false&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	PrintResults(hAgeStmt)&lt;br /&gt;
&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that these examples did not close the statement Handles.  These examples assume a global database instance that is only closed when the plugin is unloaded.  For plugins which maintain temporary database connections, prepared statement Handles must be freed or else the database connection will never be closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Threading=&lt;br /&gt;
SourceMod supports threaded SQL querying.  That is, SQL operations can be completed in a separate thread from main gameplay.  If your database server is remote or requires a network connection, queries can cause noticeable gameplay lag, and supporting threading is often a good idea if your queries occur in the middle of gameplay.&lt;br /&gt;
&lt;br /&gt;
Threaded queries are ''asynchronous''.  That is, they are dispatched and you can only find the results through a callback.  Although the callback is guaranteed to fire eventually, it may not fire in any specific given timeframe.  Certain drivers may not support threading; if this is the case, an RTE will be thrown.  If the threader cannot start or the threader is currently disabled, SourceMod will transparently execute the query in the main thread as a fallback.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
All threaded operations use the same callback for result notification: &amp;lt;tt&amp;gt;SQLTCallback&amp;lt;/tt&amp;gt;.  The parameters are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;owner&amp;lt;/tt&amp;gt; - The &amp;quot;owner&amp;quot; of the operation.  For a query, this is a database.  For a database, this is a driver.  If the owner was not found or was invalidated, &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; is passed.&lt;br /&gt;
*&amp;lt;tt&amp;gt;hndl&amp;lt;/tt&amp;gt; - The object being requested.  The value is defined by the SQL operation.&lt;br /&gt;
*&amp;lt;tt&amp;gt;error&amp;lt;/tt&amp;gt; - An error string.&lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; - Custom data that can be passed via some SQL operations.&lt;br /&gt;
&lt;br /&gt;
The following operations can be done via threads:&lt;br /&gt;
*&amp;lt;b&amp;gt;Connection&amp;lt;/b&amp;gt;, via &amp;lt;tt&amp;gt;SQL_TConnect&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;b&amp;gt;Querying&amp;lt;/b&amp;gt;, via &amp;lt;tt&amp;gt;SQL_TQuery()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*''Note: prepared statements are not yet available for the threader.''&lt;br /&gt;
&lt;br /&gt;
It is always safe to chain one operation from another.&lt;br /&gt;
&lt;br /&gt;
===Connecting===&lt;br /&gt;
It is not necessary to make a threaded connection in order to make threaded queries.  However, creating a threaded connection will not pause the game server if a connection cannot be immediately established.  &lt;br /&gt;
&lt;br /&gt;
The following parameters are used for the threaded connection callback:&lt;br /&gt;
*&amp;lt;tt&amp;gt;owner&amp;lt;/tt&amp;gt;: A Handle to the driver, or &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; if it could not be found.&lt;br /&gt;
*&amp;lt;tt&amp;gt;hndl&amp;lt;/tt&amp;gt;: A Handle to the database, or &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; if the connection failed.&lt;br /&gt;
*&amp;lt;tt&amp;gt;error&amp;lt;/tt&amp;gt;: The error string, if any.&lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt;: Unused (0)&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:hDatabase = INVALID_HANDLE;&lt;br /&gt;
&lt;br /&gt;
StartSQL()&lt;br /&gt;
{&lt;br /&gt;
	SQL_TConnect(GotDatabase);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public GotDatabase(Handle:owner, Handle:hndl, const String:error[], any:data)&lt;br /&gt;
{&lt;br /&gt;
	if (hndl == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		LogError(&amp;quot;Database failure: %s&amp;quot;, error);&lt;br /&gt;
	} else {&lt;br /&gt;
		hDatabase = hndl;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Querying===&lt;br /&gt;
Threaded queries can be performed on any database Handle as long as the driver supports threading.  All query results for the first result set are retrieved while in the thread.  If your query returns more than one set of results (for example, &amp;lt;tt&amp;gt;CALL&amp;lt;/tt&amp;gt; on MySQL with certain functions), the behaviour of the threader is undefined at this time.  &amp;lt;b&amp;gt;Note that if you want to perform both threaded and non-threaded queries on the same connection, you MUST read the &amp;quot;Locking&amp;quot; section below.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Query operations use the following callback parameters:&lt;br /&gt;
*&amp;lt;tt&amp;gt;owner&amp;lt;/tt&amp;gt;: A Handle to the database used to query.  The Handle is not the same as the Handle originally passed; however, it will test positively with &amp;lt;tt&amp;gt;SQL_IsSameConnection&amp;lt;/tt&amp;gt;.  The Handle can be cloned but it cannot be closed (it is closed automatically).  It may be &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; in the case of a serious error (for example, the driver being unloaded).&lt;br /&gt;
*&amp;lt;tt&amp;gt;hndl&amp;lt;/tt&amp;gt;: A Handle to the query.  It can be cloned, but not closed (it is closed automatically).  It may be &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt; if there was an error.&lt;br /&gt;
*&amp;lt;tt&amp;gt;error&amp;lt;/tt&amp;gt;: Error string, if any.&lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt;: Optional user-defined data passed in through &amp;lt;tt&amp;gt;SQL_TQuery()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example, continuing from above:&lt;br /&gt;
&amp;lt;pawn&amp;gt;CheckSteamID(userid, const String:auth[])&lt;br /&gt;
{&lt;br /&gt;
	decl String:query[255];&lt;br /&gt;
	Format(query, sizeof(query), &amp;quot;SELECT userid FROM users WHERE steamid = '%s'&amp;quot;, auth);&lt;br /&gt;
	SQL_TQuery(hdatabase, T_CheckSteamID, query, userid)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public T_CheckSteamID(Handle:owner, Handle:hndl, const String:error[], any:data)&lt;br /&gt;
{&lt;br /&gt;
	new client;&lt;br /&gt;
&lt;br /&gt;
	/* Make sure the client didn't disconnect while the thread was running */&lt;br /&gt;
	if ((client = GetClientOfUserId(data)) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (hndl == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		LogError(&amp;quot;Query failed! %s&amp;quot;, error);&lt;br /&gt;
		KickClient(client, &amp;quot;Authorization failed&amp;quot;);&lt;br /&gt;
	} else if (!SQL_GetRowCount(hndl)) {&lt;br /&gt;
		KickClient(client, &amp;quot;You are not a member&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Locking==&lt;br /&gt;
It is possible to run both threaded and non-threaded queries on the same connection.  However, without the proper precautions, you could corrupt the network stream (even if it's local), corrupt memory, or otherwise cause a crash in the SQL driver.  To solve this, SourceMod has ''database locking''.  Locking is done via &amp;lt;tt&amp;gt;SQL_LockDatabase()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SQL_UnlockDatabase&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Whenever performing any of the following non-threaded operations on a database, it is absolutely necessary to enclose the entire operation with a lock:&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_Query()&amp;lt;/tt&amp;gt; (and &amp;lt;tt&amp;gt;SQL_FetchMoreResults&amp;lt;/tt&amp;gt; pairings)&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_FastQuery&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_PrepareQuery&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SQL_Bind*&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SQL_Execute&amp;lt;/tt&amp;gt; pairings&lt;br /&gt;
&lt;br /&gt;
The rule of thumb is: if your operation is going to use the database connection, it must be locked until the operation is fully completed.  &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;bool:GetByAge_Query(Handle:db, age)&lt;br /&gt;
{&lt;br /&gt;
	new String:query[100]&lt;br /&gt;
	Format(query, sizeof(query), &amp;quot;SELECT name FROM users WHERE age = %d&amp;quot;, age)&lt;br /&gt;
&lt;br /&gt;
	SQL_LockDatabase(db);&lt;br /&gt;
	new Handle:hQuery = SQL_Query(db, query)&lt;br /&gt;
	if (hQuery == INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		SQL_UnlockDatabase(db);&lt;br /&gt;
		return false&lt;br /&gt;
	}&lt;br /&gt;
	SQL_UnlockDatabase(db);&lt;br /&gt;
&lt;br /&gt;
	PrintResults(hQuery)&lt;br /&gt;
&lt;br /&gt;
	CloseHandle(hQuery)&lt;br /&gt;
&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it was only necessary to lock the query; SourceMod pre-fetches the result set, and thus the network queue is clean.&lt;br /&gt;
&lt;br /&gt;
===Warnings===&lt;br /&gt;
*&amp;lt;b&amp;gt;Never&amp;lt;/b&amp;gt; call &amp;lt;tt&amp;gt;SQL_LockDatabase&amp;lt;/tt&amp;gt; right before a threaded operation.  You will deadlock the server and have to terminate/kill it.  &lt;br /&gt;
*&amp;lt;b&amp;gt;Always pair every Lock with an Unlock.&amp;lt;/b&amp;gt;  Otherwise you risk a deadlock.&lt;br /&gt;
*If your query returns multiple result sets, for example, a procedure call on MySQL that returns results, you must lock both the query and the entire fetch operation.  SourceMod is only able to fetch one result set at a time, and all result sets must be cleared before a new query is started.&lt;br /&gt;
&lt;br /&gt;
==Priority==&lt;br /&gt;
Threaded SQL operations are placed in a simple priority queue.  The priority levels are &amp;lt;tt&amp;gt;High&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Medium&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;Low&amp;lt;/tt&amp;gt;.  Connections always have the highest priority.  &lt;br /&gt;
&lt;br /&gt;
Changing the priority can be useful if you have many queries with different purposes.  For example, a statistics plugin might execute 10 queries on death, and one query on join.  Because the statistics might rely on the join info, the join query might need to be high priority, while the death queries can be low priority.&lt;br /&gt;
&lt;br /&gt;
You should &amp;lt;b&amp;gt;never&amp;lt;/b&amp;gt; simply assign a high priority to all of your queries simply because you want them to get done fast.  Not only does it not work that way, but you may be inserting subtle problems into other plugins by being greedy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SQLite=&lt;br /&gt;
==Introduction==&lt;br /&gt;
[http://www.sqlite.org/ SQLite] is a fast local-file SQL database engine and SourceMod provides a DBI driver for it.  SQLite differs from MySQL, and thus MySQL queries may not work in SQLite.  The driver type for connections is &amp;lt;tt&amp;gt;sqlite&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Since SQLite is local only, most of the connection parameters can be ignored.  The only connection parameter required is &amp;lt;tt&amp;gt;database&amp;lt;/tt&amp;gt;, which specifies the file name of the database.  Databases are created on demand if they do not already exist, and are stored in &amp;lt;tt&amp;gt;addons/sourcemod/data/sqlite&amp;lt;/tt&amp;gt;.  An extension of &amp;quot;.sq3&amp;quot; is automatically appended to the file name.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can specify sub-folders in the database name.  For example, &amp;quot;cssdm/players&amp;quot; will become &amp;lt;tt&amp;gt;addons/sourcemod/data/sqlite/cssdm/players.sq3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SQLite supports the threading layer, and requires all of the same rules as the MySQL driver (including locks on shared connections).&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://www.sqlite.org SQLite Homepage]&lt;br /&gt;
*[http://sqlitebrowser.sourceforge.net/ SQLite Browser]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitch}}&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Building_SourceMod&amp;diff=8110</id>
		<title>Building SourceMod</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Building_SourceMod&amp;diff=8110"/>
		<updated>2011-06-18T15:07:23Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Compiling SourceMod is not difficult, but requires a number of prerequisites.  This article details the requirements and steps to being able to build working SourceMod binaries.  These directions may change any time and may be updated as SourceMod's build process improves.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' You cannot use MingW to build working SourceMod Windows binaries.  It is not ABI compatible with Visual C++ which is what Valve uses for the Source engine.  You can only use GCC to build Linux binaries.&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
*Microsoft Visual C++ 2008 (Express or higher) is supported and used for official builds.&lt;br /&gt;
*Microsoft Visual C++ 2005 (Express or higher) is unsupported.&lt;br /&gt;
*Microsoft Visual C++ 2003 7.1 or higher may not build out-of-box, but can build compatible binaries.&lt;br /&gt;
*Microsoft Visual C++ 2003 7.0 or lower '''cannot''' be used.&lt;br /&gt;
&lt;br /&gt;
If you are installing Visual C++ 2005 Express, it may not come with Microsoft's Platform SDK installed.  If this is the case, you must manually install the Platform SDK.  You can find directions on how to do this and test your setup [http://www.microsoft.com/express/2005/platformsdk/default.aspx here].  Visual C++ 2008 &amp;quot;streamlines&amp;quot; the Platform SDK installation according to Microsoft.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
For Linux, SourceMod requires the GNU C/C++ Compiler (from GCC):&lt;br /&gt;
*Version 4.1 is used for official binaries and is guaranteed to build.&lt;br /&gt;
*Versions 3.4 through 4.2 are guaranteed to be binary (ABI) compatible, although SourceMod may not necessarily build out-of-box against them.&lt;br /&gt;
*Any GCC version below 3.4 '''cannot''' be used.&lt;br /&gt;
&lt;br /&gt;
==CPU==&lt;br /&gt;
SourceMod is strictly a 32-bit x86 (IA32) product.  You should not try to force a compiler to build 64-bit binaries of SourceMod.&lt;br /&gt;
&lt;br /&gt;
Your CPU and its compiler must support SSE in order to build SourceMod.  To build without needing or having a dependency against SSE, please see the [[Compiling SourceMod#Removing SSE|Removing SSE]] section near the bottom.&lt;br /&gt;
&lt;br /&gt;
Approximate compiling times for SourceMod's Core are roughly:&lt;br /&gt;
*Windows, Core 2 Quad E6600: 30 seconds (using /MP)&lt;br /&gt;
*Windows, Core 2 Duo E6600: 75 seconds&lt;br /&gt;
*Windows, Centrino 1.8GHz: 5 minutes&lt;br /&gt;
*Linux, Core 2 Duo E6600: &amp;lt;= 1 minute&lt;br /&gt;
*Linux, P3 Dual 500MHz: &amp;gt;= 7 minutes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
This section describes how to set up your computer for compiling.&lt;br /&gt;
&lt;br /&gt;
==Getting the Files==&lt;br /&gt;
This section describes which files you must obtain and how to obtain them.  Do not worry about where to place them yet -- that will be discussed on a per-platform basis.  You can download the files anywhere you'd like.&lt;br /&gt;
&lt;br /&gt;
The recommended method of getting the required files is via [http://mercurial.selenic.com/ Mercurial].  We have our own [[Mercurial_Tutorial]] if you prefer that method.  Although you do not need both HL2SDK versions (unless you wish to build binaries against both), you do need both Metamod:Source versions.  Extensions don't necessarily require Metamod:Source (or even the Source Engine) but its template library is used extensively in SourceMod.&lt;br /&gt;
&lt;br /&gt;
*SourceMod. For full download options, see the [http://www.sourcemod.net/downloads.php SourceMod Downloads] page.  Obviously, you must download the source code and not a binary package.&lt;br /&gt;
*HL2SDK Original.  As of this writing (Sep 2008) this engine is used for most Source games, except for TF2, GMod10, and DoD:S. Repository: [http://hg.alliedmods.net/hl2sdk hl2sdk]&lt;br /&gt;
*HL2SDK OrangeBox.  As of this writing (Sep 2008) this engine is used TF2, GMod10, and DoD:S. Repository: [http://hg.alliedmods.net/hl2sdk-ob hl2sdk-ob]&lt;br /&gt;
*HL2SDK Left4Dead. This engine is used for L4D. Repository: [http://hg.alliedmods.net/hl2sdk-l4d hl2sdk-l4d]&lt;br /&gt;
*Metamod:Source Source Code. Visit [http://www.metamodsource.net/?go=downloads Metamod:Source downloads]. Right now SourceMod builds against Metamod:Source 1.7.&lt;br /&gt;
&lt;br /&gt;
'''Note''' that when we refer to &amp;quot;Metamod:Source&amp;quot; in this article, we are referring to its source code tree, not a binary package.&lt;br /&gt;
&lt;br /&gt;
If you intend to compile the MySQL extension, you must also download MySQL 5.0.  You can use any version.  For simplicity, here are the versions we use:&lt;br /&gt;
*Linux: We use the 5.0.45 binary from the &amp;quot;[http://dev.mysql.com/downloads/mysql/5.0.html#linux Linux (non RPM packages)]&amp;quot; for &amp;quot;Linux (x86).&amp;quot;  You can also use [http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.45-linux-i686-glibc23.tar.gz/from/pick this direct link] (may not be valid in the future).&lt;br /&gt;
*Windows: Due to a MySQL build change we use 5.0.24a which is an older download.  The file name was &amp;quot;mysql-5.0.24a-win32.zip,&amp;quot; if you can't find it you can use this [http://www.bailopan.net/mysql-5.0.24a-win32.zip direct link] (may not be valid in the future).&lt;br /&gt;
&lt;br /&gt;
You can remove all folders from the distribution except for the &amp;quot;lib&amp;quot; and &amp;quot;include&amp;quot; folders which comprise the MySQL SDK.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
As of this writing, SourceMod's Makefiles are hardcoded to use a binary called &amp;quot;gcc-4.1&amp;quot;  You can override this, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;make CPP=gcc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise, you can also just create a symlink:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you must use &amp;lt;tt&amp;gt;gcc&amp;lt;/tt&amp;gt; and not &amp;lt;tt&amp;gt;g++&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SourceMod's Makefiles have strict directory organizational rules.  You must have a top-level folder.  For this document, we'll assume it is called &amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt;, though it can be named anything.  The layout of &amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt; must be:&lt;br /&gt;
*&amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt;/&lt;br /&gt;
**&amp;lt;tt&amp;gt;hl2sdk&amp;lt;/tt&amp;gt; - symlink or folder containing the HL2SDK&lt;br /&gt;
**&amp;lt;tt&amp;gt;hl2sdk-ob&amp;lt;/tt&amp;gt; - symlink or folder containing the HL2SDK for Orange Box/TF&lt;br /&gt;
**&amp;lt;tt&amp;gt;mmsource-1.7&amp;lt;/tt&amp;gt; - symlink or folder containing any Metamod:Source version 1.7 or higher.&lt;br /&gt;
**&amp;lt;tt&amp;gt;sourcemod-central&amp;lt;/tt&amp;gt; - folder containing SourceMod's source code tree.  This can be named anything, as long as it's a valid SourceMod tree (like [http://hg.alliedmods.net/sourcemod-central sourcemod-central]).  You can also use [http://hg.alliedmods.net/sourcemod-1.1 sourcemod-1.1].&lt;br /&gt;
**&amp;lt;tt&amp;gt;mysql-5.0&amp;lt;/tt&amp;gt; - symlink or folder containing a MySQL 5.0 distribution&lt;br /&gt;
&lt;br /&gt;
If you are using a 64-bit version of Linux, you may need to install extra packages to be able to compile SourceMod.  On Debian-based distros, these are typically:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#prerequisites&lt;br /&gt;
#apt-get install g++-4.1 gcc-4.1 make subversion&lt;br /&gt;
#apt-get install libz libz-dev&lt;br /&gt;
#only needed if you want to use the build tool&lt;br /&gt;
#apt-get install mono mono-devel&lt;br /&gt;
#32-bit support&lt;br /&gt;
apt-get install ia32-libs&lt;br /&gt;
apt-get install lib32z1 lib32z1-dev&lt;br /&gt;
apt-get install libc6-dev-i386 libc6-i386&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
On Windows we don't require a particular directory layout.  Instead, environment variables are used.  The directions below apply to Windows XP, and are assumed to be similar for other versions of Windows.&lt;br /&gt;
*Open the Control Panel (for example, via Start -&amp;gt; Settings).&lt;br /&gt;
*Open the System control.  If you don't see it, you may need to switch to &amp;quot;Classic view&amp;quot; (either via the left-hand pane or by going to Tools -&amp;gt; Folder Options).&lt;br /&gt;
*Click the Advanced tab.&lt;br /&gt;
*Click the Environment Variables button.&lt;br /&gt;
&lt;br /&gt;
You can add your environment variables to either your User settings or your System settings.  Create a new variable for each item in the list below.  The item names are in &amp;lt;tt&amp;gt;fixed-width font&amp;lt;/tt&amp;gt; and their value descriptions follow.&lt;br /&gt;
*&amp;lt;tt&amp;gt;MMSOURCE17&amp;lt;/tt&amp;gt; - Path to Metamod:Source 1.7+&lt;br /&gt;
*&amp;lt;tt&amp;gt;MMSOURCE18&amp;lt;/tt&amp;gt; - Path to Metamod:Source 1.8+&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDK&amp;lt;/tt&amp;gt; - Path to HL2SDK Ep1/Original&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKOB&amp;lt;/tt&amp;gt; - Path to HL2SDK Ep2/OrangeBox for mods&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKOBVALVE&amp;lt;/tt&amp;gt; - Path to HL2SDK Ep2/OrangeBox for Valve games (TF2 and DoD:S)&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKL4D&amp;lt;/tt&amp;gt; - Path to HL2SDK L4D1&lt;br /&gt;
*&amp;lt;tt&amp;gt;HL2SDKL4D2&amp;lt;/tt&amp;gt; - Path to HL2SDK L4D2&lt;br /&gt;
&lt;br /&gt;
=Building=&lt;br /&gt;
SourceMod has two types of binaries: those with an engine/MM:S dependence, and those without (&amp;quot;normal&amp;quot; binaries).  Normal binaries have two modes:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Release&amp;lt;/tt&amp;gt; - Optimized binary for release.&lt;br /&gt;
*&amp;lt;tt&amp;gt;Debug&amp;lt;/tt&amp;gt; - Unoptimized binary with debugging checks.&lt;br /&gt;
&lt;br /&gt;
Engine/MM:S dependent binaries have three build modes, each paired with either Release or Debug, meaning there are six build options total.  They are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;Original&amp;lt;/tt&amp;gt; - Building against MM:S 1.4 API with HL2SDK&lt;br /&gt;
*&amp;lt;tt&amp;gt;Episode2&amp;lt;/tt&amp;gt; - Building against MM:S 1.6 API with HL2SDK-OB or higher&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
For both Normal and Engine/MM:S dependent binaries, the object files and the final binary are placed in a folder called &amp;lt;tt&amp;gt;Release&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;Debug&amp;lt;/tt&amp;gt; (in the same level as the Makefile) depending on which building mechanism you chose.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Our Makefiles are not set up to detect changes in header files.  If you change a header file, you must clean your build.&lt;br /&gt;
&lt;br /&gt;
===Normal Binaries===&lt;br /&gt;
For normal binaries, you can build simply with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can clean stale object files with:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or build debug builds with:&lt;br /&gt;
&amp;lt;pre&amp;gt;make DEBUG=true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dependent Binaries===&lt;br /&gt;
Binaries that have an Engine or MM:S dependency require one extra parameter, &amp;lt;tt&amp;gt;ENGINE&amp;lt;/tt&amp;gt;.  It must be either &amp;lt;tt&amp;gt;orangebox&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;original&amp;lt;/tt&amp;gt;.  For example, to build a TF-compatible binary in debug mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make ENGINE=orangebox DEBUG=true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dependent binaries are dropped into one of the following folders:&lt;br /&gt;
*Debug.original&lt;br /&gt;
*Debug.orangebox&lt;br /&gt;
*Release.original&lt;br /&gt;
*Release.orangebox&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
Windows project files end with &amp;lt;tt&amp;gt;.vcproj&amp;lt;/tt&amp;gt; and are found in an &amp;lt;tt&amp;gt;msvc8&amp;lt;/tt&amp;gt; folder that resides inside each binary's main source folder.  For example, Core is located in &amp;lt;tt&amp;gt;core/msvc8/sourcemod_mm.vcproj&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Once the file is opened, you can select which build to use by going to Build -&amp;gt; Configuration Manager.  Normal binaries have simply &amp;quot;Debug&amp;quot; and &amp;quot;Release.&amp;quot;  Dependent binaries have the following builds:&lt;br /&gt;
*Debug - Old Metamod&lt;br /&gt;
*Debug - Episode 2 &lt;br /&gt;
*Release - Old Metamod&lt;br /&gt;
*Release - Episode 2 &lt;br /&gt;
&lt;br /&gt;
'''Note''' that dependent binaries will have plain &amp;quot;Debug&amp;quot; and &amp;quot;Release&amp;quot; builds.  These should not be used as they are not configured.&lt;br /&gt;
&lt;br /&gt;
Once you have selected a configuration, you can compile by going to Build -&amp;gt; Build Solution.  The binaries and object files will be written to a folder inside &amp;lt;tt&amp;gt;msvc8&amp;lt;/tt&amp;gt; named after the full configuration name.  For example, using &amp;quot;Debug - Old Metamod&amp;quot; with the &amp;quot;sdktools&amp;quot; extension will result in the binary: &amp;lt;tt&amp;gt;extensions/sdktools/msvc8/Debug - Old Metamod/sdktools.ext.dll&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Visual Studio detects changes to header files intelligently.  It is usually not necessary to rebuild a solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Binary Organization=&lt;br /&gt;
Although SourceMod has a somewhat unified building mechanism, each of the binaries has a different purpose.  They can be separated into the following classes:&lt;br /&gt;
&lt;br /&gt;
*Core-Related: Binaries which are required or loaded intrinsically by Core.&lt;br /&gt;
*Extensions: Binaries which are loaded via the extension mechanism.&lt;br /&gt;
*External: Binaries which are standalone or unrelated to SourceMod's live operation (for example, the compiler).&lt;br /&gt;
&lt;br /&gt;
This article is only concerned with the first two types.  &lt;br /&gt;
&lt;br /&gt;
==Core-Related Binaries==&lt;br /&gt;
Binaries related to Core are spread throughout the source code tree.  They are always placed in &amp;lt;tt&amp;gt;sourcemod/bin&amp;lt;/tt&amp;gt; for packaging.  The projects files related to Core are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;loader&amp;lt;/tt&amp;gt; - This is a very small wrapper binary responsible for detecting the MM:S version and game engine, and deciding which SourceMod version to load.  The output binary is &amp;lt;tt&amp;gt;sourcemod_mm_i486.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;sourcemod_mm.dll&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; - This is Core itself, and is a dependent binary.  It has three outputs:&lt;br /&gt;
**Original: &amp;lt;tt&amp;gt;sourcemod.1.ep1.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sourcemod.1.ep1.dll&amp;lt;/tt&amp;gt;&lt;br /&gt;
**Episode 1: &amp;lt;tt&amp;gt;sourcemod.1.ep1.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sourcemod.2.ep1.dll&amp;lt;/tt&amp;gt; (unsupported, not packaged)&lt;br /&gt;
**Episode 2: &amp;lt;tt&amp;gt;sourcemod.1.ep1.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sourcemod.2.ep2.dll&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;sourcepawn/jit/x86&amp;lt;/tt&amp;gt; - This is the SourcePawn JIT for generating IA32/x86 instructions from &amp;lt;tt&amp;gt;.smx&amp;lt;/tt&amp;gt; files.  Currently the source code for this is not made available.  It is built as &amp;lt;tt&amp;gt;sourcepawn.jit.x86.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sourcepawn.jit.x86.dll&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is technically not necessary to use the loader.  It is provided as a convenience so users do not have to perform extra steps while installing SourceMod.  However, it is highly recommend that you do use it in order to maintain similarity with the default SourceMod package.&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
Extensions are found in the &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt; folder of the source tree.  SDKTools, Cstrike, and the upcoming TF extension are engine/MM:S dependent (and the rest are generally not).&lt;br /&gt;
&lt;br /&gt;
Extensions always are named &amp;lt;tt&amp;gt;name.ext.so&amp;lt;/tt&amp;gt; or &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 unique identifier.  This is true even of dependent binaries.  &lt;br /&gt;
&lt;br /&gt;
When loading extensions, SourceMod looks in two separate folders.  First, it checks the ''dependent extension folder'', which is &amp;lt;tt&amp;gt;extensions/auto.x.y&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is the MM:S version (1 for 1.4, 2 for 1.6) and &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; is the Engine version (1 for Original/Ep1, 2 for Ep2/OrangeBox).  If no matching extension is found there, it looks in &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, the SDKTools binary on Counter-Strike would be loaded from &amp;lt;tt&amp;gt;extensions/auto.1.ep1&amp;lt;/tt&amp;gt;, but the GeoIP binary (which is not dependent) would be loaded from &amp;lt;tt&amp;gt;extensions&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Removing SSE=&lt;br /&gt;
SourceMod binaries are built against SSE by default.  SSE is an important set of optimizations, that, according to Valve's hardware survey, are supported on 99.6% percent of respondents' computers.  If you are in this 0.4% which does not have SSE support, you should consider buying a newer processor.  Only early Pentium 3-grade processors did not have SSE support (for example, the very early Durons), and it is likely your Source server will not perform adequately to support more than few players.&lt;br /&gt;
&lt;br /&gt;
Nonetheless, SourceMod's binaries can all be recompiled to remove its SSE dependence.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
Edit the Makefile of the binary you are trying to compile.  Remove all instances of these flags.  They can simply be erased, there is no need to replace them with anything.&lt;br /&gt;
*&amp;lt;tt&amp;gt;-msse&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;-mfpmath=sse&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to clean the build after changing the Makefile.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
Load the project file into Visual Studio.  Go to Project -&amp;gt; Properties.  Expand &amp;quot;Configuration Properties,&amp;quot; and then &amp;quot;C/C++&amp;quot; under it.  Select &amp;quot;Code Generation.&amp;quot;  Change the setting &amp;quot;Enable Enhanced Instruction Set&amp;quot; to &amp;quot;Not Set.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' You must change this setting '''for each build configuration''' that you wish to use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;br /&gt;
[[Category:SourceMod Development]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7866</id>
		<title>CTFPlayer Offset List (Team Fortress 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7866"/>
		<updated>2010-10-07T10:04:31Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Linux&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Windows offsets are ''usually'' 1 less.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 7 October 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00DCCF20&lt;br /&gt;
// from &amp;quot;server.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CTFPlayer::~CTFPlayer()&lt;br /&gt;
1	CTFPlayer::~CTFPlayer()&lt;br /&gt;
2	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
3	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
4	CBaseEntity::GetCollideable(void)&lt;br /&gt;
5	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
6	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
7	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
8	CBaseEntity::GetModelName(void)const&lt;br /&gt;
9	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
10	CTFPlayer::GetServerClass(void)&lt;br /&gt;
11	CTFPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
12	CTFPlayer::GetDataDescMap(void)&lt;br /&gt;
13	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
15	CBaseEntity::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
16	CTFPlayer::ShouldCollide(int,int)const&lt;br /&gt;
17	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
18	CTFPlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
19	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
20	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
21	CBasePlayer::GetTracerType(void)&lt;br /&gt;
22	CTFPlayer::Spawn(void)&lt;br /&gt;
23	CTFPlayer::Precache(void)&lt;br /&gt;
24	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
25	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
26	CBaseEntity::PostClientActive(void)&lt;br /&gt;
27	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
30	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
31	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
32	CBasePlayer::Activate(void)&lt;br /&gt;
33	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
34	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
35	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
36	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
37	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
38	CTFPlayer::DrawDebugTextOverlays(void)&lt;br /&gt;
39	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
40	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
41	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
42	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
43	CBasePlayer::OnRestore(void)&lt;br /&gt;
44	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
45	CBaseEntity::MoveDone(void)&lt;br /&gt;
46	CBaseEntity::Think(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
48	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
49	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
50	CTFPlayer::GetResponseSystem(void)&lt;br /&gt;
51	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
52	CBasePlayer::Classify(void)&lt;br /&gt;
53	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
55	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
56	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
57	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
58	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
59	CTFPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
60	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
61	CTFPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
62	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
63	CTFPlayer::TakeHealth(float,int)&lt;br /&gt;
64	CBaseEntity::IsAlive(void)&lt;br /&gt;
65	CTFPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CTFPlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
67	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
68	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
69	CBaseEntity::IsNPC(void)const&lt;br /&gt;
70	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
71	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
72	CBaseEntity::GetDelay(void)&lt;br /&gt;
73	CBaseEntity::IsMoving(void)&lt;br /&gt;
74	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
75	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
76	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
77	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
78	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
79	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
80	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
81	CBaseEntity::IsTemplate(void)&lt;br /&gt;
82	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
84	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
85	CBaseEntity::IsWearable(void)const&lt;br /&gt;
86	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
87	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
88	CBaseEntity::IsViewable(void)&lt;br /&gt;
89	CTFPlayer::ChangeTeam(int)&lt;br /&gt;
90	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
91	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
92	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)&lt;br /&gt;
94	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
95	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
96	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
97	CTFPlayer::Touch(CBaseEntity *)&lt;br /&gt;
98	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
101	CBaseEntity::EndBlocked(void)&lt;br /&gt;
102	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
103	CTFPlayer::UpdateOnRemove(void)&lt;br /&gt;
104	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
105	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
106	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
107	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
108	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
109	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
110	CBaseEntity::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
111	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
112	CBaseEntity::ModifyFireBulletsDamage(CTakeDamageInfo *)&lt;br /&gt;
113	CBaseEntity::Respawn(void)&lt;br /&gt;
114	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
115	CTFPlayer::GetMaxHealth(void)const&lt;br /&gt;
116	CTFPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
117	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
118	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
121	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
122	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
123	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
124	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
125	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
126	CBaseEntity::GetDamage(void)&lt;br /&gt;
127	CBaseEntity::SetDamage(float)&lt;br /&gt;
128	CBasePlayer::EyePosition(void)&lt;br /&gt;
129	CBasePlayer::EyeAngles(void)&lt;br /&gt;
130	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
131	CBaseEntity::EarPosition(void)&lt;br /&gt;
132	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
133	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
134	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
135	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
136	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
137	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
138	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
139	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
140	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
141	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
142	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
143	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
144	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
145	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
146	CBaseEntity::Splash(void)&lt;br /&gt;
147	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
148	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
149	CTFPlayer::IsDeflectable(void)&lt;br /&gt;
150	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
151	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
152	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
153	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
154	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
155	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
156	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
157	CBasePlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
158	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
159	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
160	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
161	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
162	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
163	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
164	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
165	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
166	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
167	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
168	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
169	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
182	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
183	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
184	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
185	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
186	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
187	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
188	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
189	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
190	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
191	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
192	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
193	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
194	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
195	CBaseAnimating::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
196	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
197	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
198	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
199	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
200	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
201	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
202	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
203	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
204	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
205	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
206	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
207	CBaseAnimating::Extinguish(void)&lt;br /&gt;
208	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
209	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
210	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
211	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
212	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
213	CTFPlayer::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
214	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
215	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
216	CTFPlayer::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
217	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
218	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
219	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
220	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
221	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
222	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
223	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
224	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
225	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
226	CBasePlayer::BodyAngles(void)&lt;br /&gt;
227	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
230	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
231	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
232	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
234	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
235	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
237	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
238	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
240	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
241	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
242	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
243	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
244	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
245	CTFPlayer::GiveAmmo(int,int,bool)&lt;br /&gt;
246	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
247	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
248	CTFPlayer::Weapon_FrameUpdate(void)&lt;br /&gt;
249	CTFPlayer::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
250	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
251	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
252	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
253	CTFPlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
254	CTFPlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
255	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
256	CTFPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
257	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
258	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
259	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
260	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
261	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
262	CTFPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
264	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
265	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
266	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
269	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
270	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
271	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
272	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
273	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
274	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
275	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
276	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
277	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
278	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
279	CBasePlayer::Event_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
280	CBaseCombatCharacter::Event_Dying(void)&lt;br /&gt;
281	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
282	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
283	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
284	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
285	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
286	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
287	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
288	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
289	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
290	CBasePlayer::GetVehicle(void)&lt;br /&gt;
291	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
292	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
293	CTFPlayer::RemoveAllWeapons(void)&lt;br /&gt;
294	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
295	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
296	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
297	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
298	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
299	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
300	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
301	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
302	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
303	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
304	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
305	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
306	CTFPlayer::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
307	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
308	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
309	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
310	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
311	CTFPlayer::CreateViewModel(int)&lt;br /&gt;
312	CBasePlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
313	CTFPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
314	CBasePlayer::SharedSpawn(void)&lt;br /&gt;
315	CTFPlayer::ForceRespawn(void)&lt;br /&gt;
316	CTFPlayer::InitialSpawn(void)&lt;br /&gt;
317	CBasePlayer::InitHUD(void)&lt;br /&gt;
318	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
319	CTFPlayer::PlayerDeathThink(void)&lt;br /&gt;
320	CBasePlayer::Jump(void)&lt;br /&gt;
321	CBasePlayer::Duck(void)&lt;br /&gt;
322	CTFPlayer::PreThink(void)&lt;br /&gt;
323	CTFPlayer::PostThink(void)&lt;br /&gt;
324	CTFPlayer::DamageEffect(float,int)&lt;br /&gt;
325	CTFPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
326	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
327	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
328	CBasePlayer::GetPlayerMins(void)const&lt;br /&gt;
329	CBasePlayer::GetPlayerMaxs(void)const&lt;br /&gt;
330	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
331	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
332	CTFPlayer::RemoveAllItems(bool)&lt;br /&gt;
333	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
334	CTFPlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
336	CTFPlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
337	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
338	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
339	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
340	CBasePlayer::ExitLadder(void)&lt;br /&gt;
341	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
342	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
343	CTFPlayer::FlashlightIsOn(void)&lt;br /&gt;
344	CTFPlayer::FlashlightTurnOn(void)&lt;br /&gt;
345	CTFPlayer::FlashlightTurnOff(void)&lt;br /&gt;
346	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
347	CBasePlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
348	CBasePlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
349	CTFPlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
350	CTFPlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
351	CTFPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
352	CTFPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
353	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
354	CTFPlayer::CheatImpulseCommands(int)&lt;br /&gt;
355	CTFPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
356	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
357	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
358	CTFPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
359	CTFPlayer::SetObserverMode(int)&lt;br /&gt;
360	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
361	CTFPlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
362	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
363	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
364	CTFPlayer::FindNextObserverTarget(bool)&lt;br /&gt;
365	CTFPlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
366	CTFPlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
367	CTFPlayer::CheckObserverSettings(void)&lt;br /&gt;
368	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
369	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
370	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
371	CTFPlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
372	CTFPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
373	CBasePlayer::StartReplayMode(float,float,int)&lt;br /&gt;
374	CBasePlayer::StopReplayMode(void)&lt;br /&gt;
375	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
376	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
377	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
378	CTFPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
379	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
380	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
381	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
382	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
383	CTFPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
384	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
385	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
386	CTFPlayer::ItemPostFrame(void)&lt;br /&gt;
387	CBasePlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
388	CBasePlayer::CheckTrainUpdate(void)&lt;br /&gt;
389	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
390	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
391	CTFPlayer::PlayerUse(void)&lt;br /&gt;
392	CBasePlayer::PlayUseDenySound(void)&lt;br /&gt;
393	CBasePlayer::FindUseEntity(void)&lt;br /&gt;
394	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
395	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
396	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
397	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
398	CBasePlayer::UpdateGeigerCounter(void)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
400	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
401	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
402	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
403	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
404	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
405	CTFPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
406	CTFPlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
407	CTFPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
408	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
409	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
410	CBasePlayer::CheckChatText(char *,int)&lt;br /&gt;
411	CTFPlayer::CreateRagdollEntity(void)&lt;br /&gt;
412	CTFPlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
413	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
414	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
415	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
416	CBasePlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
417	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
418	CBasePlayer::Hints(void)&lt;br /&gt;
419	CTFPlayer::IsReadyToPlay(void)&lt;br /&gt;
420	CTFPlayer::IsReadyToSpawn(void)&lt;br /&gt;
421	CTFPlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
422	CTFPlayer::ResetPerRoundStats(void)&lt;br /&gt;
423	CTFPlayer::ResetScores(void)&lt;br /&gt;
424	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
425	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
426	CBasePlayer::GetPlayerMaxSpeed(void)&lt;br /&gt;
427	CTFPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
428	CBasePlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
429	CBasePlayer::IsBot(void)const&lt;br /&gt;
430	CBasePlayer::IsBotOfType(int)const&lt;br /&gt;
431	CBasePlayer::GetBotType(void)const&lt;br /&gt;
432	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
433	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
434	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
435	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
436	CBasePlayer::HasHaptics(void)&lt;br /&gt;
437	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
438	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
439	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
440	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
441	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
442	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
443	CTFPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
444	CTFPlayer::CanBeAutobalanced(void)&lt;br /&gt;
445	CTFPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
446	CTFPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
447	CTFPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
448	CTFPlayer::OnAchievementEarned(int)&lt;br /&gt;
449	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
450	CTFPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
451	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
452	CTFPlayer::DetermineAssistForKill(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
453	CTFPlayer::SetNumberofDominations(int)&lt;br /&gt;
454	CTFPlayer::GetNumberofDominations(void)&lt;br /&gt;
455	CTFPlayer::ShouldGib(CTakeDamageInfo  const&amp;amp;,bool)&lt;br /&gt;
456	CTFPlayer::GetAttributeManager(void)&lt;br /&gt;
457	CTFPlayer::GetAttributeContainer(void)&lt;br /&gt;
458	CTFPlayer::GetAttributeOwner(void)&lt;br /&gt;
459	CTFPlayer::ReapplyProvision(void)&lt;br /&gt;
460	CTFPlayer::InventoryUpdated(CPlayerInventory *,EItemRequestResult)&lt;br /&gt;
461	CTFPlayer::SOCacheUnsubscribed(CSteamID  const&amp;amp;)&lt;br /&gt;
462	CTFPlayer::GiveNamedItem(char  const*,int,CScriptCreatedItem *,bool)&lt;br /&gt;
463	CTFPlayer::InitClass(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7804</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7804"/>
		<updated>2010-08-29T17:05:54Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''140''' - The Wrangler&amp;lt;br&amp;gt;&lt;br /&gt;
'''141''' - The Frontier Justice&amp;lt;br&amp;gt;&lt;br /&gt;
'''142''' - The Gunslinger&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''155''' - The Southern Hospitality&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
'''169''' - Golden Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''171''' - Tribalman's Shiv&amp;lt;br&amp;gt;&lt;br /&gt;
'''172''' - Scotsman's Skullcutter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''143''' - Earbuds&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''174''' - Whoopee Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''175''' - Whiskered Gentleman&amp;lt;br&amp;gt;&lt;br /&gt;
'''177''' - Ze Goggles&amp;lt;br&amp;gt;&lt;br /&gt;
'''178''' - Safe'n'Sound&amp;lt;br&amp;gt;&lt;br /&gt;
'''179''' - Tippler's Tricorne&amp;lt;br&amp;gt;&lt;br /&gt;
'''180''' - Frenchman's Beret&amp;lt;br&amp;gt;&lt;br /&gt;
'''181''' - Bloke's Bucket Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''182''' - Vintage Merryweather&amp;lt;br&amp;gt;&lt;br /&gt;
'''183''' - Sergeant's Drill Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''184''' - Gentleman's Gatsby&amp;lt;br&amp;gt;&lt;br /&gt;
'''185''' - Heavy Duty Rag&amp;lt;br&amp;gt;&lt;br /&gt;
'''189''' - Alien Swarm Parasite&amp;lt;br&amp;gt;&lt;br /&gt;
'''240''' - Lumbricus Lid&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7785</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7785"/>
		<updated>2010-07-29T08:48:20Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''140''' - The Wrangler&amp;lt;br&amp;gt;&lt;br /&gt;
'''141''' - The Frontier Justice&amp;lt;br&amp;gt;&lt;br /&gt;
'''142''' - The Gunslinger&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''155''' - The Southern Hospitality&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
'''169''' - Golden Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''171''' - Tribalman's Shiv&amp;lt;br&amp;gt;&lt;br /&gt;
'''172''' - Scotsman's Skullcutter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''143''' - Earbuds&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''174''' - Whoopee Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''175''' - Whiskered Gentleman&amp;lt;br&amp;gt;&lt;br /&gt;
'''177''' - Ze Goggles&amp;lt;br&amp;gt;&lt;br /&gt;
'''178''' - Safe'n'Sound&amp;lt;br&amp;gt;&lt;br /&gt;
'''179''' - Tippler's Tricorne&amp;lt;br&amp;gt;&lt;br /&gt;
'''180''' - Frenchman's Beret&amp;lt;br&amp;gt;&lt;br /&gt;
'''181''' - Bloke's Bucket Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''182''' - Vintage Merryweather&amp;lt;br&amp;gt;&lt;br /&gt;
'''183''' - Sergeant's Drill Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''184''' - Gentleman's Gatsby&amp;lt;br&amp;gt;&lt;br /&gt;
'''185''' - Heavy Duty Rag&amp;lt;br&amp;gt;&lt;br /&gt;
'''189''' - Alien Swarm Parasite&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7765</id>
		<title>CTFPlayer Offset List (Team Fortress 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7765"/>
		<updated>2010-07-09T14:45:33Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* The List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Linux&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Windows offsets are ''usually'' 1 less.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 9 July 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00D85580&lt;br /&gt;
// from &amp;quot;server.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CTFPlayer::~CTFPlayer()&lt;br /&gt;
1	CTFPlayer::~CTFPlayer()&lt;br /&gt;
2	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
3	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
4	CBaseEntity::GetCollideable(void)&lt;br /&gt;
5	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
6	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
7	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
8	CBaseEntity::GetModelName(void)const&lt;br /&gt;
9	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
10	CTFPlayer::GetServerClass(void)&lt;br /&gt;
11	CTFPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
12	CTFPlayer::GetDataDescMap(void)&lt;br /&gt;
13	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
15	CBaseEntity::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
16	CTFPlayer::ShouldCollide(int,int)const&lt;br /&gt;
17	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
18	CTFPlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
19	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
20	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
21	CBasePlayer::GetTracerType(void)&lt;br /&gt;
22	CTFPlayer::Spawn(void)&lt;br /&gt;
23	CTFPlayer::Precache(void)&lt;br /&gt;
24	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
25	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
26	CBaseEntity::PostClientActive(void)&lt;br /&gt;
27	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
30	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
31	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
32	CBasePlayer::Activate(void)&lt;br /&gt;
33	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
34	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
35	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
36	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
37	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
38	CTFPlayer::DrawDebugTextOverlays(void)&lt;br /&gt;
39	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
40	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
41	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
42	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
43	CBasePlayer::OnRestore(void)&lt;br /&gt;
44	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
45	CBaseEntity::MoveDone(void)&lt;br /&gt;
46	CBaseEntity::Think(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
48	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
49	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
50	CTFPlayer::GetResponseSystem(void)&lt;br /&gt;
51	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
52	CBasePlayer::Classify(void)&lt;br /&gt;
53	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
55	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
56	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
57	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
58	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
59	CTFPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
60	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
61	CTFPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
62	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
63	CTFPlayer::TakeHealth(float,int)&lt;br /&gt;
64	CBaseEntity::IsAlive(void)&lt;br /&gt;
65	CTFPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CTFPlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
67	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
68	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
69	CBaseEntity::IsNPC(void)const&lt;br /&gt;
70	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
71	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
72	CBaseEntity::GetDelay(void)&lt;br /&gt;
73	CBaseEntity::IsMoving(void)&lt;br /&gt;
74	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
75	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
76	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
77	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
78	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
79	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
80	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
81	CBaseEntity::IsTemplate(void)&lt;br /&gt;
82	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
84	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
85	CBaseEntity::IsWearable(void)const&lt;br /&gt;
86	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
87	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
88	CBaseEntity::IsViewable(void)&lt;br /&gt;
89	CTFPlayer::ChangeTeam(int)&lt;br /&gt;
90	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
91	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
92	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)&lt;br /&gt;
94	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
95	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
96	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
97	CTFPlayer::Touch(CBaseEntity *)&lt;br /&gt;
98	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
101	CBaseEntity::EndBlocked(void)&lt;br /&gt;
102	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
103	CTFPlayer::UpdateOnRemove(void)&lt;br /&gt;
104	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
105	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
106	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
107	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
108	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
109	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
110	CBaseEntity::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
111	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
112	CBaseEntity::ModifyFireBulletsDamage(CTakeDamageInfo *)&lt;br /&gt;
113	CBaseEntity::Respawn(void)&lt;br /&gt;
114	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
115	CTFPlayer::GetMaxHealth(void)const&lt;br /&gt;
116	CTFPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
117	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
118	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
121	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
122	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
123	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
124	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
125	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
126	CBaseEntity::GetDamage(void)&lt;br /&gt;
127	CBaseEntity::SetDamage(float)&lt;br /&gt;
128	CBasePlayer::EyePosition(void)&lt;br /&gt;
129	CBasePlayer::EyeAngles(void)&lt;br /&gt;
130	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
131	CBaseEntity::EarPosition(void)&lt;br /&gt;
132	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
133	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
134	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
135	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
136	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
137	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
138	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
139	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
140	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
141	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
142	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
143	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
144	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
145	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
146	CBaseEntity::Splash(void)&lt;br /&gt;
147	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
148	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
149	CTFPlayer::IsDeflectable(void)&lt;br /&gt;
150	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
151	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
152	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
153	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
154	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
155	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
156	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
157	CBasePlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
158	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
159	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
160	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
161	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
162	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
163	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
164	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
165	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
166	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
167	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
168	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
169	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
182	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
183	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
184	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
185	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
186	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
187	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
188	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
189	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
190	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
191	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
192	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
193	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
194	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
195	CBaseAnimating::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
196	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
197	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
198	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
199	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
200	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
201	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
202	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
203	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
204	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
205	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
206	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
207	CBaseAnimating::Extinguish(void)&lt;br /&gt;
208	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
209	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
210	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
211	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
212	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
213	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
214	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
215	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
216	CTFPlayer::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
217	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
218	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
219	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
220	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
221	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
222	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
223	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
224	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
225	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
226	CBasePlayer::BodyAngles(void)&lt;br /&gt;
227	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
230	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
231	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
232	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
234	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
235	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
237	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
238	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
240	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
241	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
242	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
243	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
244	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
245	CTFPlayer::GiveAmmo(int,int,bool)&lt;br /&gt;
246	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
247	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
248	CTFPlayer::Weapon_FrameUpdate(void)&lt;br /&gt;
249	CTFPlayer::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
250	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
251	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
252	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
253	CTFPlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
254	CTFPlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
255	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
256	CTFPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
257	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
258	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
259	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
260	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
261	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
262	CTFPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
264	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
265	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
266	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
269	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
270	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
271	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
272	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
273	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
274	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
275	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
276	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
277	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
278	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
279	CBasePlayer::Event_Dying(void)&lt;br /&gt;
280	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
281	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
282	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
283	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
284	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
285	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
286	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
287	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
288	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
289	CBasePlayer::GetVehicle(void)&lt;br /&gt;
290	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
291	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
292	CTFPlayer::RemoveAllWeapons(void)&lt;br /&gt;
293	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
294	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
295	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
296	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
297	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
298	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
299	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
300	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
301	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
302	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
303	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
304	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
305	CTFPlayer::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
306	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
307	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
308	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
309	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
310	CTFPlayer::CreateViewModel(int)&lt;br /&gt;
311	CBasePlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
312	CTFPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
313	CBasePlayer::SharedSpawn(void)&lt;br /&gt;
314	CTFPlayer::ForceRespawn(void)&lt;br /&gt;
315	CTFPlayer::InitialSpawn(void)&lt;br /&gt;
316	CBasePlayer::InitHUD(void)&lt;br /&gt;
317	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
318	CTFPlayer::PlayerDeathThink(void)&lt;br /&gt;
319	CBasePlayer::Jump(void)&lt;br /&gt;
320	CBasePlayer::Duck(void)&lt;br /&gt;
321	CTFPlayer::PreThink(void)&lt;br /&gt;
322	CTFPlayer::PostThink(void)&lt;br /&gt;
323	CTFPlayer::DamageEffect(float,int)&lt;br /&gt;
324	CTFPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
325	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
326	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
327	CBasePlayer::GetPlayerMins(void)const&lt;br /&gt;
328	CBasePlayer::GetPlayerMaxs(void)const&lt;br /&gt;
329	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
330	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
331	CTFPlayer::RemoveAllItems(bool)&lt;br /&gt;
332	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
333	CTFPlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
334	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
336	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
337	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
338	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
339	CBasePlayer::ExitLadder(void)&lt;br /&gt;
340	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
341	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
342	CTFPlayer::FlashlightIsOn(void)&lt;br /&gt;
343	CTFPlayer::FlashlightTurnOn(void)&lt;br /&gt;
344	CTFPlayer::FlashlightTurnOff(void)&lt;br /&gt;
345	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
346	CBasePlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
347	CBasePlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
348	CTFPlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
349	CTFPlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
350	CTFPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
351	CTFPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
352	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
353	CTFPlayer::CheatImpulseCommands(int)&lt;br /&gt;
354	CTFPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
355	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
356	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
357	CTFPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
358	CTFPlayer::SetObserverMode(int)&lt;br /&gt;
359	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
360	CTFPlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
361	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
362	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
363	CTFPlayer::FindNextObserverTarget(bool)&lt;br /&gt;
364	CTFPlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
365	CTFPlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
366	CTFPlayer::CheckObserverSettings(void)&lt;br /&gt;
367	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
368	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
369	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
370	CTFPlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
371	CTFPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
372	CBasePlayer::StartReplayMode(float,float,int)&lt;br /&gt;
373	CBasePlayer::StopReplayMode(void)&lt;br /&gt;
374	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
375	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
376	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
377	CTFPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
378	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
379	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
380	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
381	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
382	CTFPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
383	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
384	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
385	CTFPlayer::ItemPostFrame(void)&lt;br /&gt;
386	CBasePlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
387	CBasePlayer::CheckTrainUpdate(void)&lt;br /&gt;
388	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
389	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
390	CTFPlayer::PlayerUse(void)&lt;br /&gt;
391	CBasePlayer::PlayUseDenySound(void)&lt;br /&gt;
392	CBasePlayer::FindUseEntity(void)&lt;br /&gt;
393	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
394	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
395	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
396	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
397	CBasePlayer::UpdateGeigerCounter(void)&lt;br /&gt;
398	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
400	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
401	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
402	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
403	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
404	CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
405	CTFPlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
406	CTFPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
407	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
408	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
409	CBasePlayer::CheckChatText(char *,int)&lt;br /&gt;
410	CTFPlayer::CreateRagdollEntity(void)&lt;br /&gt;
411	CTFPlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
412	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
413	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
414	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
415	CBasePlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
416	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
417	CBasePlayer::Hints(void)&lt;br /&gt;
418	CTFPlayer::IsReadyToPlay(void)&lt;br /&gt;
419	CTFPlayer::IsReadyToSpawn(void)&lt;br /&gt;
420	CTFPlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
421	CTFPlayer::ResetPerRoundStats(void)&lt;br /&gt;
422	CTFPlayer::ResetScores(void)&lt;br /&gt;
423	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
424	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
425	CTFPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
426	CBasePlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
427	CBasePlayer::IsBot(void)const&lt;br /&gt;
428	CBasePlayer::IsBotOfType(int)const&lt;br /&gt;
429	CBasePlayer::GetBotType(void)const&lt;br /&gt;
430	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
431	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
432	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
433	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
434	CBasePlayer::HasHaptics(void)&lt;br /&gt;
435	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
436	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
437	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
438	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
439	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
440	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
441	CTFPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
442	CTFPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
443	CTFPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
444	CTFPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
445	CTFPlayer::OnAchievementEarned(int)&lt;br /&gt;
446	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
447	CTFPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
448	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
449	CTFPlayer::DetermineAssistForKill(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
450	CTFPlayer::SetNumberofDominations(int)&lt;br /&gt;
451	CTFPlayer::GetNumberofDominations(void)&lt;br /&gt;
452	CTFPlayer::ShouldGib(CTakeDamageInfo  const&amp;amp;,bool)&lt;br /&gt;
453	CTFPlayer::GetAttributeManager(void)&lt;br /&gt;
454	CTFPlayer::GetAttributeContainer(void)&lt;br /&gt;
455	CTFPlayer::GetAttributeOwner(void)&lt;br /&gt;
456	CTFPlayer::ReapplyProvision(void)&lt;br /&gt;
457	CTFPlayer::InventoryUpdated(CPlayerInventory *,EItemRequestResult)&lt;br /&gt;
458	CTFPlayer::SOCacheUnsubscribed(CSteamID  const&amp;amp;)&lt;br /&gt;
459	CTFPlayer::GiveNamedItem(char  const*,int,CScriptCreatedItem *,bool)&lt;br /&gt;
460	CTFPlayer::InitClass(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7761</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7761"/>
		<updated>2010-07-04T17:46:39Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
'''169''' - Golden Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''171''' - Tribalman's Shiv&amp;lt;br&amp;gt;&lt;br /&gt;
'''172''' - Scotsman's Skullcutter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''143''' - Earbuds&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''174''' - Whoopee Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''175''' - Whiskered Gentleman&amp;lt;br&amp;gt;&lt;br /&gt;
'''177''' - Ze Goggles&amp;lt;br&amp;gt;&lt;br /&gt;
'''178''' - Safe'n'Sound&amp;lt;br&amp;gt;&lt;br /&gt;
'''179''' - Tippler's Tricorne&amp;lt;br&amp;gt;&lt;br /&gt;
'''180''' - Frenchman's Beret&amp;lt;br&amp;gt;&lt;br /&gt;
'''181''' - Bloke's Bucket Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''182''' - Vintage Merryweather&amp;lt;br&amp;gt;&lt;br /&gt;
'''183''' - Sergeant's Drill Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''184''' - Gentleman's Gatsby&amp;lt;br&amp;gt;&lt;br /&gt;
'''185''' - Heavy Duty Rag&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7738</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7738"/>
		<updated>2010-06-13T08:19:48Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
'''171''' - Tribalman's Shiv&amp;lt;br&amp;gt;&lt;br /&gt;
'''172''' - Scotsman's Skullcutter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''143''' - Earbuds&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''174''' - Whoopee Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''175''' - Whiskered Gentleman&amp;lt;br&amp;gt;&lt;br /&gt;
'''177''' - Ze Goggles&amp;lt;br&amp;gt;&lt;br /&gt;
'''178''' - Safe'n'Sound&amp;lt;br&amp;gt;&lt;br /&gt;
'''179''' - Tippler's Tricorne&amp;lt;br&amp;gt;&lt;br /&gt;
'''180''' - Frenchman's Beret&amp;lt;br&amp;gt;&lt;br /&gt;
'''181''' - Bloke's Bucket Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''182''' - Vintage Merryweather&amp;lt;br&amp;gt;&lt;br /&gt;
'''183''' - Sergeant's Drill Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''184''' - Gentleman's Gatsby&amp;lt;br&amp;gt;&lt;br /&gt;
'''185''' - Heavy Duty Rag&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7735</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7735"/>
		<updated>2010-06-04T16:39:54Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
'''171''' - Tribalman's Shiv&amp;lt;br&amp;gt;&lt;br /&gt;
'''172''' - Scotsman's Skullcutter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''174''' - Whoopee Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''175''' - Whiskered Gentleman&amp;lt;br&amp;gt;&lt;br /&gt;
'''177''' - Ze Goggles&amp;lt;br&amp;gt;&lt;br /&gt;
'''178''' - Safe'n'Sound&amp;lt;br&amp;gt;&lt;br /&gt;
'''179''' - Tippler's Tricorne&amp;lt;br&amp;gt;&lt;br /&gt;
'''180''' - Frenchman's Beret&amp;lt;br&amp;gt;&lt;br /&gt;
'''181''' - Bloke's Bucket Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''182''' - Vintage Merryweather&amp;lt;br&amp;gt;&lt;br /&gt;
'''183''' - Sergeant's Drill Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''184''' - Gentleman's Gatsby&amp;lt;br&amp;gt;&lt;br /&gt;
'''185''' - Heavy Duty Rag&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7721</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7721"/>
		<updated>2010-05-11T14:40:16Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Mercenary&amp;lt;br&amp;gt;&lt;br /&gt;
'''170''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7709</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7709"/>
		<updated>2010-05-06T05:55:16Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Weekend Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
'''167''' - Primeval Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7691</id>
		<title>CDODPlayer Offset List (Day of Defeat: Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7691"/>
		<updated>2010-04-30T21:22:02Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 30 April 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x0092FF00&lt;br /&gt;
// from &amp;quot;server.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::ModifyFireBulletsDamage(CTakeDamageInfo *)&lt;br /&gt;
112	CBaseEntity::Respawn(void)&lt;br /&gt;
113	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
114	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
115	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
117	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
121	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
123	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
124	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
125	CBaseEntity::GetDamage(void)&lt;br /&gt;
126	CBaseEntity::SetDamage(float)&lt;br /&gt;
127	CBasePlayer::EyePosition(void)&lt;br /&gt;
128	CBasePlayer::EyeAngles(void)&lt;br /&gt;
129	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
130	CBaseEntity::EarPosition(void)&lt;br /&gt;
131	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
132	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
133	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
134	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
135	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
136	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
137	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
139	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
140	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
141	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
143	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
144	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
145	CBaseEntity::Splash(void)&lt;br /&gt;
146	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
147	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
148	CBaseEntity::IsDeflectable(void)&lt;br /&gt;
149	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
150	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
151	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
152	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
153	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
154	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
155	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
156	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
157	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
158	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
159	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
160	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
161	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
162	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
163	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
164	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
165	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
166	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
167	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
168	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
182	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
183	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
184	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
185	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
186	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
187	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
188	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
189	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
190	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
191	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
192	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
193	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
194	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
195	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
196	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
197	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
198	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
199	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
200	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
201	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
202	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
203	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
204	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
205	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
206	CBaseAnimating::Extinguish(void)&lt;br /&gt;
207	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
208	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
209	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
210	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
211	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
212	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
213	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
214	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
215	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
216	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
217	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
218	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
219	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
220	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
221	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
222	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
223	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
224	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
225	CBasePlayer::BodyAngles(void)&lt;br /&gt;
226	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
227	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
228	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
229	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
230	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
231	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
232	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
234	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
235	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
237	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
238	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
240	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
241	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
242	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
243	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
244	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
245	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
246	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
247	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
248	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
249	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
250	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
251	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
252	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
253	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
254	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
255	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
256	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
257	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
258	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
259	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
260	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
261	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
264	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
265	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
266	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
268	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
269	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
270	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
271	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
272	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
273	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
274	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
275	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
276	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
277	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
278	CBasePlayer::Event_Dying(void)&lt;br /&gt;
279	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
280	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
281	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
282	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
283	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
284	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
285	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
286	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
287	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
288	CBasePlayer::GetVehicle(void)&lt;br /&gt;
289	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
290	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
291	CBaseCombatCharacter::RemoveAllWeapons(void)&lt;br /&gt;
292	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
293	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
294	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
295	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
296	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
297	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
298	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
299	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
300	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
301	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
302	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
303	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
304	CBaseCombatCharacter::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
305	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
306	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
307	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
308	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
309	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
310	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
311	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
312	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
313	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
314	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
315	CBasePlayer::InitHUD(void)&lt;br /&gt;
316	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
317	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
318	CBasePlayer::Jump(void)&lt;br /&gt;
319	CBasePlayer::Duck(void)&lt;br /&gt;
320	CDODPlayer::PreThink(void)&lt;br /&gt;
321	CDODPlayer::PostThink(void)&lt;br /&gt;
322	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
323	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
324	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
325	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
326	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
327	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
328	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
329	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
330	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
331	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
332	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
333	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
334	CBasePlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
336	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
337	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
338	CBasePlayer::ExitLadder(void)&lt;br /&gt;
339	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
340	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
341	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
342	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
343	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
344	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
345	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
346	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
347	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
348	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
349	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
350	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
351	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
352	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
353	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
354	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
355	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
356	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
357	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
358	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
359	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
360	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
361	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
362	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
363	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
364	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
365	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
366	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
367	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
368	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
369	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
370	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
371	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
372	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
373	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
374	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
375	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
376	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
377	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
378	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
379	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
380	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
381	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
382	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
383	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
384	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
385	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
386	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
387	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
388	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
389	CBasePlayer::PlayerUse(void)&lt;br /&gt;
390	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
391	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
392	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
393	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
394	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
395	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
396	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
397	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
398	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
400	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
401	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
402	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
403	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
404	CBasePlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
405	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
406	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
407	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
408	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
409	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
410	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
411	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
412	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
413	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
414	CDODPlayer::Hints(void)&lt;br /&gt;
415	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
416	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
417	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
418	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
419	CDODPlayer::ResetScores(void)&lt;br /&gt;
420	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
421	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
422	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
423	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
424	CBasePlayer::IsBot(void)const&lt;br /&gt;
425	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
426	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
427	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
428	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
429	CBasePlayer::HasHaptics(void)&lt;br /&gt;
430	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
431	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
432	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
433	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
434	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
435	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
436	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
437	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
438	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
439	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
440	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
441	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
442	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
443	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
444	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7690</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7690"/>
		<updated>2010-04-30T20:27:43Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for distinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;pawn&amp;gt;SetEntProp(edict, Prop_Send, &amp;quot;m_iItemDefinitionIndex&amp;quot;, index);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
'''163''' - Crit-a-Cola&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
'''164''' - Grizzled Veteran&amp;lt;br&amp;gt;&lt;br /&gt;
'''165''' - Soldier of Fortune&amp;lt;br&amp;gt;&lt;br /&gt;
'''166''' - Weekend Warrior&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7667</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7667"/>
		<updated>2010-04-15T20:11:44Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for disgtinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
'''160''' - Lugermorph&amp;lt;br&amp;gt;&lt;br /&gt;
'''161''' - Big Kill&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
'''162''' - Max's Severed Head&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7547</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7547"/>
		<updated>2010-03-19T15:04:17Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for disgtinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
'''153''' - Homewrecker&amp;lt;br&amp;gt;&lt;br /&gt;
'''154''' - Pain Train&amp;lt;br&amp;gt;&lt;br /&gt;
'''159''' - Dalokohs Bar&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''144''' - Physician's Procedure Mask&amp;lt;br&amp;gt;&lt;br /&gt;
'''145''' - Hound Dog&amp;lt;br&amp;gt;&lt;br /&gt;
'''146''' - Hustler's Hallmark&amp;lt;br&amp;gt;&lt;br /&gt;
'''147''' - Magistrate's Mullet&amp;lt;br&amp;gt;&lt;br /&gt;
'''148''' - Hotrod&amp;lt;br&amp;gt;&lt;br /&gt;
'''150''' - Troublemaker's Tossle Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''151''' - Triboniophorus Tyrannus&amp;lt;br&amp;gt;&lt;br /&gt;
'''152''' - Killer's Kabuto&amp;lt;br&amp;gt;&lt;br /&gt;
'''158''' - Shooter's Sola Topi&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7546</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7546"/>
		<updated>2010-03-17T14:25:15Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Hats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for disgtinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''134''' - J.Axer's Dapper Topper&amp;lt;br&amp;gt;&lt;br /&gt;
'''135''' - Towering Pillar of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''136''' - Amber's Rad As All Hell Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''137''' - Noble Amassment of Hats&amp;lt;br&amp;gt;&lt;br /&gt;
'''138''' - Uncle Sam&amp;lt;br&amp;gt;&lt;br /&gt;
'''139''' - Modest Pile of Hat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7516</id>
		<title>CDODPlayer Offset List (Day of Defeat: Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7516"/>
		<updated>2010-02-04T15:02:47Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 4 February 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00CF3100&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
114	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CBaseEntity::IsDeflectable(void)&lt;br /&gt;
148	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
149	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
150	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
151	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
152	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
153	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
154	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
156	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
157	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
158	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
159	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
160	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
161	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
162	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
163	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
164	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
165	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
166	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
167	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
182	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
183	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
184	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
185	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
186	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
187	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
188	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
189	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
190	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
191	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
192	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
193	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
194	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
195	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
196	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
197	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
198	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
199	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
200	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
201	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
202	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
203	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
204	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
205	CBaseAnimating::Extinguish(void)&lt;br /&gt;
206	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
207	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
209	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
210	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
211	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
213	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
214	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
215	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
216	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
217	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
220	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
221	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
222	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
223	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
224	CBasePlayer::BodyAngles(void)&lt;br /&gt;
225	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
230	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
231	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
232	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
234	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
235	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
237	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
238	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
240	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
241	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
242	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
243	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
244	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
245	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
246	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
247	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
248	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
249	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
250	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
251	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
252	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
253	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
254	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
255	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
256	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
257	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
258	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
259	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
260	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
261	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
264	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
265	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
266	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
267	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
268	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
269	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
270	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
271	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
272	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
273	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
274	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
275	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
276	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
277	CBasePlayer::Event_Dying(void)&lt;br /&gt;
278	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
279	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
281	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
282	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
283	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
284	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
285	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
286	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
287	CBasePlayer::GetVehicle(void)&lt;br /&gt;
288	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
289	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
290	CBaseCombatCharacter::RemoveAllWeapons(void)&lt;br /&gt;
291	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
292	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
293	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
294	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
295	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
296	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
297	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
298	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
299	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
300	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
301	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
302	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
303	CBaseCombatCharacter::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
304	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
305	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
306	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
307	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
308	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
309	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
310	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
311	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
312	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
313	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
314	CBasePlayer::InitHUD(void)&lt;br /&gt;
315	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
316	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
317	CBasePlayer::Jump(void)&lt;br /&gt;
318	CBasePlayer::Duck(void)&lt;br /&gt;
319	CDODPlayer::PreThink(void)&lt;br /&gt;
320	CDODPlayer::PostThink(void)&lt;br /&gt;
321	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
322	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
323	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
324	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
325	CBasePlayer::SetPlayerName(char  const*)&lt;br /&gt;
326	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
327	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
328	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
329	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
330	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
331	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
332	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
333	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
334	CBasePlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
336	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
337	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
338	CBasePlayer::ExitLadder(void)&lt;br /&gt;
339	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
340	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
341	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
342	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
343	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
344	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
345	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
346	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
347	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
348	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
349	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
350	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
351	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
352	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
353	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
354	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
355	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
356	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
357	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
358	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
359	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
360	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
361	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
362	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
363	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
364	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
365	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
366	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
367	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
368	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
369	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
370	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
371	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
372	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
373	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
374	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
375	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
376	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
377	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
378	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
379	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
380	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
381	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
382	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
383	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
384	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
385	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
386	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
387	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
388	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
389	CBasePlayer::PlayerUse(void)&lt;br /&gt;
390	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
391	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
392	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
393	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
394	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
395	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
396	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
397	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
398	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
400	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
401	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
402	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
403	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
404	CBasePlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
405	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
406	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
407	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
408	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
409	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
410	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
411	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
412	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
413	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
414	CDODPlayer::Hints(void)&lt;br /&gt;
415	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
416	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
417	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
418	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
419	CDODPlayer::ResetScores(void)&lt;br /&gt;
420	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
421	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
422	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
423	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
424	CBasePlayer::IsBot(void)const&lt;br /&gt;
425	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
426	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
427	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
428	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
429	CBasePlayer::HasHaptics(void)&lt;br /&gt;
430	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
431	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
432	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
433	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
434	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
435	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
436	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
437	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
438	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
439	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
440	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
441	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
442	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
443	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
444	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Vice_keys&amp;diff=7514</id>
		<title>Vice keys</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Vice_keys&amp;diff=7514"/>
		<updated>2010-01-26T20:16:36Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
| Game&lt;br /&gt;
| Key&lt;br /&gt;
|-&lt;br /&gt;
| Counter-Strike: Source&lt;br /&gt;
| d7NSuLq2&lt;br /&gt;
|- &lt;br /&gt;
| Day of Defeat: Source&lt;br /&gt;
| Wl0u5B3F&lt;br /&gt;
|- &lt;br /&gt;
| Dystopia&lt;br /&gt;
| pH3apO8w&lt;br /&gt;
|- &lt;br /&gt;
| Half-Life 2: Deathmatch&lt;br /&gt;
| x9Ke0BY7&lt;br /&gt;
|- &lt;br /&gt;
| Insurgency&lt;br /&gt;
| DrA5e3EB&lt;br /&gt;
|-&lt;br /&gt;
| TF2 (items.ctx)&lt;br /&gt;
| A5fSXbf7&lt;br /&gt;
|- &lt;br /&gt;
| TF2 (everything else)&lt;br /&gt;
| E2NcUkG2&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7505</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7505"/>
		<updated>2010-01-26T14:49:21Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Weapons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for disgtinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Engineer's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7504</id>
		<title>Team Fortress 2 Item Definition Indexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Team_Fortress_2_Item_Definition_Indexes&amp;diff=7504"/>
		<updated>2010-01-26T14:47:01Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of the item definition indexes in TF2, these are useful for disgtinguishing an unlockable weapon from its original (for example: The Backburner from an ordinary Flamethrower.)&lt;br /&gt;
&lt;br /&gt;
This list is divided in to Weapons, Hats and Crafting Items.&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&lt;br /&gt;
These are all of the weapons currently in TF2 and their item definition indexes.&lt;br /&gt;
&lt;br /&gt;
'''0''' - Bat&amp;lt;br&amp;gt;&lt;br /&gt;
'''1''' - Bottle&amp;lt;br&amp;gt;&lt;br /&gt;
'''2''' - Fire Axe&amp;lt;br&amp;gt;&lt;br /&gt;
'''3''' - Kukri&amp;lt;br&amp;gt;&lt;br /&gt;
'''4''' - Knife&amp;lt;br&amp;gt;&lt;br /&gt;
'''5''' - Fists&amp;lt;br&amp;gt;&lt;br /&gt;
'''6''' - Shovel&amp;lt;br&amp;gt;&lt;br /&gt;
'''7''' - Wrench&amp;lt;br&amp;gt;&lt;br /&gt;
'''8''' - Bonesaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''9''' - Enginner's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''10''' - Soldier's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''11''' - Heavy's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''12''' - Pyro's Shotgun&amp;lt;br&amp;gt;&lt;br /&gt;
'''13''' - Scattergun&amp;lt;br&amp;gt;&lt;br /&gt;
'''14''' - Sniper Rifle&amp;lt;br&amp;gt;&lt;br /&gt;
'''15''' - Minigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''16''' - SMG&amp;lt;br&amp;gt;&lt;br /&gt;
'''17''' - Syringe Gun&amp;lt;br&amp;gt;&lt;br /&gt;
'''18''' - Rocket Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''19''' - Pipe Grenade Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''20''' - Sticky Bomb Launcher&amp;lt;br&amp;gt;&lt;br /&gt;
'''21''' - Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
'''22''' - Engineer's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''23''' - Scout's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''24''' - Spy's Pistol&amp;lt;br&amp;gt;&lt;br /&gt;
'''25''' - Builder PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''26''' - Demolisher PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''27''' - Disguise Kit PDA&amp;lt;br&amp;gt;&lt;br /&gt;
'''29''' - Medigun&amp;lt;br&amp;gt;&lt;br /&gt;
'''30''' - Cloak Watch&amp;lt;br&amp;gt;&lt;br /&gt;
'''35''' - The Kritzkrieg&amp;lt;br&amp;gt;&lt;br /&gt;
'''36''' - The Blutsauger&amp;lt;br&amp;gt;&lt;br /&gt;
'''37''' - The Ubersaw&amp;lt;br&amp;gt;&lt;br /&gt;
'''38''' - The Axtinguisher&amp;lt;br&amp;gt;&lt;br /&gt;
'''39''' - The Flaregun&amp;lt;br&amp;gt;&lt;br /&gt;
'''40''' - The Backburner&amp;lt;br&amp;gt;&lt;br /&gt;
'''41''' - Natascha&amp;lt;br&amp;gt;&lt;br /&gt;
'''42''' - Sandvich&amp;lt;br&amp;gt;&lt;br /&gt;
'''43''' - The Killer Gloves Of Boxing&amp;lt;br&amp;gt;&lt;br /&gt;
'''44''' - Sandman (Wooden Bat)&amp;lt;br&amp;gt;&lt;br /&gt;
'''45''' - Force-A-Nature&amp;lt;br&amp;gt;&lt;br /&gt;
'''46''' - Bonk! Atomic Punch&amp;lt;br&amp;gt;&lt;br /&gt;
'''56''' - Huntsman&amp;lt;br&amp;gt;&lt;br /&gt;
'''57''' - Razorback&amp;lt;br&amp;gt;&lt;br /&gt;
'''58''' - Jarate&amp;lt;br&amp;gt;&lt;br /&gt;
'''59''' - Dead Ringer&amp;lt;br&amp;gt;&lt;br /&gt;
'''60''' - Cloak And Dagger&amp;lt;br&amp;gt;&lt;br /&gt;
'''61''' - The Ambassador&amp;lt;br&amp;gt;&lt;br /&gt;
'''127''' - The Direct Hit&amp;lt;br&amp;gt;&lt;br /&gt;
'''128''' - The Equalizer&amp;lt;br&amp;gt;&lt;br /&gt;
'''129''' - The Buff Banner&amp;lt;br&amp;gt;&lt;br /&gt;
'''130''' - The Scottish Resistance&amp;lt;br&amp;gt;&lt;br /&gt;
'''131''' - Chargin' Targe&amp;lt;br&amp;gt;&lt;br /&gt;
'''132''' - The Eyelander&amp;lt;br&amp;gt;&lt;br /&gt;
'''133''' - The Gunboats&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hats ==&lt;br /&gt;
&lt;br /&gt;
These are all of the hats and wearables available in the game.&lt;br /&gt;
&lt;br /&gt;
'''47''' - Demoman's 'Fro&amp;lt;br&amp;gt;&lt;br /&gt;
'''48''' - Mining Light&amp;lt;br&amp;gt;&lt;br /&gt;
'''49''' - Football Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''50''' - Prussian Pickelhaube&amp;lt;br&amp;gt;&lt;br /&gt;
'''51''' - Pyro's Beanie&amp;lt;br&amp;gt;&lt;br /&gt;
'''52''' - Batter's Helmet&amp;lt;br&amp;gt;&lt;br /&gt;
'''53''' - Trophy Hat&amp;lt;br&amp;gt;&lt;br /&gt;
'''54''' - Soldier's Stash&amp;lt;br&amp;gt;&lt;br /&gt;
'''55''' - Fancy Fedora&amp;lt;br&amp;gt;&lt;br /&gt;
'''94''' - Texas Ten Gallon&amp;lt;br&amp;gt;&lt;br /&gt;
'''95''' - Engineer's Cap&amp;lt;br&amp;gt;&lt;br /&gt;
'''96''' - Officer's Ushanka&amp;lt;br&amp;gt;&lt;br /&gt;
'''97''' - Tough Guy's Tuque&amp;lt;br&amp;gt;&lt;br /&gt;
'''98''' - Stainless Pot&amp;lt;br&amp;gt;&lt;br /&gt;
'''99''' - Tyrant's Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''100''' - Glengarry Bonnet&amp;lt;br&amp;gt;&lt;br /&gt;
'''101''' - Vintage Tyrolean&amp;lt;br&amp;gt;&lt;br /&gt;
'''102''' - Respectless Rubber Glove&amp;lt;br&amp;gt;&lt;br /&gt;
'''103''' - Camera Beard&amp;lt;br&amp;gt;&lt;br /&gt;
'''104''' - Otolaryngologist's Mirror&amp;lt;br&amp;gt;&lt;br /&gt;
'''105''' - Brigade Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''106''' - Bonk Helm&amp;lt;br&amp;gt;&lt;br /&gt;
'''107''' - Ye Olde Baker Boy&amp;lt;br&amp;gt;&lt;br /&gt;
'''108''' - Backbiter's Billycock&amp;lt;br&amp;gt;&lt;br /&gt;
'''109''' - Professional's Panama&amp;lt;br&amp;gt;&lt;br /&gt;
'''110''' - Master's Yellow Belt&amp;lt;br&amp;gt;&lt;br /&gt;
'''111''' - Baseball Bill's Sports Shine (Hatless Scout)&amp;lt;br&amp;gt;&lt;br /&gt;
'''115''' - Halloween Hat (Only appears on Halloween)&amp;lt;br&amp;gt;&lt;br /&gt;
'''116''' - Ghastly Gibus&amp;lt;br&amp;gt;&lt;br /&gt;
'''117''' - Ritzy Rick's Hair Fixative (Hatless Sniper)&amp;lt;br&amp;gt;&lt;br /&gt;
'''118''' - Texas Slim's Dome Shine (Hatless Engineer)&amp;lt;br&amp;gt;&lt;br /&gt;
'''120''' - Scottsman's Stove Pipe&amp;lt;br&amp;gt;&lt;br /&gt;
'''121''' - Service Medal&amp;lt;br&amp;gt;&lt;br /&gt;
'''125''' - Cheater's Lament&amp;lt;br&amp;gt;&lt;br /&gt;
'''126''' - Bill's Hat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Craft Items ==&lt;br /&gt;
&lt;br /&gt;
These are the items obtained and used primarily through crafting.&lt;br /&gt;
&lt;br /&gt;
'''5000''' - Scrap Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5001''' - Reclaimed Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5002''' - Refined Metal&amp;lt;br&amp;gt;&lt;br /&gt;
'''5003''' - Scout Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5004''' - Sniper Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5005''' - Soldier Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5006''' - Demoman Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5007''' - Heavy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5008''' - Medic Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5009''' - Pyro Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5010''' - Spy Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5011''' - Engineer Class Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5012''' - Primary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5013''' - Secondary Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5014''' - Melee Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5015''' - Grenade Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5016''' - Building Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5017''' - PDA Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5018''' - PDA2 Slot Token&amp;lt;br&amp;gt;&lt;br /&gt;
'''5019''' - Head Slot Token&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7481</id>
		<title>CTFPlayer Offset List (Team Fortress 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7481"/>
		<updated>2010-01-06T19:20:56Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 6 January 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x01011520&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CTFPlayer::~CTFPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CTFPlayer::GetServerClass(void)&lt;br /&gt;
10	CTFPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CTFPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CBaseEntity::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CTFPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CTFPlayer::Spawn(void)&lt;br /&gt;
22	CTFPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CTFPlayer::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CTFPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CTFPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CTFPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CTFPlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CTFPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CTFPlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CTFPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CTFPlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CTFPlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CBaseEntity::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CTFPlayer::GetMaxHealth(void)const&lt;br /&gt;
114	CTFPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CTFPlayer::IsDeflectable(void)&lt;br /&gt;
148	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
149	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
150	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
151	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
152	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
153	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
154	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBasePlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
156	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
157	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
158	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
159	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
160	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
161	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
162	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
163	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
164	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
165	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
166	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
167	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
182	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
183	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
184	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
185	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
186	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
187	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
188	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
189	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
190	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
191	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
192	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
193	CBaseAnimating::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
194	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
195	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
196	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
197	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
198	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
199	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
200	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
201	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
202	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
203	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
204	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
205	CBaseAnimating::Extinguish(void)&lt;br /&gt;
206	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
207	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
209	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
210	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
211	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
213	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
214	CTFPlayer::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
215	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
216	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
217	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
220	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
221	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
222	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
223	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
224	CBasePlayer::BodyAngles(void)&lt;br /&gt;
225	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
230	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
231	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
232	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
234	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
235	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
237	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
238	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
240	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
241	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
242	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
243	CTFPlayer::GiveAmmo(int,int,bool)&lt;br /&gt;
244	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
245	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
246	CTFPlayer::Weapon_FrameUpdate(void)&lt;br /&gt;
247	CTFPlayer::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
248	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
249	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
250	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
251	CTFPlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
252	CTFPlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
253	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
254	CBaseCombatCharacter::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
255	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
256	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
257	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
258	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
259	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
260	CTFPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
261	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
264	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
265	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
266	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
267	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
268	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
269	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
270	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
271	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
272	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
273	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
274	CTFPlayer::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
275	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
276	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
277	CBasePlayer::Event_Dying(void)&lt;br /&gt;
278	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
279	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
281	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
282	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
283	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
284	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
285	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
286	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
287	CBasePlayer::GetVehicle(void)&lt;br /&gt;
288	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
289	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
290	CTFPlayer::RemoveAllWeapons(void)&lt;br /&gt;
291	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
292	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
293	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
294	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
295	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
296	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
297	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
298	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
299	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
300	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
301	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
302	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
303	CTFPlayer::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
304	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
305	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
306	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
307	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
308	CTFPlayer::CreateViewModel(int)&lt;br /&gt;
309	CBasePlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
310	CTFPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
311	CBasePlayer::SharedSpawn(void)&lt;br /&gt;
312	CTFPlayer::ForceRespawn(void)&lt;br /&gt;
313	CTFPlayer::InitialSpawn(void)&lt;br /&gt;
314	CBasePlayer::InitHUD(void)&lt;br /&gt;
315	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
316	CTFPlayer::PlayerDeathThink(void)&lt;br /&gt;
317	CBasePlayer::Jump(void)&lt;br /&gt;
318	CBasePlayer::Duck(void)&lt;br /&gt;
319	CTFPlayer::PreThink(void)&lt;br /&gt;
320	CTFPlayer::PostThink(void)&lt;br /&gt;
321	CTFPlayer::DamageEffect(float,int)&lt;br /&gt;
322	CTFPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
323	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
324	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
325	CBasePlayer::SetPlayerName(char  const*)&lt;br /&gt;
326	CBasePlayer::GetPlayerMins(void)const&lt;br /&gt;
327	CBasePlayer::GetPlayerMaxs(void)const&lt;br /&gt;
328	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
329	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
330	CTFPlayer::RemoveAllItems(bool)&lt;br /&gt;
331	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
332	CTFPlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
333	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
334	CBasePlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
336	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
337	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
338	CBasePlayer::ExitLadder(void)&lt;br /&gt;
339	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
340	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
341	CTFPlayer::FlashlightIsOn(void)&lt;br /&gt;
342	CTFPlayer::FlashlightTurnOn(void)&lt;br /&gt;
343	CTFPlayer::FlashlightTurnOff(void)&lt;br /&gt;
344	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
345	CBasePlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
346	CBasePlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
347	CTFPlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
348	CTFPlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
349	CTFPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
350	CTFPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
351	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
352	CTFPlayer::CheatImpulseCommands(int)&lt;br /&gt;
353	CTFPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
354	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
355	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
356	CTFPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
357	CTFPlayer::SetObserverMode(int)&lt;br /&gt;
358	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
359	CTFPlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
360	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
361	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
362	CTFPlayer::FindNextObserverTarget(bool)&lt;br /&gt;
363	CTFPlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
364	CTFPlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
365	CTFPlayer::CheckObserverSettings(void)&lt;br /&gt;
366	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
367	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
368	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
369	CTFPlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
370	CTFPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
371	CBasePlayer::StartReplayMode(float,float,int)&lt;br /&gt;
372	CBasePlayer::StopReplayMode(void)&lt;br /&gt;
373	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
374	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
375	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
376	CTFPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
377	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
378	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
379	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
380	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
381	CTFPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
382	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
383	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
384	CTFPlayer::ItemPostFrame(void)&lt;br /&gt;
385	CBasePlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
386	CBasePlayer::CheckTrainUpdate(void)&lt;br /&gt;
387	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
388	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
389	CTFPlayer::PlayerUse(void)&lt;br /&gt;
390	CBasePlayer::PlayUseDenySound(void)&lt;br /&gt;
391	CBasePlayer::FindUseEntity(void)&lt;br /&gt;
392	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
393	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
394	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
395	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
396	CBasePlayer::UpdateGeigerCounter(void)&lt;br /&gt;
397	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
398	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
400	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
401	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
402	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
403	CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
404	CTFPlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
405	CTFPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
406	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
407	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
408	CBasePlayer::CheckChatText(char *,int)&lt;br /&gt;
409	CTFPlayer::CreateRagdollEntity(void)&lt;br /&gt;
410	CTFPlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
411	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
412	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
413	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
414	CBasePlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
415	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
416	CBasePlayer::Hints(void)&lt;br /&gt;
417	CTFPlayer::IsReadyToPlay(void)&lt;br /&gt;
418	CTFPlayer::IsReadyToSpawn(void)&lt;br /&gt;
419	CTFPlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
420	CTFPlayer::ResetPerRoundStats(void)&lt;br /&gt;
421	CTFPlayer::ResetScores(void)&lt;br /&gt;
422	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
423	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
424	CTFPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
425	CBasePlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
426	CBasePlayer::IsBot(void)const&lt;br /&gt;
427	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
428	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
429	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
430	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
431	CBasePlayer::HasHaptics(void)&lt;br /&gt;
432	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
433	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
434	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
435	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
436	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
437	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
438	CTFPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
439	CTFPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
440	CTFPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
441	CTFPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
442	CTFPlayer::OnAchievementEarned(int)&lt;br /&gt;
443	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
444	CTFPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
445	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
446	CTFPlayer::DetermineAssistForKill(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
447	CTFPlayer::SetNumberofDominations(int)&lt;br /&gt;
448	CTFPlayer::GetNumberofDominations(void)&lt;br /&gt;
449	CTFPlayer::GetAttributeManager(void)&lt;br /&gt;
450	CTFPlayer::GetAttributeContainer(void)&lt;br /&gt;
451	CTFPlayer::GetAttributeOwner(void)&lt;br /&gt;
452	CTFPlayer::ReapplyProvision(void)&lt;br /&gt;
453	CTFPlayer::InventoryUpdated(CPlayerInventory *,EItemRequestResult)&lt;br /&gt;
454	CTFPlayer::GiveNamedItem(char  const*,int,CScriptCreatedItem *,bool)&lt;br /&gt;
455	CTFPlayer::InitClass(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7480</id>
		<title>CTFPlayer Offset List (Team Fortress 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7480"/>
		<updated>2010-01-06T19:20:33Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 14 August 2009&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x01011520&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CTFPlayer::~CTFPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CTFPlayer::GetServerClass(void)&lt;br /&gt;
10	CTFPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CTFPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CBaseEntity::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CTFPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CTFPlayer::Spawn(void)&lt;br /&gt;
22	CTFPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CTFPlayer::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CTFPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CTFPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CTFPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CTFPlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CTFPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CTFPlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CTFPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CTFPlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CTFPlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CBaseEntity::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CTFPlayer::GetMaxHealth(void)const&lt;br /&gt;
114	CTFPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CTFPlayer::IsDeflectable(void)&lt;br /&gt;
148	CBaseEntity::Deflected(CBaseEntity*,Vector &amp;amp;)&lt;br /&gt;
149	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
150	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
151	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
152	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
153	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
154	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBasePlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
156	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
157	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
158	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
159	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
160	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
161	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
162	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
163	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
164	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
165	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
166	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
167	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
180	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
181	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
182	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
183	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
184	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
185	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
186	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
187	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
188	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
189	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
190	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
191	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
192	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
193	CBaseAnimating::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
194	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
195	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
196	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
197	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
198	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
199	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
200	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
201	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
202	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
203	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
204	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
205	CBaseAnimating::Extinguish(void)&lt;br /&gt;
206	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
207	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
209	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
210	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
211	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
213	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
214	CTFPlayer::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
215	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
216	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
217	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
220	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
221	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
222	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
223	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
224	CBasePlayer::BodyAngles(void)&lt;br /&gt;
225	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
230	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
231	CBaseCombatCharacter::IsHiddenByFog(Vector  const&amp;amp;)const&lt;br /&gt;
232	CBaseCombatCharacter::IsHiddenByFog(CBaseEntity *)const&lt;br /&gt;
233	CBaseCombatCharacter::IsHiddenByFog(float)const&lt;br /&gt;
234	CBaseCombatCharacter::GetFogObscuredRatio(Vector  const&amp;amp;)const&lt;br /&gt;
235	CBaseCombatCharacter::GetFogObscuredRatio(CBaseEntity *)const&lt;br /&gt;
236	CBaseCombatCharacter::GetFogObscuredRatio(float)const&lt;br /&gt;
237	CBaseCombatCharacter::IsLookingTowards(CBaseEntity  const*,float)const&lt;br /&gt;
238	CBaseCombatCharacter::IsLookingTowards(Vector  const&amp;amp;,float)const&lt;br /&gt;
239	CBaseCombatCharacter::IsInFieldOfView(CBaseEntity *)const&lt;br /&gt;
240	CBaseCombatCharacter::IsInFieldOfView(Vector  const&amp;amp;)const&lt;br /&gt;
241	CBaseCombatCharacter::IsLineOfSightClear(CBaseEntity *,CBaseCombatCharacter::LineOfSightCheckType)const&lt;br /&gt;
242	CBaseCombatCharacter::IsLineOfSightClear(Vector  const&amp;amp;,CBaseCombatCharacter::LineOfSightCheckType,CBaseEntity *)const&lt;br /&gt;
243	CTFPlayer::GiveAmmo(int,int,bool)&lt;br /&gt;
244	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
245	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
246	CTFPlayer::Weapon_FrameUpdate(void)&lt;br /&gt;
247	CTFPlayer::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
248	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
249	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
250	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
251	CTFPlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
252	CTFPlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
253	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
254	CBaseCombatCharacter::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
255	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
256	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
257	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
258	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
259	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
260	CTFPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
261	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
263	CBaseCombatCharacter::GetAliveDuration(void)const&lt;br /&gt;
264	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
265	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
266	CBaseCombatCharacter::HasEverBeenInjured(int)const&lt;br /&gt;
267	CBaseCombatCharacter::GetTimeSinceLastInjury(int)const&lt;br /&gt;
268	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
269	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
270	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
271	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
272	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
273	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
274	CTFPlayer::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
275	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
276	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
277	CBasePlayer::Event_Dying(void)&lt;br /&gt;
278	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
279	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
281	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
282	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
283	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
284	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
285	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
286	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
287	CBasePlayer::GetVehicle(void)&lt;br /&gt;
288	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
289	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
290	CTFPlayer::RemoveAllWeapons(void)&lt;br /&gt;
291	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
292	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
293	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
294	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
295	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
296	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
297	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
298	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
299	CBaseCombatCharacter::GetLastKnownArea(void)const&lt;br /&gt;
300	CBaseCombatCharacter::IsAreaTraversable(CNavArea  const*)const&lt;br /&gt;
301	CBaseCombatCharacter::ClearLastKnownArea(void)&lt;br /&gt;
302	CBaseCombatCharacter::UpdateLastKnownArea(void)&lt;br /&gt;
303	CTFPlayer::OnNavAreaChanged(CNavArea *,CNavArea *)&lt;br /&gt;
304	CBaseCombatCharacter::OnNavAreaRemoved(CNavArea *)&lt;br /&gt;
305	CBaseCombatCharacter::OnPursuedBy(INextBot *)&lt;br /&gt;
306	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
307	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
308	CTFPlayer::CreateViewModel(int)&lt;br /&gt;
309	CBasePlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
310	CTFPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
311	CBasePlayer::SharedSpawn(void)&lt;br /&gt;
312	CTFPlayer::ForceRespawn(void)&lt;br /&gt;
313	CTFPlayer::InitialSpawn(void)&lt;br /&gt;
314	CBasePlayer::InitHUD(void)&lt;br /&gt;
315	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
316	CTFPlayer::PlayerDeathThink(void)&lt;br /&gt;
317	CBasePlayer::Jump(void)&lt;br /&gt;
318	CBasePlayer::Duck(void)&lt;br /&gt;
319	CTFPlayer::PreThink(void)&lt;br /&gt;
320	CTFPlayer::PostThink(void)&lt;br /&gt;
321	CTFPlayer::DamageEffect(float,int)&lt;br /&gt;
322	CTFPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
323	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
324	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
325	CBasePlayer::SetPlayerName(char  const*)&lt;br /&gt;
326	CBasePlayer::GetPlayerMins(void)const&lt;br /&gt;
327	CBasePlayer::GetPlayerMaxs(void)const&lt;br /&gt;
328	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
329	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
330	CTFPlayer::RemoveAllItems(bool)&lt;br /&gt;
331	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
332	CTFPlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
333	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
334	CBasePlayer::OnMyWeaponFired(CBaseCombatWeapon *)&lt;br /&gt;
335	CBasePlayer::GetTimeSinceWeaponFired(void)const&lt;br /&gt;
336	CBasePlayer::IsFiringWeapon(void)const&lt;br /&gt;
337	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
338	CBasePlayer::ExitLadder(void)&lt;br /&gt;
339	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
340	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
341	CTFPlayer::FlashlightIsOn(void)&lt;br /&gt;
342	CTFPlayer::FlashlightTurnOn(void)&lt;br /&gt;
343	CTFPlayer::FlashlightTurnOff(void)&lt;br /&gt;
344	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
345	CBasePlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
346	CBasePlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
347	CTFPlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
348	CTFPlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
349	CTFPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
350	CTFPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
351	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
352	CTFPlayer::CheatImpulseCommands(int)&lt;br /&gt;
353	CTFPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
354	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
355	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
356	CTFPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
357	CTFPlayer::SetObserverMode(int)&lt;br /&gt;
358	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
359	CTFPlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
360	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
361	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
362	CTFPlayer::FindNextObserverTarget(bool)&lt;br /&gt;
363	CTFPlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
364	CTFPlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
365	CTFPlayer::CheckObserverSettings(void)&lt;br /&gt;
366	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
367	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
368	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
369	CTFPlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
370	CTFPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
371	CBasePlayer::StartReplayMode(float,float,int)&lt;br /&gt;
372	CBasePlayer::StopReplayMode(void)&lt;br /&gt;
373	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
374	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
375	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
376	CTFPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
377	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
378	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
379	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
380	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
381	CTFPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
382	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
383	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
384	CTFPlayer::ItemPostFrame(void)&lt;br /&gt;
385	CBasePlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
386	CBasePlayer::CheckTrainUpdate(void)&lt;br /&gt;
387	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
388	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
389	CTFPlayer::PlayerUse(void)&lt;br /&gt;
390	CBasePlayer::PlayUseDenySound(void)&lt;br /&gt;
391	CBasePlayer::FindUseEntity(void)&lt;br /&gt;
392	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
393	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
394	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
395	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
396	CBasePlayer::UpdateGeigerCounter(void)&lt;br /&gt;
397	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
398	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
399	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
400	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
401	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
402	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
403	CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
404	CTFPlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
405	CTFPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
406	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
407	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
408	CBasePlayer::CheckChatText(char *,int)&lt;br /&gt;
409	CTFPlayer::CreateRagdollEntity(void)&lt;br /&gt;
410	CTFPlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
411	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
412	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
413	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
414	CBasePlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
415	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
416	CBasePlayer::Hints(void)&lt;br /&gt;
417	CTFPlayer::IsReadyToPlay(void)&lt;br /&gt;
418	CTFPlayer::IsReadyToSpawn(void)&lt;br /&gt;
419	CTFPlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
420	CTFPlayer::ResetPerRoundStats(void)&lt;br /&gt;
421	CTFPlayer::ResetScores(void)&lt;br /&gt;
422	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
423	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
424	CTFPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
425	CBasePlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
426	CBasePlayer::IsBot(void)const&lt;br /&gt;
427	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
428	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
429	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
430	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
431	CBasePlayer::HasHaptics(void)&lt;br /&gt;
432	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
433	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
434	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
435	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
436	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
437	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
438	CTFPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
439	CTFPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
440	CTFPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
441	CTFPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
442	CTFPlayer::OnAchievementEarned(int)&lt;br /&gt;
443	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
444	CTFPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
445	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
446	CTFPlayer::DetermineAssistForKill(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
447	CTFPlayer::SetNumberofDominations(int)&lt;br /&gt;
448	CTFPlayer::GetNumberofDominations(void)&lt;br /&gt;
449	CTFPlayer::GetAttributeManager(void)&lt;br /&gt;
450	CTFPlayer::GetAttributeContainer(void)&lt;br /&gt;
451	CTFPlayer::GetAttributeOwner(void)&lt;br /&gt;
452	CTFPlayer::ReapplyProvision(void)&lt;br /&gt;
453	CTFPlayer::InventoryUpdated(CPlayerInventory *,EItemRequestResult)&lt;br /&gt;
454	CTFPlayer::GiveNamedItem(char  const*,int,CScriptCreatedItem *,bool)&lt;br /&gt;
455	CTFPlayer::InitClass(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Generic_Source_Events&amp;diff=7457</id>
		<title>Generic Source Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Generic_Source_Events&amp;diff=7457"/>
		<updated>2009-12-10T18:52:19Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Refer back to [[Game Events (Source)]] for more events.''&lt;br /&gt;
&lt;br /&gt;
These '''should''' apply to all Source engine games&lt;br /&gt;
=== team_info ===&lt;br /&gt;
{{qnotice|Info about team}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|team_info|string}}&lt;br /&gt;
{{hl2msg|byte|teamid|unique team id}}&lt;br /&gt;
{{hl2msg|string|teamname|team name eg &amp;quot;Team Blue&amp;quot;}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== team_score ===&lt;br /&gt;
{{qnotice|Team score changed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|team_info|string}}&lt;br /&gt;
{{hl2msg|byte|teamid|team id}}&lt;br /&gt;
{{hl2msg|short|score|total team score}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&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 the 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|bool|autoteam|true if the player was auto assigned to the team (OB only)}}&lt;br /&gt;
{{hl2msg|bool|silent|if true wont print the team join messages (OB only)}}&lt;br /&gt;
{{hl2msg|string|name|player's name (OB only)}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_class ===&lt;br /&gt;
{{qnotice|A player changed his class}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_class|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|string|class|new player class / model}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_death ===&lt;br /&gt;
{{qnotice|A player has died}}&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|short|attacker|user ID who killed}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_hurt ===&lt;br /&gt;
{{qnotice|A player was hurt}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_hurt|string}}&lt;br /&gt;
{{hl2msg|short|userid|player index who was hurt}}&lt;br /&gt;
{{hl2msg|short|attacker|player index who attacked}}&lt;br /&gt;
{{hl2msg|byte|health|remaining health points}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_chat ===&lt;br /&gt;
{{qnotice|A public player chat}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_chat|string}}&lt;br /&gt;
{{hl2msg|bool|teamonly|true if team only chat}}&lt;br /&gt;
{{hl2msg|short|userid|chatting player}}&lt;br /&gt;
{{hl2msg|string|text|chat text}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_score ===&lt;br /&gt;
{{qnotice|Player's scores changed}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_score|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|short|kills|# of kills}}&lt;br /&gt;
{{hl2msg|short|deaths|# of deaths}}&lt;br /&gt;
{{hl2msg|short|score|total game score}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_spawn ===&lt;br /&gt;
{{qnotice|Player spawned in game}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_spawn|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_shoot ===&lt;br /&gt;
{{qnotice|Player shot his weapon}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_shoot|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|byte|weapon|weapon ID}}&lt;br /&gt;
{{hl2msg|byte|mode|weapon mode}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_use ===&lt;br /&gt;
{{qnotice|When a player uses an option}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_use|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|short|entity|entity used by player}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== player_changename ===&lt;br /&gt;
{{qnotice|Player changed name}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|player_changename|string}}&lt;br /&gt;
{{hl2msg|short|userid|user ID on server}}&lt;br /&gt;
{{hl2msg|string|oldname|players old (current) name}}&lt;br /&gt;
{{hl2msg|string|newname|players new name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== game_init ===&lt;br /&gt;
{{qnotice|Sent when a new game is started (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== game_newmap ===&lt;br /&gt;
{{qnotice|Sent when new map is completely loaded}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|game_newmap|string}}&lt;br /&gt;
{{hl2msg|string|mapname|map name}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== game_start ===&lt;br /&gt;
{{qnotice|A new game starts}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|game_start|string}}&lt;br /&gt;
{{hl2msg|long|roundslimit|max round}}&lt;br /&gt;
{{hl2msg|long|timelimit|time limit}}&lt;br /&gt;
{{hl2msg|long|fraglimit|frag limit}}&lt;br /&gt;
{{hl2msg|string|objective|round objective}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== game_end ===&lt;br /&gt;
{{qnotice|A game ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|game_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user id}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== round_start ===&lt;br /&gt;
{{qnotice|The round started}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_start|string}}&lt;br /&gt;
{{hl2msg|long|timelimit|round time limit in seconds}}&lt;br /&gt;
{{hl2msg|long|fraglimit|frag limit}}&lt;br /&gt;
{{hl2msg|string|objective|round objective}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== round_end ===&lt;br /&gt;
{{qnotice|The round ended}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|round_end|string}}&lt;br /&gt;
{{hl2msg|byte|winner|winner team/user id}}&lt;br /&gt;
{{hl2msg|byte|reason|reason why the team won}}&lt;br /&gt;
{{hl2msg|string|message|end round message}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== game_message ===&lt;br /&gt;
{{qnotice|A message sent by game logic to everyone}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|game_message|string}}&lt;br /&gt;
{{hl2msg|byte|target|0 console, 1 HUD}}&lt;br /&gt;
{{hl2msg|string|text|the message text}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== break_breakable ===&lt;br /&gt;
{{qnotice|A breakable (func_break) is broken.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_breakable|string}}&lt;br /&gt;
{{hl2msg|long|entindex|index of the entity}}&lt;br /&gt;
{{hl2msg|short|userid|userid who broke the entity}}&lt;br /&gt;
{{hl2msg|byte|material|BREAK_GLASS, BREAK_WOOD, etc}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== break_prop ===&lt;br /&gt;
{{qnotice|A breakable prop is broken.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|break_prop|string}}&lt;br /&gt;
{{hl2msg|long|entindex|index of the entity}}&lt;br /&gt;
{{hl2msg|short|userid|userid who broke the entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== entity_killed ===&lt;br /&gt;
{{qnotice|An entity has been killed (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|entity_killed|string}}&lt;br /&gt;
{{hl2msg|long|entindex_killed|index of the killed entity}}&lt;br /&gt;
{{hl2msg|long|entindex_attacker|index of the attacker}}&lt;br /&gt;
{{hl2msg|long|entindex_inflictor|index of the inflictor (weapon id, etc)}}&lt;br /&gt;
{{hl2msg|long|damagebits|the damagebits of the attack}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== bonus_updated ===&lt;br /&gt;
{{qnotice|??? (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|bonus_updated|string}}&lt;br /&gt;
{{hl2msg|short|numadvanced|}}&lt;br /&gt;
{{hl2msg|short|numbronze|}}&lt;br /&gt;
{{hl2msg|short|numsilver|}}&lt;br /&gt;
{{hl2msg|short|numgold|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_event ===&lt;br /&gt;
{{qnotice|A player has received an achievement (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_earned|string}}&lt;br /&gt;
{{hl2msg|string|achievement_name|non-localized name of achievement}}&lt;br /&gt;
{{hl2msg|short|cur_val|# of steps toward achievement}}&lt;br /&gt;
{{hl2msg|short|max_val|total # of steps in achievement}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== achievement_increment ===&lt;br /&gt;
{{qnotice|Sent whenever an achievement that's tracked on the HUD increases (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|achievement_increment|string}}&lt;br /&gt;
{{hl2msg|long|achievement_id|ID of achievement that went up}}&lt;br /&gt;
{{hl2msg|short|cur_val|# of steps toward achievement}}&lt;br /&gt;
{{hl2msg|short|max_val|total # of steps in achievement}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== physgun_pickup ===&lt;br /&gt;
{{qnotice|Player picked up a physgun (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|physgun_pickup|string}}&lt;br /&gt;
{{hl2msg|long|entindex|entity picked up}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== flare_ignite_npc ===&lt;br /&gt;
{{qnotice|A flare has ignited a NPC (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|flare_ignite_npc|string}}&lt;br /&gt;
{{hl2msg|long|entindex|entity ignited}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
=== helicopter_grenade_punt_miss ===&lt;br /&gt;
{{qnotice|??? (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== user_data_downloaded ===&lt;br /&gt;
{{qnotice|Fired when achievements/stats are downloaded from Steam or XBOX Live (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ragdoll_dissolved ===&lt;br /&gt;
{{qnotice|A ragdoll has dissolved (OB only)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl2msg|ragdoll_dissolved|string}}&lt;br /&gt;
{{hl2msg|long|entindex|index of the dissolved entity}}&lt;br /&gt;
{{end-hl2msg}}&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Admin_Commands_(SourceMod)&amp;diff=7421</id>
		<title>Admin Commands (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Admin_Commands_(SourceMod)&amp;diff=7421"/>
		<updated>2009-09-27T21:11:14Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
This page lists all of the major admin commands in SourceMod.  &lt;br /&gt;
&lt;br /&gt;
'''Chat Triggers''': Remember that commands do not have to be entered through the console; they can be entered via chat triggers.  For example, saying &amp;quot;!ban bail&amp;quot; in chat will execute the same command as &amp;quot;sm_ban&amp;quot; and forward the output to chat.  You can also use &amp;quot;/&amp;quot; instead of &amp;quot;!&amp;quot; to suppress your command from being shown to users.&lt;br /&gt;
&lt;br /&gt;
=How to Target=&lt;br /&gt;
&lt;br /&gt;
'''General targets''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;name - Exact name match, or partial name match (if the partial string is unique).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#userid - If userid is numeric, the player will be targeted by their userid (found via the &amp;quot;users&amp;quot; command).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#steamid - Matches by Steam ID.  If you use colons (:), you must enclose in quotes.  Otherwise, you can use an underscore (_) instead.  Examples: &amp;lt;tt&amp;gt;&amp;quot;#STEAM_0:1:4433&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;#STEAM_0_1_4433&amp;lt;/tt&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#&amp;amp;lt;name&amp;amp;gt; - Exact name match after the # sign.&lt;br /&gt;
 &amp;lt;li&amp;gt;@all - All players (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@bots - All bots (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@alive - All alive players (available on most commands that accept alive players).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@dead - All dead players (available on most commands that accept dead players).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@humans - All non-bot players (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@aim - Current player the admin is directly aiming at.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@me - Target self.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@!me - Target everyone but yourself.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that name matches occur last, &amp;quot;magic targets&amp;quot; (such as # and @) are processed first.  This means that &amp;quot;@all&amp;quot; will target @all players, even if there is a player named &amp;quot;@all&amp;quot;.  You should target &amp;quot;#@all&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
'''Counter-Strike only''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@ct or @cts - All Counter-Terrorists&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@t or @ts - All Terrorists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Team Fortress 2 Only''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@red - All RED team members&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@blue - All BLU team members&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Basic Commands=&lt;br /&gt;
These are basic commands found in plugins that have been deemed safe for [[War_Mode_(SourceMod)|War Mode]]; they provide simple functionality for administering your server.&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_addban&lt;br /&gt;
| basebans&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;time&amp;gt; &amp;lt;steamid&amp;gt; [reason]&lt;br /&gt;
| Adds a Steam ID to Source's ban list.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_admin&lt;br /&gt;
| adminmenu&lt;br /&gt;
| admin&lt;br /&gt;
|&lt;br /&gt;
| Displays the [[Admin Menu (SourceMod)|admin menu]].&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_ban&lt;br /&gt;
| basebans&lt;br /&gt;
| ban&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt; &amp;lt;minutes|0&amp;gt; &amp;lt;/nowiki&amp;gt;[reason]&lt;br /&gt;
| Bans a client.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_banip&lt;br /&gt;
| basebans&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;ip|#userid|name&amp;gt; &amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; [reason]&lt;br /&gt;
| Adds an IP address to Source's ban list.  Only someone with &amp;lt;tt&amp;gt;rcon&amp;lt;/tt&amp;gt; access can ban an arbitrary IP.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_cancelvote&lt;br /&gt;
| basecommands&lt;br /&gt;
| vote&lt;br /&gt;
|&lt;br /&gt;
| Cancels any vote in progress.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_cvar&lt;br /&gt;
| basecommands&lt;br /&gt;
| cvar&lt;br /&gt;
| &amp;lt;cvar&amp;gt; [value]&lt;br /&gt;
| Retrieves or changes a cvar value.  Protected cvars can only be accessed with rcon access, and sv_cheats can only be accessed with cheat access.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_execcfg&lt;br /&gt;
| basecommands&lt;br /&gt;
| config&lt;br /&gt;
| &amp;lt;filename&amp;gt;&lt;br /&gt;
| Executes a config file (path not needed, but extension is).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_help&lt;br /&gt;
| adminhelp&lt;br /&gt;
| admin&lt;br /&gt;
| [page|search]&lt;br /&gt;
| Lists all admin commands.  Output is paginated and a page number can be specified.  Alternately, a search term can be specified to search for a specific command.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_kick&lt;br /&gt;
| basecommands&lt;br /&gt;
| kick&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt;&amp;lt;/nowiki&amp;gt; [reason]&lt;br /&gt;
| Kicks a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_map&lt;br /&gt;
| basecommands&lt;br /&gt;
| map&lt;br /&gt;
| &amp;lt;map&amp;gt;&lt;br /&gt;
| Changes the current map.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_rcon&lt;br /&gt;
| basecommands&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;argstring&amp;gt;&lt;br /&gt;
| Executes the argument string via rcon.  Due to Source limitations, you cannot see any RCON output.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_reloadadmins&lt;br /&gt;
| basecommands&lt;br /&gt;
| config&lt;br /&gt;
|&lt;br /&gt;
| Refreshes the Admin cache from all sources.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unban&lt;br /&gt;
| basebans&lt;br /&gt;
| unban&lt;br /&gt;
| &amp;lt;steamid&amp;gt;&lt;br /&gt;
| Unbans a Steam ID.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_who&lt;br /&gt;
| basecommands&lt;br /&gt;
| admin&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[#userid|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Lists all users and their access rights, or a specific user's access rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Extended Commands=&lt;br /&gt;
These commands provide extended functionality that may not be present on all games, either due to game or engine differences.  In general, they work on the most popular mods.  If you have a mod which is new, or not supported yet due to lower popularity, file a [http://bugs.alliedmods.net/index.php?project=5&amp;amp;do=index feature request].&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot; &lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_beacon&lt;br /&gt;
| funcommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Adds a ring around each target, making them easily visible.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_burn&lt;br /&gt;
| funcommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [time]&lt;br /&gt;
| Sets the target(s) on fire for the specified amount of time.  This may or may not work fully on certain games (for example, TF2 is missing the fire sprite, but clients will bleed/lose health).  If specified, burning effect will stop after the [time] seconds.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_chat&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a say-chat message to all admins.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_csay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a centered message to all players.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_gag&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Prevents the target(s) from using messagemode/say chat.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_hsay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a message to all players via a center-bottom hint box.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_msay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a message as a menu panel (only meaningful on games that support radio menus).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_mute&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Prevents the target(s) from using voice chat.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_play&lt;br /&gt;
| sounds&lt;br /&gt;
| admin&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &amp;amp;lt;file&amp;gt;&lt;br /&gt;
| Plays a sound file on the server to each target.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_psay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a private chat message to a single target.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_rename&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Changes the name of a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_resetcvar&lt;br /&gt;
| basecommands&lt;br /&gt;
| cvar&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;cvar&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Resets CVAR value back to default.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_say&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a say-chat message to all players.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_silence&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Performs both a gag and mute on the target(s).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_slap&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [damage]&lt;br /&gt;
| &amp;quot;Slaps&amp;quot; a player, emitting a noise and throwing them in a random direction.  If specified, the damage amount will be subtracted from each target's health.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_slay&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &lt;br /&gt;
| Kills a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_tsay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| [color] &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a top-left message to all players.  If no color is specified, the text will be white.  Colors available are: white, red, green, blue, yellow, purple, cyan, orange, pink, olive, lime, violet, lightblue.  The names are not case sensitive.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_ungag&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Allows the target(s) to use messagemode/say chat again.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unmute&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Allows the target(s) to use voice chat again.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unsilence&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Perfoms both an ungag and unmute on the target(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Vote Commands=&lt;br /&gt;
These commands are listed separately as they are all related to voting.  None of them are available in war mode by default.&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot; &lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_vote&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote&lt;br /&gt;
| &amp;amp;lt;question&amp;gt; [answer1] [answer2] [answer3] ...&lt;br /&gt;
| Starts an arbitrary vote with the given arguments as answers.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votealltalk&lt;br /&gt;
| funvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &lt;br /&gt;
| Starts a vote to change the value of sv_alltalk.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteban&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, ban&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [reason]&lt;br /&gt;
| Starts a vote to ban a single player for thirty minutes.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteburn&lt;br /&gt;
| funvotes&lt;br /&gt;
| vote, slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Starts a vote to burn a single player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteff&lt;br /&gt;
| funvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &lt;br /&gt;
| Starts a vote to change the value of mp_friendlyfire.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votegravity&lt;br /&gt;
| funvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &amp;amp;lt;amount&amp;gt; [amount2] [amount3] ...&lt;br /&gt;
| Initiates a vote to change the value of sv_gravity.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votekick&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, kick&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [reason]&lt;br /&gt;
| Starts a vote to kick a single player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votemap&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, map&lt;br /&gt;
| &amp;amp;lt;map&amp;gt; [map2] [map3] ...&lt;br /&gt;
| Starts a vote to change the map.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteslay&lt;br /&gt;
| funvotes&lt;br /&gt;
| vote, slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Starts a vote to slay a single player.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Admin_Commands_(SourceMod)&amp;diff=7420</id>
		<title>Admin Commands (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Admin_Commands_(SourceMod)&amp;diff=7420"/>
		<updated>2009-09-27T21:06:25Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
This page lists all of the major admin commands in SourceMod.  &lt;br /&gt;
&lt;br /&gt;
'''Chat Triggers''': Remember that commands do not have to be entered through the console; they can be entered via chat triggers.  For example, saying &amp;quot;!ban bail&amp;quot; in chat will execute the same command as &amp;quot;sm_ban&amp;quot; and forward the output to chat.  You can also use &amp;quot;/&amp;quot; instead of &amp;quot;!&amp;quot; to suppress your command from being shown to users.&lt;br /&gt;
&lt;br /&gt;
=How to Target=&lt;br /&gt;
&lt;br /&gt;
'''General targets''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;name - Exact name match, or partial name match (if the partial string is unique).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#userid - If userid is numeric, the player will be targeted by their userid (found via the &amp;quot;users&amp;quot; command).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#steamid - Matches by Steam ID.  If you use colons (:), you must enclose in quotes.  Otherwise, you can use an underscore (_) instead.  Examples: &amp;lt;tt&amp;gt;&amp;quot;#STEAM_0:1:4433&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;#STEAM_0_1_4433&amp;lt;/tt&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;#&amp;amp;lt;name&amp;amp;gt; - Exact name match after the # sign.&lt;br /&gt;
 &amp;lt;li&amp;gt;@all - All players (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@bots - All bots (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@alive - All alive players (available on most commands that accept alive players).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@dead - All dead players (available on most commands that accept dead players).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@humans - All non-bot players (available on most commands).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@aim - Current player the admin is directly aiming at.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@me - Target self.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@!me - Target everyone but yourself.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that name matches occur last, &amp;quot;magic targets&amp;quot; (such as # and @) are processed first.  This means that &amp;quot;@all&amp;quot; will target @all players, even if there is a player named &amp;quot;@all&amp;quot;.  You should target &amp;quot;#@all&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
'''Counter-Strike only''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@ct or @cts - All Counter-Terrorists&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@t or @ts - All Terrorists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Team Fortress 2 Only''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@red - All RED team members&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;@blue - All BLU team members&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Basic Commands=&lt;br /&gt;
These are basic commands found in plugins that have been deemed safe for [[War_Mode_(SourceMod)|War Mode]]; they provide simple functionality for administering your server.&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_addban&lt;br /&gt;
| basebans&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;time&amp;gt; &amp;lt;steamid&amp;gt; [reason]&lt;br /&gt;
| Adds a Steam ID to Source's ban list.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_admin&lt;br /&gt;
| adminmenu&lt;br /&gt;
| admin&lt;br /&gt;
|&lt;br /&gt;
| Displays the [[Admin Menu (SourceMod)|admin menu]].&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_ban&lt;br /&gt;
| basebans&lt;br /&gt;
| ban&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt; &amp;lt;minutes|0&amp;gt; &amp;lt;/nowiki&amp;gt;[reason]&lt;br /&gt;
| Bans a client.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_banip&lt;br /&gt;
| basebans&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;ip|#userid|name&amp;gt; &amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; [reason]&lt;br /&gt;
| Adds an IP address to Source's ban list.  Only someone with &amp;lt;tt&amp;gt;rcon&amp;lt;/tt&amp;gt; access can ban an arbitrary IP.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_cancelvote&lt;br /&gt;
| basecommands&lt;br /&gt;
| vote&lt;br /&gt;
|&lt;br /&gt;
| Cancels any vote in progress.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_cvar&lt;br /&gt;
| basecommands&lt;br /&gt;
| cvar&lt;br /&gt;
| &amp;lt;cvar&amp;gt; [value]&lt;br /&gt;
| Retrieves or changes a cvar value.  Protected cvars can only be accessed with rcon access, and sv_cheats can only be accessed with cheat access.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_execcfg&lt;br /&gt;
| basecommands&lt;br /&gt;
| config&lt;br /&gt;
| &amp;lt;filename&amp;gt;&lt;br /&gt;
| Executes a config file (path not needed, but extension is).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_help&lt;br /&gt;
| adminhelp&lt;br /&gt;
| admin&lt;br /&gt;
| [page|search]&lt;br /&gt;
| Lists all admin commands.  Output is paginated and a page number can be specified.  Alternately, a search term can be specified to search for a specific command.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_kick&lt;br /&gt;
| basecommands&lt;br /&gt;
| kick&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt;&amp;lt;/nowiki&amp;gt; [reason]&lt;br /&gt;
| Kicks a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_map&lt;br /&gt;
| basecommands&lt;br /&gt;
| map&lt;br /&gt;
| &amp;lt;map&amp;gt;&lt;br /&gt;
| Changes the current map.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_rcon&lt;br /&gt;
| basecommands&lt;br /&gt;
| rcon&lt;br /&gt;
| &amp;lt;argstring&amp;gt;&lt;br /&gt;
| Executes the argument string via rcon.  Due to Source limitations, you cannot see any RCON output.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_reloadadmins&lt;br /&gt;
| basecommands&lt;br /&gt;
| config&lt;br /&gt;
|&lt;br /&gt;
| Refreshes the Admin cache from all sources.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unban&lt;br /&gt;
| basebans&lt;br /&gt;
| unban&lt;br /&gt;
| &amp;lt;steamid&amp;gt;&lt;br /&gt;
| Unbans a Steam ID.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_who&lt;br /&gt;
| basecommands&lt;br /&gt;
| admin&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[#userid|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Lists all users and their access rights, or a specific user's access rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Extended Commands=&lt;br /&gt;
These commands provide extended functionality that may not be present on all games, either due to game or engine differences.  In general, they work on the most popular mods.  If you have a mod which is new, or not supported yet due to lower popularity, file a [http://bugs.alliedmods.net/index.php?project=5&amp;amp;do=index feature request].&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot; &lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_beacon&lt;br /&gt;
| basefuncommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Adds a ring around each target, making them easily visible.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_burn&lt;br /&gt;
| basefuncommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [time]&lt;br /&gt;
| Sets the target(s) on fire for the specified amount of time.  This may or may not work fully on certain games (for example, TF2 is missing the fire sprite, but clients will bleed/lose health).  If specified, burning effect will stop after the [time] seconds.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_chat&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a say-chat message to all admins.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_csay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a centered message to all players.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_gag&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Prevents the target(s) from using messagemode/say chat.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_hsay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a message to all players via a center-bottom hint box.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_msay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a message as a menu panel (only meaningful on games that support radio menus).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_mute&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Prevents the target(s) from using voice chat.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_play&lt;br /&gt;
| sounds&lt;br /&gt;
| admin&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &amp;amp;lt;file&amp;gt;&lt;br /&gt;
| Plays a sound file on the server to each target.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_psay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a private chat message to a single target.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_rename&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;#userid|name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Changes the name of a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_resetcvar&lt;br /&gt;
| basecommands&lt;br /&gt;
| cvar&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;cvar&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Resets CVAR value back to default.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_say&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a say-chat message to all players.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_silence&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Performs both a gag and mute on the target(s).&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_slap&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [damage]&lt;br /&gt;
| &amp;quot;Slaps&amp;quot; a player, emitting a noise and throwing them in a random direction.  If specified, the damage amount will be subtracted from each target's health.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_slay&lt;br /&gt;
| playercommands&lt;br /&gt;
| slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; &lt;br /&gt;
| Kills a player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_tsay&lt;br /&gt;
| basechat&lt;br /&gt;
| chat&lt;br /&gt;
| [color] &amp;amp;lt;message&amp;gt;&lt;br /&gt;
| Sends a top-left message to all players.  If no color is specified, the text will be white.  Colors available are: white, red, green, blue, yellow, purple, cyan, orange, pink, olive, lime, violet, lightblue.  The names are not case sensitive.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_ungag&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Allows the target(s) to use messagemode/say chat again.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unmute&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Allows the target(s) to use voice chat again.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_unsilence&lt;br /&gt;
| basecomm&lt;br /&gt;
| chat&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Perfoms both an ungag and unmute on the target(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Vote Commands=&lt;br /&gt;
These commands are listed separately as they are all related to voting.  None of them are available in war mode by default.&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot; &lt;br /&gt;
| Command&lt;br /&gt;
| Plugin&lt;br /&gt;
| Access&lt;br /&gt;
| Format&lt;br /&gt;
| Description&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_vote&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote&lt;br /&gt;
| &amp;amp;lt;question&amp;gt; [answer1] [answer2] [answer3] ...&lt;br /&gt;
| Starts an arbitrary vote with the given arguments as answers.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votealltalk&lt;br /&gt;
| basefunvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &lt;br /&gt;
| Starts a vote to change the value of sv_alltalk.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteban&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, ban&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [reason]&lt;br /&gt;
| Starts a vote to ban a single player for thirty minutes.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteburn&lt;br /&gt;
| basefunvotes&lt;br /&gt;
| vote, slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Starts a vote to burn a single player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteff&lt;br /&gt;
| basefunvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &lt;br /&gt;
| Starts a vote to change the value of mp_friendlyfire.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votegravity&lt;br /&gt;
| basefunvotes&lt;br /&gt;
| vote&lt;br /&gt;
| &amp;amp;lt;amount&amp;gt; [amount2] [amount3] ...&lt;br /&gt;
| Initiates a vote to change the value of sv_gravity.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votekick&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, kick&lt;br /&gt;
| &amp;amp;lt;target&amp;gt; [reason]&lt;br /&gt;
| Starts a vote to kick a single player.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_votemap&lt;br /&gt;
| basevotes&lt;br /&gt;
| vote, map&lt;br /&gt;
| &amp;amp;lt;map&amp;gt; [map2] [map3] ...&lt;br /&gt;
| Starts a vote to change the map.&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| sm_voteslay&lt;br /&gt;
| basefunvotes&lt;br /&gt;
| vote, slay&lt;br /&gt;
| &amp;amp;lt;target&amp;gt;&lt;br /&gt;
| Starts a vote to slay a single player.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=SourceHook_Development&amp;diff=7372</id>
		<title>SourceHook Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=SourceHook_Development&amp;diff=7372"/>
		<updated>2009-08-17T09:34:05Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Automatic hookmanager generation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SourceHook is a powerful API (Application Programming Interface) for detouring (hooking) virtual functions.  Unlike static detours, SourceHook needs only to swap addresses in and out of an object's virtual table.  This makes it fast and generally very platform-safe.&lt;br /&gt;
&lt;br /&gt;
SourceHook is coupled with Don Clugston's [http://www.codeproject.com/cpp/FastDelegate.asp FastDelegate] headers.  Virtual hooks can be detoured to any static function of the same prototype, or any member function (of any class) as long as the prototype matches.&lt;br /&gt;
&lt;br /&gt;
All code in SourceHook is part of the SourceHook namespace.  Thus, it may be prudent to declare this before using SourceHook structures or types:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;using namespace SourceHook;&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Simple Hooks=&lt;br /&gt;
SourceHook has the following steps of operation:&lt;br /&gt;
&lt;br /&gt;
* Declare the prototype of the function you are going to hook. This generates compile-time code that is able to pinpoint exactly how to go about hooking the function.&lt;br /&gt;
* Hook the function - as a member function of another class or a regular static function.&lt;br /&gt;
* Before the hooked function is called, all of the &amp;quot;pre&amp;quot; hook handlers attached to it are called. Each hook can set a special flag, the highest of which is chosen as a final operation. This flag specifies whether the original function should be called or not.&lt;br /&gt;
* Once all the hooks have been called, SourceHook decides whether to call the original function. Another set of hooks are called directly after, called &amp;quot;post&amp;quot; hook handlers. You can specify whether each hook is a post or pre hook - it simply changes whether it's called before or after the original call is made.&lt;br /&gt;
* After you are done using a hook, you must safely remove it before the object is destroyed (otherwise, memory will be leaked).&lt;br /&gt;
&lt;br /&gt;
==Declaration==&lt;br /&gt;
As an example, take the following class prototype:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class IVEngineServer&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   /*...*/&lt;br /&gt;
   virtual void LogPrint( const char *msg ) = 0;&lt;br /&gt;
   virtual bool IsDedicated() = 0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
extern IVEngineServer *engine;&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first step is to figure out how to declare its prototype to SourceHook. This function is void, and has one parameter. The declaration macro follows these formats:&lt;br /&gt;
&lt;br /&gt;
*{{bcode|SH_DECL_HOOK}}n - n is the number of parameters&lt;br /&gt;
**The parameters are: Class name, member function name, attributes, overloaded?, the return type, and a list of the parameter types.&lt;br /&gt;
*{{bcode|SH_DECL_HOOKn_void}} - n is the number of parameters&lt;br /&gt;
**_void specifies that the function does not return a value. The format is the same as above except the &amp;quot;return type&amp;quot; parameter is missing.&lt;br /&gt;
*'''Note:''' Not covered here are the SH_DECL_HOOKn[_void]_vafmt hooks. These can hook string-formattable variable argument lists. You do not pass the string format or ellipses parameter. SourceHook will automatically format the string for your hook.&lt;br /&gt;
&lt;br /&gt;
Our macro will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SH_DECL_HOOK1_void(IVEngineServer, LogPrint, SH_NOATTRIB, 0, const char *);&lt;br /&gt;
SH_DECL_HOOK0(IVEngineServer, IsDedicated, SH_NOATTRIB, 0, bool);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Broken down for the first line:&lt;br /&gt;
*There is 1 parameter.&lt;br /&gt;
*The function has no return value.&lt;br /&gt;
*&amp;lt;tt&amp;gt;IVEngineServer&amp;lt;/tt&amp;gt; is the class containing the function.&lt;br /&gt;
*&amp;lt;tt&amp;gt;LogPrint&amp;lt;/tt&amp;gt; is the function being hooked.&lt;br /&gt;
*The function as no attributes (for example, it is not const).&lt;br /&gt;
*The function is not overloaded.&lt;br /&gt;
*The first (and only) argument is a &amp;lt;tt&amp;gt;const char *&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second line is similar, except the parameter immediately after the overload parameter specifies the return type.  There are no further parameters since it was declared with 0.&lt;br /&gt;
&lt;br /&gt;
==Hook Functions==&lt;br /&gt;
Hooks can be declared either ''pre'' or ''post''.  A ''pre'' hook will intercept the original function before it is called.  Pre-hooks can return one of four ''hook actions'':&lt;br /&gt;
*&amp;lt;tt&amp;gt;MRES_IGNORED&amp;lt;/tt&amp;gt; - The original function will be called.&lt;br /&gt;
*&amp;lt;tt&amp;gt;MRES_HANDLED&amp;lt;/tt&amp;gt; - Same as &amp;lt;tt&amp;gt;MRES_IGNORED&amp;lt;/tt&amp;gt;, except subsequent hooks can assume this means something important was changed.&lt;br /&gt;
*&amp;lt;tt&amp;gt;MRES_OVERRIDE&amp;lt;/tt&amp;gt; - The original function will be called, but the new return value will be used instead of the one from the original function.&lt;br /&gt;
*&amp;lt;tt&amp;gt;MRES_SUPERCEDE&amp;lt;/tt&amp;gt; - The original function will not be called.  The new return value (if any) will be used instead.&lt;br /&gt;
&lt;br /&gt;
These enum constants are defined in &amp;lt;tt&amp;gt;&amp;lt;sourcehook.h&amp;gt;&amp;lt;/tt&amp;gt;, and are made available to Metamod:Source plugin developers via &amp;lt;tt&amp;gt;&amp;lt;ISmmPlugin.h&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once all pre-hooks have been processed, SourceHook takes an action based on the &amp;quot;highest&amp;quot; hook action returned (&amp;lt;tt&amp;gt;MRES_IGNORED&amp;lt;/tt&amp;gt; being lowest, &amp;lt;tt&amp;gt;MRES_SUPERCEDE&amp;lt;/tt&amp;gt; being highest).  Once the action has been processed, all ''post'' hooks are called.  That is to say, even if the original function is never called, post hooks are still processed.  Because a post hook as no chance at true interception, it is important to realize that depending on the information being detoured, the data may be modified or destroyed.  Similarly, a post hook's returned action and value is ignored.&lt;br /&gt;
&lt;br /&gt;
A hook's action is signalled via one of two macros:&lt;br /&gt;
*&amp;lt;tt&amp;gt;RETURN_META&amp;lt;/tt&amp;gt; - Only usable from &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt; functions.  Signals the action to take, then returns.&lt;br /&gt;
*&amp;lt;tt&amp;gt;RETURN_META_VALUE&amp;lt;/tt&amp;gt; - Only usable from non-&amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt; functions.  Signals the action to take, then returns the supplied value.&lt;br /&gt;
&lt;br /&gt;
There are two methods of adding or removing hooks.  Hooks can be bound to '''static''' or '''member''' functions.  Both have a similar syntax.  Their macros are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_STATIC(Function)&amp;lt;/tt&amp;gt; - Hook to a static function.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_MEMBER(Instance, Function)&amp;lt;/tt&amp;gt; - Hook to a member function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;It is important to realize that a simple hook will only be invoked when used on the same instance.&amp;lt;/b&amp;gt;  That is to say, if there are 500 instances of object X, and a hook is added to function X::Y in instance #8, then the hook will only be invoked from instance #8.  &amp;lt;b&amp;gt;Multiple hooks can be declared on the same instance, and multiple instances can be bound to the same hook, but one hook will only be invoked for the instances it was hooked to.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To have hooks that work across all instances, and thus do not need to be delegated per-instance, see the &amp;quot;Global Hooks&amp;quot; section.  As of SourceHook v5, it is safe to remove hooks on a destroyed instance, as the instance is not actually dereferenced.  However, its virtual table must still be accessible.&lt;br /&gt;
&lt;br /&gt;
==Adding Hooks==&lt;br /&gt;
The macro to add hooks is &amp;lt;tt&amp;gt;SH_[ADD|REMOVE]_HOOK&amp;lt;/tt&amp;gt;.  The syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_[ADD|REMOVE]_HOOK(Interface, Function, Instance, Hook, [post? true,false])&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of adding a &amp;lt;tt&amp;gt;LogPrint&amp;lt;/tt&amp;gt; hook:&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Hook_LogPrint(const char *msg)&lt;br /&gt;
{&lt;br /&gt;
   if (strcmp(msg, &amp;quot;If this string matches the function will be blocked&amp;quot;) == 0)&lt;br /&gt;
   {&lt;br /&gt;
      RETURN_META(MRES_SUPERCEDE);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   /* Not needed, but good style */&lt;br /&gt;
   RETURN_META(MRES_IGNORED);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StartHooks()&lt;br /&gt;
{&lt;br /&gt;
   log_hook = SH_ADD_HOOK(IVEngineServer, LogPrint, engine, SH_STATIC(Hook_LogPrint), false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopHooks()&lt;br /&gt;
{&lt;br /&gt;
   SH_REMOVE_HOOK(IVEngineServer, LogPrint, engine, SH_STATIC(Hook_LogPrint), false);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The syntax is similar for hooking to member functions.  Example equivalent to the above:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class MyHooks&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   void Hook_LogPrint(const char *msg)&lt;br /&gt;
   {&lt;br /&gt;
      if (strcmp(msg, &amp;quot;If this string matches the function will be blocked&amp;quot;) == 0)&lt;br /&gt;
      {&lt;br /&gt;
         RETURN_META(MRES_SUPERCEDE);&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      /* Not needed, but good style */&lt;br /&gt;
      RETURN_META(MRES_IGNORED);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   void StartHooks()&lt;br /&gt;
   {&lt;br /&gt;
      SH_ADD_HOOK(IVEngineServer, LogPrint, engine, SH_MEMBER(this, &amp;amp;MyHooks::Hook_LogPrint), false);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   void StopHooks()&lt;br /&gt;
   {&lt;br /&gt;
      SH_REMOVE_HOOK(IVEngineServer, LogPrint, engine, SH_MEMBER(this, &amp;amp;MyHooks::Hook_LogPrint), false);&lt;br /&gt;
   }&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Manual Hooks=&lt;br /&gt;
In some cases, it may be necessary to support multiple, incompatible ABI branches of an interface.  For example, suppose you need to hook an application that may supply either version of these interfaces:&lt;br /&gt;
&lt;br /&gt;
Interface v1:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class Interface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void Function1() =0;&lt;br /&gt;
   virtual bool Function2(int clam) =0;&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface v2:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class Interface&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual bool Function2(int clam) =0;&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously, these two interfaces are backwards incompatible.  Manual hooks allow you to precisely define the structure of the virtual table, bypassing the compiler's rules.  These rules can be re-configured at runtime.&lt;br /&gt;
&lt;br /&gt;
==Declaration==&lt;br /&gt;
Declaring a manual hook is similar to declaring a normal/simple hook.  The syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_DECL_MANUALHOOK&amp;lt;n&amp;gt;[_void](UniqueName, vtblIndex, vtblOffs, thisOffs, [return and param types])&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;UniqueName&amp;lt;/tt&amp;gt; is a unique identifier for the hook.  The &amp;lt;tt&amp;gt;vtblIndex&amp;lt;/tt&amp;gt; is the index into the virtual table at which the function lies.  In most compilers, this index starts from 0.  The &amp;lt;tt&amp;gt;vtblOffs&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisOffs&amp;lt;/tt&amp;gt; fields are used for multiple inheritance and are almost always 0 in modern compiler single inheritance.&lt;br /&gt;
&lt;br /&gt;
An example of hooking the two functions from the first interface version:&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_DECL_MANUALHOOK0_void(MHook_Function1, 0, 0, 0);&lt;br /&gt;
SH_DECL_MANUALHOOK1(MHook_Function2, 1, 0, 0, bool, int);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reconfiguring==&lt;br /&gt;
A manual hook can be ''reconfigured'', which will update its set offsets.  Reconfiguration automatically removes all hooks on the manual hook.  Let's say we want to reconfigure the &amp;lt;tt&amp;gt;Function2&amp;lt;/tt&amp;gt; hook in the case of the second version being detected:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void SwitchToNewerHooks()&lt;br /&gt;
{&lt;br /&gt;
   SH_MANUALHOOK_RECONFIGURE(MHook_Function2, 0, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the hook was referenced by its unique identifier.&lt;br /&gt;
&lt;br /&gt;
==Adding Hooks==&lt;br /&gt;
Adding or removing hook binds is done via the following extra macros:&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_ADD_MANUALHOOK&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_REMOVE_MANUALHOOK&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These work similar to the original functions.  Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;extern Interface *iface;&lt;br /&gt;
&lt;br /&gt;
bool Hook_Function2(int clam)&lt;br /&gt;
{&lt;br /&gt;
   RETURN_META_VALUE(MRES_IGNORED, false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StartHooks()&lt;br /&gt;
{&lt;br /&gt;
   SH_ADD_MANUALHOOK(MHook_Function2, iface, SH_STATIC(Hook_Function2), false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopHooks()&lt;br /&gt;
{&lt;br /&gt;
   SH_REMOVE_MANUALHOOK(MHook_Function2, iface, SH_STATIC(Hook_Function2), false);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, a member function version would use &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Extended Removal Syntax=&lt;br /&gt;
The syntax described in the above sections is new as of SourceHook v4.5.  &amp;lt;tt&amp;gt;SH_REMOVE_HOOK&amp;lt;/tt&amp;gt; is, for all intents and purposes, optional.  There is another way to remove hooks.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;tt&amp;gt;SH_ADD&amp;lt;/tt&amp;gt; macro returns a non-zero &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt; on success.  The same integer can be passed to the &amp;lt;tt&amp;gt;SH_REMOVE_HOOK_ID&amp;lt;/tt&amp;gt; macro, and the hook will be removed.  This alternate removal syntax can simplify code that uses multiple successive or dynamic hooks.&lt;br /&gt;
&lt;br /&gt;
Global hooks, described in a later section, require usage of &amp;lt;tt&amp;gt;SH_REMOVE_HOOK_ID&amp;lt;/tt&amp;gt; - that is, there is no helper macro to simplify removing a global hook.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Old Macros=&lt;br /&gt;
SourceHook v5.0 deprecates older macros that were used in earlier versions.  The macros are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_ADD_HOOK_STATICFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_ADD_HOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_STATIC&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_REMOVE_HOOK_STATICFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_REMOVE_HOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_STATIC&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_ADD_HOOK_MEMFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_ADD_HOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_REMOVE_HOOK_MEMFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_REMOVE_HOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_ADD_MANUALHOOK_STATICFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_ADD_MANUALHOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_STATIC&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_REMOVE_MANUALHOOK_STATICFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_REMOVE_MANUALHOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_STATIC&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_ADD_MANUALHOOK_MEMFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_ADD_MANUALHOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;SH_REMOVE_MANUALHOOK_MEMFUNC&amp;lt;/tt&amp;gt; - Wrapper for &amp;lt;tt&amp;gt;SH_REMOVE_MANUALHOOK&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These macros are fairly self explanatory.  The parameter where the &amp;lt;tt&amp;gt;SH_STATIC&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;SH_MEMBER&amp;lt;/tt&amp;gt; macro would normally go is instead filled with the parameters to that macro.  &lt;br /&gt;
&lt;br /&gt;
This syntax is considered deprecated, but it is still supported.  Code written with these macros will continue to compile against older SourceHook versions.  If you are writing a plugin which must work against Metamod:Source 1.4 and 1.6, you will want to use the older macros for simplicity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Global Hooks=&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Global Hooks are only available in SourceHook v4.5 or later.&lt;br /&gt;
&lt;br /&gt;
Global hooks are unlike normal hooks in that the hook is invoked for ALL instances, rather than solely the given the instance the hook was bound to.  It is important to realize that this feature can be deceiving.  Consider the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class CBaseEntity&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void SetHealth(int health) =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class CBaseCat : public CBaseEntity&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void SetHealth();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class CBaseKitten : public CBaseCat&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void SetHealth();&lt;br /&gt;
};&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &amp;lt;tt&amp;gt;CBaseCat&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;CBaseKitten&amp;lt;/tt&amp;gt; instances have ''separate virtual tables''.  Although they both derive from &amp;lt;tt&amp;gt;CBaseEntity&amp;lt;/tt&amp;gt;, they are separate virtual objects.  &amp;lt;b&amp;gt;Therefore, a global hook on &amp;lt;tt&amp;gt;CBaseEntity&amp;lt;/tt&amp;gt; will receive no invocations, and a hook on &amp;lt;tt&amp;gt;CBaseCat&amp;lt;/tt&amp;gt; will receive only &amp;lt;tt&amp;gt;CBaseCat&amp;lt;/tt&amp;gt; instances, as long as the instance is not a class derived from &amp;lt;tt&amp;gt;CBaseCat&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With this understanding in place, there are two separate syntaxes - one for simple hooks and one for manual hooks.  Additionally, there are two ways of declaring the virtual interface to use:&lt;br /&gt;
*An instance of the class can be passed.&lt;br /&gt;
*The direct address to the virtual table can be passed.&lt;br /&gt;
&lt;br /&gt;
They are essentially equivalent, although one may be more advantageous than the other (for example, if no instances are known, but the vtable address can be extracted via pattern searching).&lt;br /&gt;
&lt;br /&gt;
It is also important to note that global hooks are just a different method of &amp;quot;filtering.&amp;quot;  They fall into either the &amp;quot;simple&amp;quot; or &amp;quot;manual&amp;quot; category, and are otherwise exactly the same to those hooks.  Thus there are no separate return/declaration macros for global hooks.&lt;br /&gt;
&lt;br /&gt;
The macro &amp;lt;tt&amp;gt;META_IFACEPTR&amp;lt;/tt&amp;gt; is especially useful for global hooks.  See [[SourceHook_Development#Interface_Pointers_from_Hooks|Interface Pointers from Hooks]] near the end.&lt;br /&gt;
&lt;br /&gt;
Lastly, global hooks exclusively use the extended hooking syntax.  That means there exists only &amp;lt;tt&amp;gt;SH_ADD&amp;lt;/tt&amp;gt; macros.  &amp;lt;tt&amp;gt;SH_HOOK_REMOVE_ID&amp;lt;/tt&amp;gt; must be used and the hook ID generated via &amp;lt;tt&amp;gt;SH_ADD&amp;lt;/tt&amp;gt; must be cached.&lt;br /&gt;
&lt;br /&gt;
All examples will use the following code as a basis:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class Player&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void TakeDamage(int damage) =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Hook_TakeDamage(int damage);&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple Hooks==&lt;br /&gt;
Two extra macros exist for adding a global hook:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
SH_ADD_VPHOOK(Interface, Function, Instance, Handler, Post)&lt;br /&gt;
SH_ADD_DVPHOOK(Interface, Function, VirtualTable, Handler, Post)&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
extern void *player_vtable;&lt;br /&gt;
HookId takedamage_hook = 0;&lt;br /&gt;
&lt;br /&gt;
void StartHooks()&lt;br /&gt;
{&lt;br /&gt;
   takedamage_hook = SH_ADD_DVPHOOK(Player, TakeDamage, playervtable, SH_STATIC(Hook_TakeDamage), false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopHooks()&lt;br /&gt;
{&lt;br /&gt;
   if (takedamage_hook)&lt;br /&gt;
   {&lt;br /&gt;
      SH_REMOVE_HOOK_ID(takedamage_hook);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manual Hooks==&lt;br /&gt;
Similarly, manual hooks are straightforward:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
SH_DECL_MANUALHOOK1_void(MHook_TakeDamage, 0, 0, 0, int);&lt;br /&gt;
&lt;br /&gt;
extern void *player_vtable;&lt;br /&gt;
int takedamage_hook = 0;&lt;br /&gt;
&lt;br /&gt;
void StartHooks()&lt;br /&gt;
{&lt;br /&gt;
   takedamage_hook = SH_ADD_MANUALDVPHOOK(MHook_TakeDamage, playervtable, SH_STATIC(Hook_TakeDamage), false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopHooks()&lt;br /&gt;
{&lt;br /&gt;
   if (takedamage_hook)&lt;br /&gt;
   {&lt;br /&gt;
      SH_REMOVE_HOOK_ID(takedamage_hook);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Modifying Parameters=&lt;br /&gt;
Consider another variation of the hooking process.  There is a hook on function X, which has one parameter.  The hook wants to change the value of this parameter transparently.  For example:&lt;br /&gt;
*Caller passes 5 into X.&lt;br /&gt;
*Hook changes the 5 to a 6.&lt;br /&gt;
*Hooked function receives a 6 and continues normally.&lt;br /&gt;
&lt;br /&gt;
SourceHook has a method for achieving this.  As an added bonus, the new parameters are passed to subsequent hooks.  That means the replacement process is as transparent as possible.  For this example, we'll use the following code, with an assumed hook on &amp;lt;tt&amp;gt;Player::TakeDamage&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;Hook_TakeDamage&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class Player&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void TakeDamage(int damage);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Hook_TakeDamage(int damage);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our objective is to multiply the damage by 2.&lt;br /&gt;
&lt;br /&gt;
==Simple Hooks==&lt;br /&gt;
For simple hooks, changing parameters looks similar to an &amp;lt;tt&amp;gt;SH_CALL&amp;lt;/tt&amp;gt;.  The macros are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;RETURN_META_NEWPARAMS(Action, HookFunction, ([params]))&lt;br /&gt;
RETURN_META_VALUE_NEWPARAMS(Action, Value, HookFunction, ([params]))&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void Hook_TakeDamage(int damage)&lt;br /&gt;
{&lt;br /&gt;
   RETURN_META_NEWPARAMS(MRES_IGNORED, &amp;amp;Player::TakeDamage, (damage * 2));&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the parenthesis enclosing the parameters are required.&lt;br /&gt;
&lt;br /&gt;
==Manual Hooks==&lt;br /&gt;
Manual hooks require slightly different macros.  They are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;RETURN_META_MNEWPARAMS(Action, UniqueName, ([params]));&lt;br /&gt;
RETURN_META_VALUE_MNEWPARAMS(Action, Value, UniqueName, ([params]));&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
SH_DECL_MANUALHOOK1_void(MHook_Player_TakeDamage, 0, 0, 0, int);&lt;br /&gt;
&lt;br /&gt;
void Hook_TakeDamage(int damage)&lt;br /&gt;
{&lt;br /&gt;
   RETURN_META_MNEWPARAMS(MRES_IGNORED, MHook_Player_TakeDamage, (damage *2));&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the parenthesis enclosing the parameters are required.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bypassing Hooks=&lt;br /&gt;
Often, either to avoid certain functionality or to avoid infinite recursion, it is necessary to bypass all hooks on a hooked function, such that only the original function is called.  For instance, a previous blocked certain messages sent through &amp;lt;tt&amp;gt;LogPrint&amp;lt;/tt&amp;gt;.  In order to send that message, the hook needs to be bypassed.&lt;br /&gt;
&lt;br /&gt;
To way to do this is to use the &amp;lt;tt&amp;gt;SH_CALL&amp;lt;/tt&amp;gt; macro:&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_CALL(Instance, HookFunction)(params)&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_CALL(engine, &amp;amp;IVEngineServer::LogPrint)(&amp;quot;Secret Message&amp;quot;);&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, manual hooks have &amp;lt;tt&amp;gt;SH_MCALL&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;SH_DECL_MANUALHOOK1(MHook_Function2, 1, 0, 0, bool, int);&lt;br /&gt;
&lt;br /&gt;
bool Function2_Bypass(int clam)&lt;br /&gt;
{&lt;br /&gt;
   return SH_MCALL(iface, MHook_Function2)(clam);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deprecated Syntax==&lt;br /&gt;
The syntax described above is used in SourceHook v5.0 and v4.5.  An older syntax, using a &amp;quot;CallClass&amp;quot; data type, was used in SourceHook v4.4 and lower.  This syntax was deprecated in v4.5 and completely removed in v5.0.  Upgrading from SourceHook v4.4 means that code referencing &amp;lt;tt&amp;gt;SH_GET_CALLCLASS&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;SH_REMOVE_CALLCLASS&amp;lt;/tt&amp;gt; must be removed, and &amp;lt;tt&amp;gt;SH_CALL&amp;lt;/tt&amp;gt; simply needs an instance pointer instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Other Macros=&lt;br /&gt;
SourceHook contains a large variety of extra macros.  This section is a grab bag of the more commonly used ones.&lt;br /&gt;
&lt;br /&gt;
==Interface Pointers from Hooks==&lt;br /&gt;
Let's say you have the following hook:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;class Player&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   virtual void TakeDamage(int damage);&lt;br /&gt;
   float GetDamageModifier();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Hook_TakeDamage(int damage);&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How can you get the &amp;lt;tt&amp;gt;Player&amp;lt;/tt&amp;gt; instance while in the hook?  This can be achieved via the &amp;lt;tt&amp;gt;META_IFACEPTR&amp;lt;/tt&amp;gt; macro.  Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;void Hook_TakeDamage(int damage)&lt;br /&gt;
{&lt;br /&gt;
   Player *pPlayer = META_IFACEPTR(Player);&lt;br /&gt;
&lt;br /&gt;
   int new_damage = (int)((pPlayer-&amp;gt;GetDamageModifier() + 0.3) * (float)damage);&lt;br /&gt;
&lt;br /&gt;
   RETURN_META_NEWPARAMS(MRES_IGNORED, &amp;amp;Player::TakeDamage, (new_damage));&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the class name should be passed to &amp;lt;tt&amp;gt;META_IFACEPTR&amp;lt;/tt&amp;gt;, not the pointer type.&lt;br /&gt;
&lt;br /&gt;
==Ignoring Reference Returns==&lt;br /&gt;
There is a special macro, &amp;lt;tt&amp;gt;RETURN_META_NOREF&amp;lt;/tt&amp;gt;, for ignoring a return value for reference-returning functions.  Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class ISomething&lt;br /&gt;
{&lt;br /&gt;
public:  &lt;br /&gt;
   virtual int &amp;amp; GetSomething() =0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int &amp;amp; Hook_GetSomething()&lt;br /&gt;
{&lt;br /&gt;
   RETURN_META_NOREF(MRES_IGNORED, int &amp;amp;);&lt;br /&gt;
}&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Automatic hookmanager generation=&lt;br /&gt;
Normally, the SH_DECL_ macros generate a so-called &amp;quot;hook manager&amp;quot;, a function which is invoked instead of the original function and then calls the hooks and processes their return and &amp;lt;tt&amp;gt;META_RES&amp;lt;/tt&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
It is also possible to let SourceHook auto-generate the hook manager. This is neccessary if the function prototype is unknown at compile time (for example if hooks can be defined from third-party plugins of your plugin).&lt;br /&gt;
&lt;br /&gt;
Example Usage from a Metamod:Source plugin:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
#include &amp;quot;sourcehook_pibuilder.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// We want to hook a void (int, float) function&lt;br /&gt;
&lt;br /&gt;
// Request IHookManagerAutoGen interface&lt;br /&gt;
SourceHook::IHookManagerAutoGen *hmag =&lt;br /&gt;
    static_cast&amp;lt;SourceHook::IHookManagerAutoGen *&amp;gt;(ismm-&amp;gt;MetaFactory(MMIFACE_SH_HOOKMANAUTOGEN, NULL, NULL));&lt;br /&gt;
&lt;br /&gt;
// (check for hmag == NULL)&lt;br /&gt;
&lt;br /&gt;
// Build prototype information (using CProtoInfoBuilder helper class).&lt;br /&gt;
SourceHook::CProtoInfoBuilder protoInfo(SourceHook::ProtoInfo::CallConv_ThisCall);&lt;br /&gt;
protoInfo.AddParam(sizeof(int), SourceHook::PassInfo::PassType_Basic, SourceHook::PassInfo::PassFlag_ByVal,&lt;br /&gt;
    NULL, NULL, NULL, NULL);&lt;br /&gt;
protoInfo.AddParam(sizeof(float), SourceHook::PassInfo::PassType_Float, SourceHook::PassInfo::PassFlag_ByVal,&lt;br /&gt;
    NULL, NULL, NULL, NULL);&lt;br /&gt;
&lt;br /&gt;
// Generate the hook manager&lt;br /&gt;
HookManagerPubFunc generatedHookMan = hmag-&amp;gt;MakeHookMan(protoInfo, 0 /* vtable offset */, 0 /* vtable index */);&lt;br /&gt;
&lt;br /&gt;
// Add the hook&lt;br /&gt;
int hookid = g_SHPtr-&amp;gt;AddHook(g_PLID, SourceHook::ISourceHook::Hook_Normal/Hook_VP/Hook_DVP, iface_ptr, thisptr_offs,&lt;br /&gt;
    generatedHookMan, handler, post);&lt;br /&gt;
&lt;br /&gt;
// ... (use the hook)&lt;br /&gt;
&lt;br /&gt;
// After you're done using the hook (cleanup)&lt;br /&gt;
// Remove the hook&lt;br /&gt;
g_SHPtr-&amp;gt;RemoveHookByID(hookid);&lt;br /&gt;
&lt;br /&gt;
// Release hook manager&lt;br /&gt;
hmag-&amp;gt;ReleaseHookMan(generatedHookMan);&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;CProtoInfoBuilder::AddParam&amp;lt;/tt&amp;gt; has 7 parameters:&lt;br /&gt;
* size: size of the type. This is sizeof(type) even if it is passed by reference!&lt;br /&gt;
* passtype: this can be PassType_Basic for integer types (char/short/int/...), PassType_Float for floating-point types (float/double) and PassType_Object for unions, structs and classes.&lt;br /&gt;
* passflags: flags. Has to contain either PassFlag_ByVal or PassFlag_ByRef.&lt;br /&gt;
* pNormalCtor: for PassType_Object, set this to the pointer to the user-defined default constructor of the object, if it has one.&lt;br /&gt;
* pCCtor: for PassType_Object, set this to the pointer to the user-defined copy constructor of the object, if it has one.&lt;br /&gt;
* pODtor: for PassType_Object, set this to the pointer to the user-defined destructor of the object, if it has one.&lt;br /&gt;
* pAssignOperator: for PassType_Object, set this to the pointer to the user-defined assignment operator of the object, if it has one.&lt;br /&gt;
&lt;br /&gt;
If you are hooking a non-void function, also call &amp;lt;tt&amp;gt;CProtoInfoBuilder::SetReturnType&amp;lt;/tt&amp;gt;. It has the same arguments as &amp;lt;tt&amp;gt;AddParam&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;handler&amp;lt;/tt&amp;gt; parameter of &amp;lt;tt&amp;gt;ISourceHook::AddHook&amp;lt;/tt&amp;gt; is a pointer to the ISHDelegate interface.&lt;br /&gt;
In C++, you construct ISHDelegates like this:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
class MyDelegate : public SourceHook::ISHDelegate&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    // vtable index 0&lt;br /&gt;
    virtual bool IsEqual(ISHDelegate *pOtherDeleg)&lt;br /&gt;
    {&lt;br /&gt;
        // pOtherDeleg is guaranteed to be from the same plugin.&lt;br /&gt;
        // This function is only used for compat with the old SH_REMOVE_HOOK method.&lt;br /&gt;
        // if you don't want to use that with your hooks, you can simply return false here.&lt;br /&gt;
        // if for some reason you need it, a good idea could be comparing the vtable pointer:&lt;br /&gt;
        return *reinterpret_cast&amp;lt;void**&amp;gt;(this) == *reinterpret_cast&amp;lt;void**&amp;gt;(pOtherDeleg);&lt;br /&gt;
&lt;br /&gt;
        // But in general I'd just return false!&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // vtable index 1&lt;br /&gt;
    virtual void DeleteThis()&lt;br /&gt;
    {&lt;br /&gt;
        delete this;   // Called from SourceHook when this instance is not needed&lt;br /&gt;
                       // and should be deleted.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // vtable index 2&lt;br /&gt;
    virtual ret_type Call(params)&lt;br /&gt;
    {&lt;br /&gt;
        // your code.&lt;br /&gt;
        // SH_DECL_ macros pass execution to the actual user's handler through a FastDelegate&lt;br /&gt;
        // which is stored as a member variable of the delegate class.&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter of the CProtoInfoBuilder constructor (see example code above) is the calling convention in an extended sense. At the moment it can be either CallConv_ThisCall or (CallConv_ThisCall | CallConv_HasVafmt). The second value means that the function has printf-like string formatting. Then, the finaly ''const char *, ...'' arguments will be added automatically, and the Deleagte::Call method should have one more parameter: ''const char *formattedString''.&lt;br /&gt;
&lt;br /&gt;
pNormalCtor/pCCtor/pODtor/pAssignOperator should be found using offsets / sigscanning. If you are a C++ plugin and know the type at compile time, you can also use the following class:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
// Address of constructor/destructor&lt;br /&gt;
// (using wrappers)&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class Ctor_Thunk&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	void NormalConstructor()&lt;br /&gt;
	{&lt;br /&gt;
		new(this) T;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void CopyConstructor(const T &amp;amp;other)&lt;br /&gt;
	{&lt;br /&gt;
		new(this) T(other);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void Destructor()&lt;br /&gt;
	{&lt;br /&gt;
		reinterpret_cast&amp;lt;T*&amp;gt;(this)-&amp;gt;~T();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	const T&amp;amp; AssignOp(const T &amp;amp;other)&lt;br /&gt;
	{&lt;br /&gt;
		return (*reinterpret_cast&amp;lt;T*&amp;gt;(this) = other);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
void *FindFuncAddr(T mfp)&lt;br /&gt;
{&lt;br /&gt;
	union&lt;br /&gt;
	{&lt;br /&gt;
		T a;&lt;br /&gt;
		void *b;&lt;br /&gt;
	} u;&lt;br /&gt;
	u.a = mfp;&lt;br /&gt;
	return u.b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Usage:&lt;br /&gt;
FindFuncAddr(&amp;amp;Ctor_Thunk&amp;lt;type&amp;gt;::NormalConstructor)&lt;br /&gt;
// (if the type is a reference type, use it without &amp;amp; here)&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Embedding=&lt;br /&gt;
Embedding SourceHook in your own application or library is very easy.  The &amp;lt;tt&amp;gt;sourcehook.cpp&amp;lt;/tt&amp;gt; file must be compiled or linked into your project.  To instantiate the SourceHook engine, you must create a &amp;lt;tt&amp;gt;CSourceHookImpl&amp;lt;/tt&amp;gt; instance.  Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
/* Normally, just &amp;lt;sourcehook.h&amp;gt; is included, but this is needed to instantiate the engine. */&lt;br /&gt;
#include &amp;lt;sourcehook/sourcehook_impl.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SourceHook::Impl::CSourceHookImpl g_SourceHook;&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually use SourceHook, it is necessary to have two global variables:&lt;br /&gt;
*&amp;lt;tt&amp;gt;g_PLID&amp;lt;/tt&amp;gt; - A unique integer that identifies the library using SourceHook.  This is used for removing all hooks a library is using.&lt;br /&gt;
*&amp;lt;tt&amp;gt;g_SHPtr&amp;lt;/tt&amp;gt; - A pointer to the &amp;lt;tt&amp;gt;SourceHook::ISourceHook&amp;lt;/tt&amp;gt; interface.&lt;br /&gt;
&lt;br /&gt;
Example header file:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
#include &amp;lt;sourcehook/sourcehook.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern SourceHook::ISourceHook *g_SHPtr;&lt;br /&gt;
extern int g_PLID;&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example addition to the global code:&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
SourceHook::ISourceHook *g_SHPtr = &amp;amp;g_SourceHook;&lt;br /&gt;
int g_PLID = 0;&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Multiple Libraries/Shared Hooks==&lt;br /&gt;
If SourceHook is going to be used across multiple libraries in the same process, it is essential that only one instance of SourceHook be present.  Of course, that is only logical, since otherwise the instances would be replacing each other's virtual patches.&lt;br /&gt;
&lt;br /&gt;
In order to support this, each separate library must be given the &amp;lt;tt&amp;gt;ISourceHook&amp;lt;/tt&amp;gt; pointer and a unique &amp;lt;tt&amp;gt;g_PLID&amp;lt;/tt&amp;gt; value.  &amp;lt;tt&amp;gt;CSourceHookImpl&amp;lt;/tt&amp;gt; provides a few useful functions for managing hooks on &amp;quot;child&amp;quot; libraries or otherwise linked code.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;PausePlugin()&amp;lt;/tt&amp;gt; - Silences any hooks from an ID, such that those hooks will not be called.&lt;br /&gt;
*&amp;lt;tt&amp;gt;UnpausePlugin()&amp;lt;/tt&amp;gt; - Un-silences any silenced hooks from an ID.&lt;br /&gt;
*&amp;lt;tt&amp;gt;UnloadPlugin()&amp;lt;/tt&amp;gt; - Clean-up any left-over hooks from an ID.&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7370</id>
		<title>CDODPlayer Offset List (Day of Defeat: Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7370"/>
		<updated>2009-08-14T14:53:47Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 14 August 2009&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00C3CE40&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
114	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
148	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
149	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
150	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
151	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
152	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
153	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
154	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
156	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
157	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
158	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
159	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
160	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
161	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
162	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
163	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
164	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
165	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
166	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
167	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
180	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
181	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
182	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
183	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
184	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
185	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
186	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
187	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
188	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
189	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
190	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
191	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
192	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
193	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
194	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
195	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
196	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
197	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
198	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
199	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
200	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
201	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
202	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
203	CBaseAnimating::Extinguish(void)&lt;br /&gt;
204	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
205	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
206	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
207	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
209	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
210	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
211	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
213	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
214	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
215	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
216	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
217	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
220	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
221	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
222	CBasePlayer::BodyAngles(void)&lt;br /&gt;
223	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
224	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
225	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
230	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
231	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
232	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
233	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
234	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
235	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
236	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
237	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
238	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
239	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
240	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
241	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
242	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
243	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
244	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
245	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
246	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
247	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
248	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
249	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
250	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
251	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
252	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
253	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
254	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
255	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
256	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
257	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
258	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
259	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
260	CBasePlayer::Event_Dying(void)&lt;br /&gt;
261	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
263	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
264	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
265	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
266	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
269	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
270	CBasePlayer::GetVehicle(void)&lt;br /&gt;
271	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
272	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
273	CBaseCombatCharacter::RemoveAllWeapons(void)&lt;br /&gt;
274	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
275	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
276	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
277	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
278	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
279	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
281	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
282	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
283	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
284	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
285	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
286	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
287	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
288	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
289	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
290	CBasePlayer::InitHUD(void)&lt;br /&gt;
291	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
292	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
293	CBasePlayer::Jump(void)&lt;br /&gt;
294	CBasePlayer::Duck(void)&lt;br /&gt;
295	CDODPlayer::PreThink(void)&lt;br /&gt;
296	CDODPlayer::PostThink(void)&lt;br /&gt;
297	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
298	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
299	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
300	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
301	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
302	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
303	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
304	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
305	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
306	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
307	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
308	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
309	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
310	CBasePlayer::ExitLadder(void)&lt;br /&gt;
311	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
312	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
313	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
314	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
315	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
316	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
317	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
318	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
319	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
320	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
321	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
322	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
323	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
324	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
325	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
326	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
327	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
328	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
329	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
330	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
331	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
332	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
333	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
334	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
335	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
336	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
337	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
338	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
339	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
340	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
341	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
342	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
343	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
344	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
345	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
346	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
347	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
348	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
349	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
350	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
351	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
352	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
353	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
354	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
355	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
356	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
357	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
358	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
359	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
360	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
361	CBasePlayer::PlayerUse(void)&lt;br /&gt;
362	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
363	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
364	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
365	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
366	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
367	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
368	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
369	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
370	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
371	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
372	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
373	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
374	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
375	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
376	CBasePlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
377	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
378	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
379	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
380	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
381	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
382	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
383	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
384	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
385	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
386	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
387	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
388	CDODPlayer::Hints(void)&lt;br /&gt;
389	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
390	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
391	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
392	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
393	CDODPlayer::ResetScores(void)&lt;br /&gt;
394	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
395	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
396	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
397	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
398	CBasePlayer::IsBot(void)const&lt;br /&gt;
399	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
400	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
401	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
402	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
403	CBasePlayer::HasHaptics(void)&lt;br /&gt;
404	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
405	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
406	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
407	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
408	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
409	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
410	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
411	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
412	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
413	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
414	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
415	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
416	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
417	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
418	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7369</id>
		<title>CDODPlayer Offset List (Day of Defeat: Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7369"/>
		<updated>2009-08-14T14:53:16Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
These comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 14 August 2009&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00C3CE40&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
114	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
148	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
149	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
150	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
151	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
152	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
153	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
154	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
156	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
157	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
158	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
159	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
160	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
161	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
162	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
163	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
164	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
165	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
166	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
167	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
180	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
181	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
182	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
183	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
184	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
185	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
186	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
187	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
188	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
189	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
190	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
191	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
192	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
193	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
194	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
195	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
196	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
197	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
198	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
199	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
200	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
201	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
202	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
203	CBaseAnimating::Extinguish(void)&lt;br /&gt;
204	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
205	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
206	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
207	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
209	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
210	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
211	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
213	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
214	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
215	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
216	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
217	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
220	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
221	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
222	CBasePlayer::BodyAngles(void)&lt;br /&gt;
223	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
224	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
225	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
230	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
231	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
232	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
233	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
234	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
235	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
236	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
237	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
238	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
239	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
240	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
241	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
242	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
243	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
244	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
245	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
246	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
247	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
248	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
249	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
250	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
251	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
252	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
253	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
254	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
255	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
256	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
257	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
258	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
259	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
260	CBasePlayer::Event_Dying(void)&lt;br /&gt;
261	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
263	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
264	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
265	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
266	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
269	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
270	CBasePlayer::GetVehicle(void)&lt;br /&gt;
271	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
272	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
273	CBaseCombatCharacter::RemoveAllWeapons(void)&lt;br /&gt;
274	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
275	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
276	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
277	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
278	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
279	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
281	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
282	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
283	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
284	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
285	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
286	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
287	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
288	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
289	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
290	CBasePlayer::InitHUD(void)&lt;br /&gt;
291	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
292	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
293	CBasePlayer::Jump(void)&lt;br /&gt;
294	CBasePlayer::Duck(void)&lt;br /&gt;
295	CDODPlayer::PreThink(void)&lt;br /&gt;
296	CDODPlayer::PostThink(void)&lt;br /&gt;
297	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
298	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
299	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
300	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
301	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
302	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
303	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
304	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
305	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
306	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
307	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
308	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
309	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
310	CBasePlayer::ExitLadder(void)&lt;br /&gt;
311	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
312	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
313	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
314	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
315	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
316	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
317	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
318	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
319	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
320	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
321	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
322	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
323	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
324	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
325	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
326	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
327	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
328	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
329	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
330	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
331	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
332	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
333	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
334	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
335	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
336	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
337	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
338	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
339	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
340	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
341	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
342	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
343	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
344	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
345	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
346	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
347	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
348	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
349	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
350	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
351	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
352	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
353	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
354	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
355	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
356	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
357	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
358	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
359	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
360	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
361	CBasePlayer::PlayerUse(void)&lt;br /&gt;
362	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
363	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
364	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
365	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
366	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
367	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
368	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
369	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
370	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
371	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
372	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
373	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
374	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
375	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
376	CBasePlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
377	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
378	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
379	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
380	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
381	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
382	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
383	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
384	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
385	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
386	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
387	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
388	CDODPlayer::Hints(void)&lt;br /&gt;
389	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
390	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
391	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
392	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
393	CDODPlayer::ResetScores(void)&lt;br /&gt;
394	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
395	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
396	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
397	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
398	CBasePlayer::IsBot(void)const&lt;br /&gt;
399	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
400	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
401	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
402	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
403	CBasePlayer::HasHaptics(void)&lt;br /&gt;
404	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
405	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
406	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
407	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
408	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
409	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
410	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
411	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
412	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
413	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
414	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
415	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
416	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
417	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
418	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7368</id>
		<title>CDODPlayer Offset List (Day of Defeat: Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CDODPlayer_Offset_List_(Day_of_Defeat:_Source)&amp;diff=7368"/>
		<updated>2009-08-14T14:49:53Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* The List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
__TOC__&lt;br /&gt;
== The List ==&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 14 August 2009&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00C3CE40&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
114	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
148	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
149	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
150	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
151	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
152	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
153	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
154	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
156	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
157	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
158	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
159	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
160	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
161	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
162	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
163	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
164	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
165	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
166	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
167	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
180	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
181	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
182	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
183	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
184	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
185	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
186	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
187	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
188	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
189	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
190	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
191	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
192	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
193	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
194	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
195	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
196	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
197	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
198	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
199	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
200	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
201	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
202	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
203	CBaseAnimating::Extinguish(void)&lt;br /&gt;
204	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
205	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
206	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
207	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
209	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
210	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
211	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
213	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
214	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
215	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
216	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
217	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
220	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
221	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
222	CBasePlayer::BodyAngles(void)&lt;br /&gt;
223	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
224	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
225	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
229	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
230	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
231	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
232	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
233	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
234	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
235	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
236	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
237	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
238	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
239	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
240	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
241	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
242	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
243	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
244	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
245	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
246	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
247	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
248	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
249	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
250	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
251	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
252	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
253	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
254	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
255	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
256	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
257	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
258	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
259	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
260	CBasePlayer::Event_Dying(void)&lt;br /&gt;
261	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
263	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
264	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
265	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
266	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
269	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
270	CBasePlayer::GetVehicle(void)&lt;br /&gt;
271	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
272	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
273	CBaseCombatCharacter::RemoveAllWeapons(void)&lt;br /&gt;
274	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
275	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
276	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
277	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
278	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
279	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
281	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
282	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
283	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
284	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
285	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
286	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
287	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
288	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
289	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
290	CBasePlayer::InitHUD(void)&lt;br /&gt;
291	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
292	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
293	CBasePlayer::Jump(void)&lt;br /&gt;
294	CBasePlayer::Duck(void)&lt;br /&gt;
295	CDODPlayer::PreThink(void)&lt;br /&gt;
296	CDODPlayer::PostThink(void)&lt;br /&gt;
297	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
298	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
299	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
300	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
301	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
302	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
303	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
304	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
305	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
306	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
307	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
308	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
309	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
310	CBasePlayer::ExitLadder(void)&lt;br /&gt;
311	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
312	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
313	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
314	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
315	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
316	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
317	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
318	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
319	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
320	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
321	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
322	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
323	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
324	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
325	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
326	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
327	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
328	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
329	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
330	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
331	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
332	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
333	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
334	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
335	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
336	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
337	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
338	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
339	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
340	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
341	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
342	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
343	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
344	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
345	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
346	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
347	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
348	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
349	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
350	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
351	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
352	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
353	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
354	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
355	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
356	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
357	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
358	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
359	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
360	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
361	CBasePlayer::PlayerUse(void)&lt;br /&gt;
362	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
363	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
364	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
365	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
366	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
367	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
368	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
369	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
370	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
371	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
372	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
373	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
374	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
375	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
376	CBasePlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
377	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
378	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
379	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
380	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
381	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
382	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
383	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
384	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
385	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
386	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
387	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
388	CDODPlayer::Hints(void)&lt;br /&gt;
389	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
390	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
391	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
392	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
393	CDODPlayer::ResetScores(void)&lt;br /&gt;
394	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
395	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
396	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
397	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
398	CBasePlayer::IsBot(void)const&lt;br /&gt;
399	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
400	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
401	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
402	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
403	CBasePlayer::HasHaptics(void)&lt;br /&gt;
404	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
405	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
406	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
407	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
408	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
409	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
410	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
411	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
412	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
413	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
414	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
415	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
416	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
417	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
418	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Orange Box Beta==&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 28 June 2008&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00C12C60&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CDODPlayer::~CDODPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CDODPlayer::GetServerClass(void)&lt;br /&gt;
10	CDODPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CDODPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CDODPlayer::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CDODPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CDODPlayer::Spawn(void)&lt;br /&gt;
22	CDODPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CBaseAnimating::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CBaseMultiplayerPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CDODPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CDODPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBasePlayer::TakeHealth(float,int)&lt;br /&gt;
62	CBaseEntity::IsAlive(void)&lt;br /&gt;
63	CDODPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
64	CBasePlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
66	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
67	CBaseEntity::IsNPC(void)const&lt;br /&gt;
68	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
69	CBaseEntity::GetDelay(void)&lt;br /&gt;
70	CBaseEntity::IsMoving(void)&lt;br /&gt;
71	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
72	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
73	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
74	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
75	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
76	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
77	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
78	CBaseEntity::IsTemplate(void)&lt;br /&gt;
79	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
80	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
81	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
82	CBaseEntity::IsViewable(void)&lt;br /&gt;
83	CDODPlayer::ChangeTeam(int)&lt;br /&gt;
84	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
85	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
86	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
87	CBaseEntity::GetEnemy(void)&lt;br /&gt;
88	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
89	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
90	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
91	CBasePlayer::Touch(CBaseEntity *)&lt;br /&gt;
92	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
93	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
94	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
95	CBaseEntity::EndBlocked(void)&lt;br /&gt;
96	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
97	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
98	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
99	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
100	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
101	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
102	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
103	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
104	CDODPlayer::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
105	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
106	CBaseEntity::Respawn(void)&lt;br /&gt;
107	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
108	CBaseEntity::GetMaxHealth(void)const&lt;br /&gt;
109	CBaseMultiplayerPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
110	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
111	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
112	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
113	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
114	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
115	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
117	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
118	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
119	CBaseEntity::GetDamage(void)&lt;br /&gt;
120	CBaseEntity::SetDamage(float)&lt;br /&gt;
121	CBasePlayer::EyePosition(void)&lt;br /&gt;
122	CBasePlayer::EyeAngles(void)&lt;br /&gt;
123	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
124	CBaseEntity::EarPosition(void)&lt;br /&gt;
125	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
126	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
127	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
128	CBaseEntity::GetViewOffset(void)&lt;br /&gt;
129	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
130	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
131	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
132	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
133	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
134	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
135	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
136	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
137	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
138	CBaseEntity::Splash(void)&lt;br /&gt;
139	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
140	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
141	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
142	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
143	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
144	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
145	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
146	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
147	CDODPlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
148	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
149	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
150	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
151	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
152	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
153	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
154	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
155	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
156	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
157	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
158	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
159	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
160	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
161	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
162	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
163	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
164	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
165	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
166	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
167	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
174	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
175	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
176	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
177	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
178	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
179	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
180	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
181	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
182	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
183	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
184	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
185	CDODPlayer::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
186	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
187	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
188	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
189	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
190	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
191	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
192	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
193	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
194	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
195	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
196	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
197	CBaseAnimating::Extinguish(void)&lt;br /&gt;
198	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
199	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
200	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
201	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
202	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
203	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
204	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
205	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
206	CBaseFlex::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
207	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
208	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
209	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
210	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
211	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
212	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
213	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
214	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
215	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
216	CBasePlayer::BodyAngles(void)&lt;br /&gt;
217	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
218	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
219	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
220	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
221	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
222	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
223	CBaseCombatCharacter::GiveAmmo(int,int,bool)&lt;br /&gt;
224	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
225	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
226	CBaseCombatCharacter::Weapon_FrameUpdate(void)&lt;br /&gt;
227	CBaseCombatCharacter::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
228	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
229	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
230	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
231	CBasePlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
232	CBasePlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
233	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
234	CDODPlayer::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
235	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
236	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
237	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
238	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
239	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
240	CDODPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
241	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
242	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
243	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
244	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
245	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
246	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
247	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
248	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
249	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
250	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
251	CBaseCombatCharacter::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
252	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
253	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
254	CBasePlayer::Event_Dying(void)&lt;br /&gt;
255	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
256	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
257	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
258	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
259	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
260	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
261	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
262	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
263	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
264	CBasePlayer::GetVehicle(void)&lt;br /&gt;
265	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
266	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
267	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
268	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
269	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
270	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
271	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
272	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
273	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
274	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
275	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
276	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
277	CDODPlayer::CreateViewModel(int)&lt;br /&gt;
278	CDODPlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
279	CDODPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
280	CDODPlayer::SharedSpawn(void)&lt;br /&gt;
281	CBasePlayer::ForceRespawn(void)&lt;br /&gt;
282	CDODPlayer::InitialSpawn(void)&lt;br /&gt;
283	CBasePlayer::InitHUD(void)&lt;br /&gt;
284	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
285	CDODPlayer::PlayerDeathThink(void)&lt;br /&gt;
286	CBasePlayer::Jump(void)&lt;br /&gt;
287	CBasePlayer::Duck(void)&lt;br /&gt;
288	CDODPlayer::PreThink(void)&lt;br /&gt;
289	CDODPlayer::PostThink(void)&lt;br /&gt;
290	CBasePlayer::DamageEffect(float,int)&lt;br /&gt;
291	CDODPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
292	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
293	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
294	CDODPlayer::GetPlayerMins(void)const&lt;br /&gt;
295	CDODPlayer::GetPlayerMaxs(void)const&lt;br /&gt;
296	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
297	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
298	CBasePlayer::RemoveAllItems(bool)&lt;br /&gt;
299	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
300	CBasePlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
301	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
302	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
303	CBasePlayer::ExitLadder(void)&lt;br /&gt;
304	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
305	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
306	CDODPlayer::FlashlightIsOn(void)&lt;br /&gt;
307	CDODPlayer::FlashlightTurnOn(void)&lt;br /&gt;
308	CDODPlayer::FlashlightTurnOff(void)&lt;br /&gt;
309	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
310	CDODPlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
311	CDODPlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
312	CBasePlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
313	CBasePlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
314	CDODPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
315	CDODPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
316	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
317	CDODPlayer::CheatImpulseCommands(int)&lt;br /&gt;
318	CDODPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
319	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
320	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
321	CDODPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
322	CDODPlayer::SetObserverMode(int)&lt;br /&gt;
323	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
324	CBasePlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
325	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
326	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
327	CBasePlayer::FindNextObserverTarget(bool)&lt;br /&gt;
328	CBasePlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
329	CBasePlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
330	CBasePlayer::CheckObserverSettings(void)&lt;br /&gt;
331	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
332	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
333	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
334	CBasePlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
335	CDODPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
336	CDODPlayer::StartReplayMode(float,float,int)&lt;br /&gt;
337	CDODPlayer::StopReplayMode(void)&lt;br /&gt;
338	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
339	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
340	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
341	CDODPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
342	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
343	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
344	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
345	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
346	CDODPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
347	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
348	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
349	CBasePlayer::ItemPostFrame(void)&lt;br /&gt;
350	CDODPlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
351	CDODPlayer::CheckTrainUpdate(void)&lt;br /&gt;
352	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
353	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
354	CBasePlayer::PlayerUse(void)&lt;br /&gt;
355	CDODPlayer::PlayUseDenySound(void)&lt;br /&gt;
356	CDODPlayer::FindUseEntity(void)&lt;br /&gt;
357	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
358	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
359	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
360	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
361	CDODPlayer::UpdateGeigerCounter(void)&lt;br /&gt;
362	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
363	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
364	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
365	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
366	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
367	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
368	CDODPlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
369	CBasePlayer::ChangeTeam(int,bool)&lt;br /&gt;
370	CBaseMultiplayerPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
371	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
372	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
373	CDODPlayer::CheckChatText(char *,int)&lt;br /&gt;
374	CDODPlayer::CreateRagdollEntity(void)&lt;br /&gt;
375	CBasePlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
376	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
377	CDODPlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
378	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
379	CDODPlayer::Hints(void)&lt;br /&gt;
380	CDODPlayer::IsReadyToPlay(void)&lt;br /&gt;
381	CBasePlayer::IsReadyToSpawn(void)&lt;br /&gt;
382	CBasePlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
383	CDODPlayer::ResetPerRoundStats(void)&lt;br /&gt;
384	CDODPlayer::ResetScores(void)&lt;br /&gt;
385	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
386	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
387	CDODPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
388	CDODPlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
389	CBasePlayer::IsBot(void)const&lt;br /&gt;
390	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
391	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
392	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
393	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
394	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
395	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
396	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
397	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
398	CBaseMultiplayerPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
399	CBaseMultiplayerPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
400	CBaseMultiplayerPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
401	CBaseMultiplayerPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
402	CDODPlayer::OnAchievementEarned(int)&lt;br /&gt;
403	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
404	CBaseMultiplayerPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
405	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
406	CDODPlayer::CanHearChatFrom(CBasePlayer *)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7367</id>
		<title>CTFPlayer Offset List (Team Fortress 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CTFPlayer_Offset_List_(Team_Fortress_2)&amp;diff=7367"/>
		<updated>2009-08-14T14:45:33Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also for use when using [[Virtual Offsets (Source Mods)|virtual offsets]].&lt;br /&gt;
&lt;br /&gt;
These are the &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; offsets. &amp;lt;b&amp;gt;Linux offsets are 1 greater.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The List ==&lt;br /&gt;
This comes from the symbol tables, so you'll have to look in the SDK for return types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Last Updated 14 August 2009&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Auto reconstructed from vtable block @ 0x00DE0A60&lt;br /&gt;
// from &amp;quot;server_i486.so&amp;quot;, by ida_vtables.idc&lt;br /&gt;
0	CTFPlayer::~CTFPlayer()&lt;br /&gt;
1	CBaseEntity::SetRefEHandle(CBaseHandle  const&amp;amp;)&lt;br /&gt;
2	CBaseEntity::GetRefEHandle(void)const&lt;br /&gt;
3	CBaseEntity::GetCollideable(void)&lt;br /&gt;
4	CBaseEntity::GetNetworkable(void)&lt;br /&gt;
5	CBaseEntity::GetBaseEntity(void)&lt;br /&gt;
6	CBaseEntity::GetModelIndex(void)const&lt;br /&gt;
7	CBaseEntity::GetModelName(void)const&lt;br /&gt;
8	CBaseEntity::SetModelIndex(int)&lt;br /&gt;
9	CTFPlayer::GetServerClass(void)&lt;br /&gt;
10	CTFPlayer::YouForgotToImplementOrDeclareServerClass(void)&lt;br /&gt;
11	CTFPlayer::GetDataDescMap(void)&lt;br /&gt;
12	CBaseAnimating::TestCollision(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
13	CBaseAnimating::TestHitboxes(Ray_t  const&amp;amp;,unsigned int,CGameTrace &amp;amp;)&lt;br /&gt;
14	CBaseEntity::ComputeWorldSpaceSurroundingBox(Vector *,Vector *)&lt;br /&gt;
15	CTFPlayer::ShouldCollide(int,int)const&lt;br /&gt;
16	CBaseEntity::SetOwnerEntity(CBaseEntity*)&lt;br /&gt;
17	CBasePlayer::ShouldTransmit(CCheckTransmitInfo  const*)&lt;br /&gt;
18	CBasePlayer::UpdateTransmitState(void)&lt;br /&gt;
19	CBaseCombatCharacter::SetTransmit(CCheckTransmitInfo *,bool)&lt;br /&gt;
20	CBasePlayer::GetTracerType(void)&lt;br /&gt;
21	CTFPlayer::Spawn(void)&lt;br /&gt;
22	CTFPlayer::Precache(void)&lt;br /&gt;
23	CBasePlayer::SetModel(char  const*)&lt;br /&gt;
24	CBaseMultiplayerPlayer::PostConstructor(char  const*)&lt;br /&gt;
25	CBaseEntity::PostClientActive(void)&lt;br /&gt;
26	CBaseEntity::ParseMapData(CEntityMapData *)&lt;br /&gt;
27	CBaseEntity::KeyValue(char  const*,char  const*)&lt;br /&gt;
28	CBaseEntity::KeyValue(char  const*,float)&lt;br /&gt;
29	CBaseEntity::KeyValue(char  const*,Vector  const&amp;amp;)&lt;br /&gt;
30	CBaseEntity::GetKeyValue(char  const*,char *,int)&lt;br /&gt;
31	CBasePlayer::Activate(void)&lt;br /&gt;
32	CBaseEntity::SetParent(CBaseEntity*,int)&lt;br /&gt;
33	CBasePlayer::ObjectCaps(void)&lt;br /&gt;
34	CBaseEntity::AcceptInput(char  const*,CBaseEntity*,CBaseEntity*,variant_t,int)&lt;br /&gt;
35	CBaseAnimating::GetInputDispatchEffectPosition(char  const*,Vector &amp;amp;,QAngle &amp;amp;)&lt;br /&gt;
36	CBasePlayer::DrawDebugGeometryOverlays(void)&lt;br /&gt;
37	CTFPlayer::DrawDebugTextOverlays(void)&lt;br /&gt;
38	CBasePlayer::Save(ISave &amp;amp;)&lt;br /&gt;
39	CBasePlayer::Restore(IRestore &amp;amp;)&lt;br /&gt;
40	CBasePlayer::ShouldSavePhysics(void)&lt;br /&gt;
41	CBaseEntity::OnSave(IEntitySaveUtils *)&lt;br /&gt;
42	CBasePlayer::OnRestore(void)&lt;br /&gt;
43	CBasePlayer::RequiredEdictIndex(void)&lt;br /&gt;
44	CBaseEntity::MoveDone(void)&lt;br /&gt;
45	CBaseEntity::Think(void)&lt;br /&gt;
46	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void)&lt;br /&gt;
47	CBasePlayer::NetworkStateChanged_m_nNextThinkTick(void *)&lt;br /&gt;
48	CBaseAnimating::GetBaseAnimating(void)&lt;br /&gt;
49	CTFPlayer::GetResponseSystem(void)&lt;br /&gt;
50	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::DispatchResponse(char  const*)&lt;br /&gt;
51	CBasePlayer::Classify(void)&lt;br /&gt;
52	CBaseEntity::DeathNotice(CBaseEntity*)&lt;br /&gt;
53	CBaseEntity::ShouldAttractAutoAim(CBaseEntity*)&lt;br /&gt;
54	CBaseEntity::GetAutoAimRadius(void)&lt;br /&gt;
55	CBaseEntity::GetAutoAimCenter(void)&lt;br /&gt;
56	CBaseEntity::GetBeamTraceFilter(void)&lt;br /&gt;
57	CBaseEntity::PassesDamageFilter(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
58	CTFPlayer::TraceAttack(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;,CGameTrace *)&lt;br /&gt;
59	CBaseEntity::CanBeHitByMeleeAttack(CBaseEntity*)&lt;br /&gt;
60	CTFPlayer::OnTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
61	CBaseEntity::AdjustDamageDirection(CTakeDamageInfo  const&amp;amp;,Vector &amp;amp;,CBaseEntity*)&lt;br /&gt;
62	CTFPlayer::TakeHealth(float,int)&lt;br /&gt;
63	CBaseEntity::IsAlive(void)&lt;br /&gt;
64	CTFPlayer::Event_Killed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
65	CTFPlayer::Event_KilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
66	CBaseCombatCharacter::BloodColor(void)&lt;br /&gt;
67	CBaseEntity::IsTriggered(CBaseEntity*)&lt;br /&gt;
68	CBaseEntity::IsNPC(void)const&lt;br /&gt;
69	CBaseCombatCharacter::MyCombatCharacterPointer(void)&lt;br /&gt;
70	CBaseEntity::MyNextBotPointer(void)&lt;br /&gt;
71	CBaseEntity::GetDelay(void)&lt;br /&gt;
72	CBaseEntity::IsMoving(void)&lt;br /&gt;
73	CBaseEntity::DamageDecal(int,int)&lt;br /&gt;
74	CBaseEntity::DecalTrace(CGameTrace *,char  const*)&lt;br /&gt;
75	CBaseEntity::ImpactTrace(CGameTrace *,int,char *)&lt;br /&gt;
76	CBaseEntity::OnControls(CBaseEntity*)&lt;br /&gt;
77	CBaseEntity::HasTarget(string_t)&lt;br /&gt;
78	CBasePlayer::IsPlayer(void)const&lt;br /&gt;
79	CBasePlayer::IsNetClient(void)const&lt;br /&gt;
80	CBaseEntity::IsTemplate(void)&lt;br /&gt;
81	CBaseEntity::IsBaseObject(void)const&lt;br /&gt;
82	CBaseEntity::IsBaseTrain(void)const&lt;br /&gt;
83	CBaseEntity::IsBaseCombatWeapon(void)const&lt;br /&gt;
84	CBaseEntity::IsWearable(void)const&lt;br /&gt;
85	CBaseEntity::MyCombatWeaponPointer(void)&lt;br /&gt;
86	CBaseEntity::GetServerVehicle(void)&lt;br /&gt;
87	CBaseEntity::IsViewable(void)&lt;br /&gt;
88	CTFPlayer::ChangeTeam(int)&lt;br /&gt;
89	CBaseEntity::OnEntityEvent(EntityEvent_t,void *)&lt;br /&gt;
90	CBaseEntity::CanStandOn(CBaseEntity*)const&lt;br /&gt;
91	CBaseEntity::CanStandOn(edict_t *)const&lt;br /&gt;
92	CBaseEntity::GetEnemy(void)&lt;br /&gt;
93	CBaseEntity::GetEnemy(void)const&lt;br /&gt;
94	CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)&lt;br /&gt;
95	CBaseEntity::StartTouch(CBaseEntity*)&lt;br /&gt;
96	CTFPlayer::Touch(CBaseEntity *)&lt;br /&gt;
97	CBaseEntity::EndTouch(CBaseEntity*)&lt;br /&gt;
98	CBaseEntity::StartBlocked(CBaseEntity*)&lt;br /&gt;
99	CBaseEntity::Blocked(CBaseEntity*)&lt;br /&gt;
100	CBaseEntity::EndBlocked(void)&lt;br /&gt;
101	CBasePlayer::PhysicsSimulate(void)&lt;br /&gt;
102	CBasePlayer::UpdateOnRemove(void)&lt;br /&gt;
103	CBaseEntity::StopLoopingSounds(void)&lt;br /&gt;
104	CBaseEntity::SUB_AllowedToFade(void)&lt;br /&gt;
105	CBaseFlex::Teleport(Vector  const*,QAngle  const*,Vector  const*)&lt;br /&gt;
106	CBaseEntity::NotifySystemEvent(CBaseEntity*,notify_system_event_t,notify_system_event_params_t  const&amp;amp;)&lt;br /&gt;
107	CBasePlayer::MakeTracer(Vector  const&amp;amp;,CGameTrace  const&amp;amp;,int)&lt;br /&gt;
108	CBaseEntity::GetTracerAttachment(void)&lt;br /&gt;
109	CBaseEntity::FireBullets(FireBulletsInfo_t  const&amp;amp;)&lt;br /&gt;
110	CBasePlayer::DoImpactEffect(CGameTrace &amp;amp;,int)&lt;br /&gt;
111	CBaseEntity::Respawn(void)&lt;br /&gt;
112	CBaseEntity::IsLockedByMaster(void)&lt;br /&gt;
113	CTFPlayer::GetMaxHealth(void)const&lt;br /&gt;
114	CTFPlayer::ModifyOrAppendCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
115	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void)&lt;br /&gt;
116	CBaseEntity::NetworkStateChanged_m_iMaxHealth(void *)&lt;br /&gt;
117	CBasePlayer::NetworkStateChanged_m_iHealth(void)&lt;br /&gt;
118	CBasePlayer::NetworkStateChanged_m_iHealth(void *)&lt;br /&gt;
119	CBasePlayer::NetworkStateChanged_m_lifeState(void)&lt;br /&gt;
120	CBasePlayer::NetworkStateChanged_m_lifeState(void *)&lt;br /&gt;
121	CBaseEntity::NetworkStateChanged_m_takedamage(void)&lt;br /&gt;
122	CBaseEntity::NetworkStateChanged_m_takedamage(void *)&lt;br /&gt;
123	CBaseEntity::GetDamageType(void)const&lt;br /&gt;
124	CBaseEntity::GetDamage(void)&lt;br /&gt;
125	CBaseEntity::SetDamage(float)&lt;br /&gt;
126	CBasePlayer::EyePosition(void)&lt;br /&gt;
127	CBasePlayer::EyeAngles(void)&lt;br /&gt;
128	CBasePlayer::LocalEyeAngles(void)&lt;br /&gt;
129	CBaseEntity::EarPosition(void)&lt;br /&gt;
130	CBasePlayer::BodyTarget(Vector  const&amp;amp;,bool)&lt;br /&gt;
131	CBaseEntity::HeadTarget(Vector  const&amp;amp;)&lt;br /&gt;
132	CBaseEntity::GetVectors(Vector *,Vector *,Vector *)const&lt;br /&gt;
133	CBaseEntity::GetViewOffset(void)const&lt;br /&gt;
134	CBaseEntity::SetViewOffset(Vector  const&amp;amp;)&lt;br /&gt;
135	CBasePlayer::GetSmoothedVelocity(void)&lt;br /&gt;
136	CBaseAnimating::GetVelocity(Vector *,Vector *)&lt;br /&gt;
137	CBaseCombatCharacter::FVisible(CBaseEntity *,int,CBaseEntity **)&lt;br /&gt;
138	CBaseCombatCharacter::FVisible(Vector  const&amp;amp;,int,CBaseEntity **)&lt;br /&gt;
139	CBaseEntity::CanBeSeenBy(CAI_BaseNPC *)&lt;br /&gt;
140	CBaseEntity::GetAttackDamageScale(CBaseEntity*)&lt;br /&gt;
141	CBaseEntity::GetReceivedDamageScale(CBaseEntity*)&lt;br /&gt;
142	CBaseEntity::GetGroundVelocityToApply(Vector &amp;amp;)&lt;br /&gt;
143	CBaseEntity::PhysicsSplash(Vector  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
144	CBaseEntity::Splash(void)&lt;br /&gt;
145	CBaseEntity::WorldSpaceCenter(void)const&lt;br /&gt;
146	CBaseEntity::GetSoundEmissionOrigin(void)const&lt;br /&gt;
147	CBaseEntity::CreateVPhysics(void)&lt;br /&gt;
148	CBaseEntity::ForceVPhysicsCollide(CBaseEntity*)&lt;br /&gt;
149	CBasePlayer::VPhysicsDestroyObject(void)&lt;br /&gt;
150	CBasePlayer::VPhysicsUpdate(IPhysicsObject *)&lt;br /&gt;
151	CBaseEntity::VPhysicsTakeDamage(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
152	CBaseCombatCharacter::VPhysicsShadowCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
153	CBasePlayer::VPhysicsShadowUpdate(IPhysicsObject *)&lt;br /&gt;
154	CBasePlayer::VPhysicsCollision(int,gamevcollisionevent_t *)&lt;br /&gt;
155	CBaseEntity::VPhysicsFriction(IPhysicsObject *,float,int,int)&lt;br /&gt;
156	CBaseEntity::UpdatePhysicsShadowToCurrentPosition(float)&lt;br /&gt;
157	CBaseEntity::VPhysicsGetObjectList(IPhysicsObject **,int)&lt;br /&gt;
158	CBaseEntity::VPhysicsIsFlesh(void)&lt;br /&gt;
159	CBaseEntity::HasPhysicsAttacker(float)&lt;br /&gt;
160	CBasePlayer::PhysicsSolidMaskForEntity(void)const&lt;br /&gt;
161	CBaseEntity::ResolveFlyCollisionCustom(CGameTrace &amp;amp;,Vector &amp;amp;)&lt;br /&gt;
162	CBaseEntity::PerformCustomPhysics(Vector *,Vector *,QAngle *,QAngle *)&lt;br /&gt;
163	CBaseAnimating::GetStepOrigin(void)const&lt;br /&gt;
164	CBaseAnimating::GetStepAngles(void)const&lt;br /&gt;
165	CBaseEntity::ShouldDrawWaterImpacts(void)&lt;br /&gt;
166	CBasePlayer::NetworkStateChanged_m_fFlags(void)&lt;br /&gt;
167	CBasePlayer::NetworkStateChanged_m_fFlags(void *)&lt;br /&gt;
168	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void)&lt;br /&gt;
169	CBasePlayer::NetworkStateChanged_m_nWaterLevel(void *)&lt;br /&gt;
170	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void)&lt;br /&gt;
171	CBasePlayer::NetworkStateChanged_m_hGroundEntity(void *)&lt;br /&gt;
172	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void)&lt;br /&gt;
173	CBasePlayer::NetworkStateChanged_m_vecBaseVelocity(void *)&lt;br /&gt;
174	CBasePlayer::NetworkStateChanged_m_flFriction(void)&lt;br /&gt;
175	CBasePlayer::NetworkStateChanged_m_flFriction(void *)&lt;br /&gt;
176	CBasePlayer::NetworkStateChanged_m_vecVelocity(void)&lt;br /&gt;
177	CBasePlayer::NetworkStateChanged_m_vecVelocity(void *)&lt;br /&gt;
178	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void)&lt;br /&gt;
179	CBasePlayer::NetworkStateChanged_m_vecViewOffset(void *)&lt;br /&gt;
180	CBaseAnimating::GetIdealSpeed(void)const&lt;br /&gt;
181	CBaseAnimating::GetIdealAccel(void)const&lt;br /&gt;
182	CBaseAnimatingOverlay::StudioFrameAdvance(void)&lt;br /&gt;
183	CBaseAnimating::IsActivityFinished(void)&lt;br /&gt;
184	CBaseAnimating::GetSequenceGroundSpeed(CStudioHdr *,int)&lt;br /&gt;
185	CBaseAnimating::ClampRagdollForce(Vector  const&amp;amp;,Vector*)&lt;br /&gt;
186	CBaseAnimating::BecomeRagdollOnClient(Vector  const&amp;amp;)&lt;br /&gt;
187	CBaseAnimating::IsRagdoll(void)&lt;br /&gt;
188	CBaseAnimating::CanBecomeRagdoll(void)&lt;br /&gt;
189	CBaseAnimatingOverlay::GetSkeleton(CStudioHdr *,Vector *,Quaternion *,int)&lt;br /&gt;
190	CBaseAnimating::GetBoneTransform(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
191	CBaseAnimating::SetupBones(matrix3x4_t *,int)&lt;br /&gt;
192	CBaseAnimating::CalculateIKLocks(float)&lt;br /&gt;
193	CBaseAnimatingOverlay::DispatchAnimEvents(CBaseAnimating *)&lt;br /&gt;
194	CBasePlayer::HandleAnimEvent(animevent_t *)&lt;br /&gt;
195	CBaseAnimating::PopulatePoseParameters(void)&lt;br /&gt;
196	CBaseAnimating::GetAttachment(int,matrix3x4_t &amp;amp;)&lt;br /&gt;
197	CBaseAnimating::InitBoneControllers(void)&lt;br /&gt;
198	CBaseAnimating::GetGroundSpeedVelocity(void)&lt;br /&gt;
199	CBaseAnimating::Ignite(float,bool,float,bool)&lt;br /&gt;
200	CBaseAnimating::IgniteLifetime(float)&lt;br /&gt;
201	CBaseAnimating::IgniteNumHitboxFires(int)&lt;br /&gt;
202	CBaseAnimating::IgniteHitboxFireScale(float)&lt;br /&gt;
203	CBaseAnimating::Extinguish(void)&lt;br /&gt;
204	CBaseCombatCharacter::SetLightingOriginRelative(CBaseEntity *)&lt;br /&gt;
205	CBaseAnimating::SetLightingOrigin(CBaseEntity *)&lt;br /&gt;
206	CBaseFlex::SetViewtarget(Vector  const&amp;amp;)&lt;br /&gt;
207	CBaseFlex::StartSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *,CChoreoActor *,CBaseEntity *)&lt;br /&gt;
208	CBaseFlex::ProcessSceneEvents(void)&lt;br /&gt;
209	CBaseFlex::ProcessSceneEvent(CSceneEventInfo *,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
210	CBaseFlex::ClearSceneEvent(CSceneEventInfo *,bool,bool)&lt;br /&gt;
211	CBaseFlex::CheckSceneEventCompletion(CSceneEventInfo *,float,CChoreoScene *,CChoreoEvent *)&lt;br /&gt;
212	CTFPlayer::PlayScene(char  const*,float,AI_Response *,IRecipientFilter *)&lt;br /&gt;
213	CBaseFlex::PlayAutoGeneratedSoundScene(char  const*)&lt;br /&gt;
214	CBasePlayer::GetPhysicsImpactDamageTable(void)&lt;br /&gt;
215	CBaseCombatCharacter::FInViewCone(CBaseEntity *)&lt;br /&gt;
216	CBaseCombatCharacter::FInViewCone(Vector  const&amp;amp;)&lt;br /&gt;
217	CBaseCombatCharacter::FInAimCone(CBaseEntity *)&lt;br /&gt;
218	CBaseCombatCharacter::FInAimCone(Vector  const&amp;amp;)&lt;br /&gt;
219	CBaseCombatCharacter::ShouldShootMissTarget(CBaseCombatCharacter*)&lt;br /&gt;
220	CBaseCombatCharacter::FindMissTarget(void)&lt;br /&gt;
221	CBaseCombatCharacter::HandleInteraction(int,void *,CBaseCombatCharacter*)&lt;br /&gt;
222	CBasePlayer::BodyAngles(void)&lt;br /&gt;
223	CBaseCombatCharacter::BodyDirection2D(void)&lt;br /&gt;
224	CBaseCombatCharacter::BodyDirection3D(void)&lt;br /&gt;
225	CBaseCombatCharacter::HeadDirection2D(void)&lt;br /&gt;
226	CBaseCombatCharacter::HeadDirection3D(void)&lt;br /&gt;
227	CBaseCombatCharacter::EyeDirection2D(void)&lt;br /&gt;
228	CBaseCombatCharacter::EyeDirection3D(void)&lt;br /&gt;
229	CTFPlayer::GiveAmmo(int,int,bool)&lt;br /&gt;
230	CBaseCombatCharacter::NPC_TranslateActivity(Activity)&lt;br /&gt;
231	CBaseCombatCharacter::Weapon_TranslateActivity(Activity,bool *)&lt;br /&gt;
232	CTFPlayer::Weapon_FrameUpdate(void)&lt;br /&gt;
233	CTFPlayer::Weapon_HandleAnimEvent(animevent_t *)&lt;br /&gt;
234	CBasePlayer::Weapon_CanUse(CBaseCombatWeapon *)&lt;br /&gt;
235	CBasePlayer::Weapon_Equip(CBaseCombatWeapon *)&lt;br /&gt;
236	CBaseCombatCharacter::Weapon_EquipAmmoOnly(CBaseCombatWeapon *)&lt;br /&gt;
237	CTFPlayer::Weapon_Drop(CBaseCombatWeapon *,Vector  const*,Vector  const*)&lt;br /&gt;
238	CTFPlayer::Weapon_Switch(CBaseCombatWeapon *,int)&lt;br /&gt;
239	CBasePlayer::Weapon_ShootPosition(void)&lt;br /&gt;
240	CBaseCombatCharacter::Weapon_CanSwitchTo(CBaseCombatWeapon *)&lt;br /&gt;
241	CBaseCombatCharacter::Weapon_SlotOccupied(CBaseCombatWeapon *)&lt;br /&gt;
242	CBaseCombatCharacter::Weapon_GetSlot(int)const&lt;br /&gt;
243	CBaseCombatCharacter::AddPlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
244	CBasePlayer::RemovePlayerItem(CBaseCombatWeapon *)&lt;br /&gt;
245	CBaseCombatCharacter::CanBecomeServerRagdoll(void)&lt;br /&gt;
246	CTFPlayer::OnTakeDamage_Alive(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
247	CBaseCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
248	CBaseCombatCharacter::OnTakeDamage_Dead(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
249	CBaseCombatCharacter::OnFriendDamaged(CBaseCombatCharacter*,CBaseEntity *)&lt;br /&gt;
250	CBaseCombatCharacter::NotifyFriendsOfDamage(CBaseEntity *)&lt;br /&gt;
251	CBaseCombatCharacter::OnPlayerKilledOther(CBaseEntity *,CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
252	CBaseCombatCharacter::GetDeathActivity(void)&lt;br /&gt;
253	CBaseCombatCharacter::CorpseGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
254	CBaseCombatCharacter::CorpseFade(void)&lt;br /&gt;
255	CBaseCombatCharacter::HasHumanGibs(void)&lt;br /&gt;
256	CBaseCombatCharacter::HasAlienGibs(void)&lt;br /&gt;
257	CTFPlayer::ShouldGib(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
258	CBaseCombatCharacter::OnKilledNPC(CBaseCombatCharacter*)&lt;br /&gt;
259	CBaseCombatCharacter::Event_Gibbed(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
260	CBasePlayer::Event_Dying(void)&lt;br /&gt;
261	CBaseCombatCharacter::BecomeRagdoll(CTakeDamageInfo  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
262	CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity *)&lt;br /&gt;
263	CBaseCombatCharacter::BecomeRagdollBoogie(CBaseEntity *,Vector  const&amp;amp;,float,int)&lt;br /&gt;
264	CBaseCombatCharacter::CheckTraceHullAttack(float,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
265	CBaseCombatCharacter::CheckTraceHullAttack(Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,Vector  const&amp;amp;,int,int,float,bool)&lt;br /&gt;
266	CBaseCombatCharacter::PushawayTouch(CBaseEntity *)&lt;br /&gt;
267	CBaseCombatCharacter::IRelationType(CBaseEntity *)&lt;br /&gt;
268	CBaseCombatCharacter::IRelationPriority(CBaseEntity *)&lt;br /&gt;
269	CBasePlayer::IsInAVehicle(void)const&lt;br /&gt;
270	CBasePlayer::GetVehicle(void)&lt;br /&gt;
271	CBasePlayer::GetVehicleEntity(void)&lt;br /&gt;
272	CBaseCombatCharacter::ExitVehicle(void)&lt;br /&gt;
273	CTFPlayer::RemoveAllWeapons(void)&lt;br /&gt;
274	CBaseCombatCharacter::CalcWeaponProficiency(CBaseCombatWeapon *)&lt;br /&gt;
275	CBaseCombatCharacter::GetAttackSpread(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
276	CBaseCombatCharacter::GetSpreadBias(CBaseCombatWeapon *,CBaseEntity *)&lt;br /&gt;
277	CBasePlayer::DoMuzzleFlash(void)&lt;br /&gt;
278	CBaseCombatCharacter::AddEntityRelationship(CBaseEntity *,Disposition_t,int)&lt;br /&gt;
279	CBaseCombatCharacter::RemoveEntityRelationship(CBaseEntity *)&lt;br /&gt;
280	CBaseCombatCharacter::AddClassRelationship(Class_T,Disposition_t,int)&lt;br /&gt;
281	CBaseCombatCharacter::OnChangeActiveWeapon(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
282	CBasePlayer::NetworkStateChanged_m_iAmmo(void)&lt;br /&gt;
283	CBasePlayer::NetworkStateChanged_m_iAmmo(void *)&lt;br /&gt;
284	CTFPlayer::CreateViewModel(int)&lt;br /&gt;
285	CBasePlayer::SetupVisibility(CBaseEntity *,unsigned char *,int)&lt;br /&gt;
286	CTFPlayer::WantsLagCompensationOnEntity(CBasePlayer  const*,CUserCmd  const*,CBitVec&amp;lt;2048&amp;gt;  const*)const&lt;br /&gt;
287	CBasePlayer::SharedSpawn(void)&lt;br /&gt;
288	CTFPlayer::ForceRespawn(void)&lt;br /&gt;
289	CTFPlayer::InitialSpawn(void)&lt;br /&gt;
290	CBasePlayer::InitHUD(void)&lt;br /&gt;
291	CBasePlayer::ShowViewPortPanel(char  const*,bool,KeyValues *)&lt;br /&gt;
292	CTFPlayer::PlayerDeathThink(void)&lt;br /&gt;
293	CBasePlayer::Jump(void)&lt;br /&gt;
294	CBasePlayer::Duck(void)&lt;br /&gt;
295	CTFPlayer::PreThink(void)&lt;br /&gt;
296	CTFPlayer::PostThink(void)&lt;br /&gt;
297	CTFPlayer::DamageEffect(float,int)&lt;br /&gt;
298	CTFPlayer::OnDamagedByExplosion(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
299	CBasePlayer::ShouldFadeOnDeath(void)&lt;br /&gt;
300	CBasePlayer::IsFakeClient(void)const&lt;br /&gt;
301	CBasePlayer::GetPlayerMins(void)const&lt;br /&gt;
302	CBasePlayer::GetPlayerMaxs(void)const&lt;br /&gt;
303	CBasePlayer::CalcRoll(QAngle  const&amp;amp;,Vector  const&amp;amp;,float,float)&lt;br /&gt;
304	CBasePlayer::PackDeadPlayerItems(void)&lt;br /&gt;
305	CTFPlayer::RemoveAllItems(bool)&lt;br /&gt;
306	CBasePlayer::Weapon_SetLast(CBaseCombatWeapon *)&lt;br /&gt;
307	CTFPlayer::Weapon_ShouldSetLast(CBaseCombatWeapon *,CBaseCombatWeapon *)&lt;br /&gt;
308	CBasePlayer::Weapon_ShouldSelectItem(CBaseCombatWeapon *)&lt;br /&gt;
309	CBasePlayer::UpdateClientData(void)&lt;br /&gt;
310	CBasePlayer::ExitLadder(void)&lt;br /&gt;
311	CBasePlayer::GetLadderSurface(Vector  const&amp;amp;)&lt;br /&gt;
312	CBasePlayer::SetFlashlightEnabled(bool)&lt;br /&gt;
313	CTFPlayer::FlashlightIsOn(void)&lt;br /&gt;
314	CTFPlayer::FlashlightTurnOn(void)&lt;br /&gt;
315	CTFPlayer::FlashlightTurnOff(void)&lt;br /&gt;
316	CBasePlayer::IsIlluminatedByFlashlight(CBaseEntity *,float *)&lt;br /&gt;
317	CBasePlayer::UpdateStepSound(surfacedata_t *,Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
318	CBasePlayer::PlayStepSound(Vector &amp;amp;,surfacedata_t *,float,bool)&lt;br /&gt;
319	CTFPlayer::GetStepSoundVelocities(float *,float *)&lt;br /&gt;
320	CTFPlayer::SetStepSoundTime(stepsoundtimes_t,bool)&lt;br /&gt;
321	CTFPlayer::DeathSound(CTakeDamageInfo  const&amp;amp;)&lt;br /&gt;
322	CTFPlayer::SetAnimation(PLAYER_ANIM)&lt;br /&gt;
323	CBasePlayer::ImpulseCommands(void)&lt;br /&gt;
324	CTFPlayer::CheatImpulseCommands(int)&lt;br /&gt;
325	CTFPlayer::ClientCommand(CCommand  const&amp;amp;)&lt;br /&gt;
326	CBasePlayer::StartObserverMode(int)&lt;br /&gt;
327	CBasePlayer::StopObserverMode(void)&lt;br /&gt;
328	CTFPlayer::ModeWantsSpectatorGUI(int)&lt;br /&gt;
329	CTFPlayer::SetObserverMode(int)&lt;br /&gt;
330	CBasePlayer::GetObserverMode(void)&lt;br /&gt;
331	CTFPlayer::SetObserverTarget(CBaseEntity *)&lt;br /&gt;
332	CBasePlayer::ObserverUse(bool)&lt;br /&gt;
333	CBasePlayer::GetObserverTarget(void)&lt;br /&gt;
334	CTFPlayer::FindNextObserverTarget(bool)&lt;br /&gt;
335	CTFPlayer::GetNextObserverSearchStartPoint(bool)&lt;br /&gt;
336	CTFPlayer::IsValidObserverTarget(CBaseEntity *)&lt;br /&gt;
337	CTFPlayer::CheckObserverSettings(void)&lt;br /&gt;
338	CBasePlayer::JumptoPosition(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
339	CBasePlayer::ForceObserverMode(int)&lt;br /&gt;
340	CBasePlayer::ResetObserverMode(void)&lt;br /&gt;
341	CTFPlayer::ValidateCurrentObserverTarget(void)&lt;br /&gt;
342	CTFPlayer::AttemptToExitFreezeCam(void)&lt;br /&gt;
343	CBasePlayer::StartReplayMode(float,float,int)&lt;br /&gt;
344	CBasePlayer::StopReplayMode(void)&lt;br /&gt;
345	CBasePlayer::GetDelayTicks(void)&lt;br /&gt;
346	CBasePlayer::GetReplayEntity(void)&lt;br /&gt;
347	CBasePlayer::CreateCorpse(void)&lt;br /&gt;
348	CTFPlayer::EntSelectSpawnPoint(void)&lt;br /&gt;
349	CBasePlayer::GetInVehicle(IServerVehicle *,int)&lt;br /&gt;
350	CBasePlayer::LeaveVehicle(Vector  const&amp;amp;,QAngle  const&amp;amp;)&lt;br /&gt;
351	CBasePlayer::OnVehicleStart(void)&lt;br /&gt;
352	CBasePlayer::OnVehicleEnd(Vector &amp;amp;)&lt;br /&gt;
353	CTFPlayer::BumpWeapon(CBaseCombatWeapon *)&lt;br /&gt;
354	CBasePlayer::SelectLastItem(void)&lt;br /&gt;
355	CBasePlayer::SelectItem(char  const*,int)&lt;br /&gt;
356	CTFPlayer::ItemPostFrame(void)&lt;br /&gt;
357	CBasePlayer::GiveNamedItem(char  const*,int)&lt;br /&gt;
358	CBasePlayer::CheckTrainUpdate(void)&lt;br /&gt;
359	CBasePlayer::SetPlayerUnderwater(bool)&lt;br /&gt;
360	CBasePlayer::CanBreatheUnderwater(void)const&lt;br /&gt;
361	CBasePlayer::PlayerUse(void)&lt;br /&gt;
362	CBasePlayer::PlayUseDenySound(void)&lt;br /&gt;
363	CBasePlayer::FindUseEntity(void)&lt;br /&gt;
364	CBasePlayer::IsUseableEntity(CBaseEntity *,unsigned int)&lt;br /&gt;
365	CBasePlayer::PickupObject(CBaseEntity *,bool)&lt;br /&gt;
366	CBasePlayer::ForceDropOfCarriedPhysObjects(CBaseEntity *)&lt;br /&gt;
367	CBasePlayer::GetHeldObjectMass(IPhysicsObject *)&lt;br /&gt;
368	CBasePlayer::UpdateGeigerCounter(void)&lt;br /&gt;
369	CBasePlayer::GetAutoaimVector(float)&lt;br /&gt;
370	CBasePlayer::GetAutoaimVector(float,float)&lt;br /&gt;
371	CBasePlayer::GetAutoaimVector(autoaim_params_t &amp;amp;)&lt;br /&gt;
372	CBasePlayer::ShouldAutoaim(void)&lt;br /&gt;
373	CBasePlayer::ForceClientDllUpdate(void)&lt;br /&gt;
374	CBasePlayer::ProcessUsercmds(CUserCmd *,int,int,int,bool)&lt;br /&gt;
375	CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)&lt;br /&gt;
376	CTFPlayer::ChangeTeam(int,bool,bool)&lt;br /&gt;
377	CTFPlayer::CanHearAndReadChatFrom(CBasePlayer *)&lt;br /&gt;
378	CBaseMultiplayerPlayer::CanSpeak(void)&lt;br /&gt;
379	CBasePlayer::ModifyOrAppendPlayerCriteria(AI_CriteriaSet &amp;amp;)&lt;br /&gt;
380	CBasePlayer::CheckChatText(char *,int)&lt;br /&gt;
381	CTFPlayer::CreateRagdollEntity(void)&lt;br /&gt;
382	CTFPlayer::ShouldAnnounceAchievement(void)&lt;br /&gt;
383	CBasePlayer::EquipWearable(CWearableItem *)&lt;br /&gt;
384	CBasePlayer::RemoveWearable(CWearableItem *)&lt;br /&gt;
385	CBasePlayer::IsFollowingPhysics(void)&lt;br /&gt;
386	CBasePlayer::InitVCollision(Vector  const&amp;amp;,Vector  const&amp;amp;)&lt;br /&gt;
387	CBasePlayer::UpdatePhysicsShadowToCurrentPosition(void)&lt;br /&gt;
388	CBasePlayer::Hints(void)&lt;br /&gt;
389	CTFPlayer::IsReadyToPlay(void)&lt;br /&gt;
390	CTFPlayer::IsReadyToSpawn(void)&lt;br /&gt;
391	CTFPlayer::ShouldGainInstantSpawn(void)&lt;br /&gt;
392	CTFPlayer::ResetPerRoundStats(void)&lt;br /&gt;
393	CTFPlayer::ResetScores(void)&lt;br /&gt;
394	CBasePlayer::EquipSuit(bool)&lt;br /&gt;
395	CBasePlayer::RemoveSuit(void)&lt;br /&gt;
396	CTFPlayer::CommitSuicide(bool,bool)&lt;br /&gt;
397	CBasePlayer::CommitSuicide(Vector  const&amp;amp;,bool,bool)&lt;br /&gt;
398	CBasePlayer::IsBot(void)const&lt;br /&gt;
399	CBaseMultiplayerPlayer::GetExpresser(void)&lt;br /&gt;
400	CBasePlayer::SpawnArmorValue(void)const&lt;br /&gt;
401	CBasePlayer::NetworkStateChanged_m_ArmorValue(void)&lt;br /&gt;
402	CBasePlayer::NetworkStateChanged_m_ArmorValue(void *)&lt;br /&gt;
403	CBasePlayer::HasHaptics(void)&lt;br /&gt;
404	CBasePlayer::SetHaptics(bool)&lt;br /&gt;
405	CBasePlayer::PlayerSolidMask(bool)const&lt;br /&gt;
406	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::NoteSpeaking(float,float)&lt;br /&gt;
407	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::Speak(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
408	CAI_ExpresserHost&amp;lt;CBasePlayer&amp;gt;::PostSpeakDispatchResponse(char  const*,AI_Response *)&lt;br /&gt;
409	CBaseMultiplayerPlayer::SpeakIfAllowed(char  const*,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
410	CTFPlayer::SpeakConceptIfAllowed(int,char  const*,char *,unsigned int,IRecipientFilter *)&lt;br /&gt;
411	CTFPlayer::CanSpeakVoiceCommand(void)&lt;br /&gt;
412	CTFPlayer::ShouldShowVoiceSubtitleToEnemy(void)&lt;br /&gt;
413	CTFPlayer::NoteSpokeVoiceCommand(char  const*)&lt;br /&gt;
414	CTFPlayer::OnAchievementEarned(int)&lt;br /&gt;
415	CBaseMultiplayerPlayer::GetMultiplayerExpresser(void)&lt;br /&gt;
416	CTFPlayer::CalculateTeamBalanceScore(void)&lt;br /&gt;
417	CBaseMultiplayerPlayer::CreateExpresser(void)&lt;br /&gt;
418	CTFPlayer::DetermineAssistForKill(CTFPlayer*)&lt;br /&gt;
419	CTFPlayer::SetNumberofDominations(int)&lt;br /&gt;
420	CTFPlayer::GetNumberofDominations(void)&lt;br /&gt;
421	CTFPlayer::GetAttributeManager(void)&lt;br /&gt;
422	CTFPlayer::GetAttributeContainer(void)&lt;br /&gt;
423	CTFPlayer::GetAttributeOwner(void)&lt;br /&gt;
424	CTFPlayer::ReapplyProvision(void)&lt;br /&gt;
425	CTFPlayer::InventoryUpdated(CPlayerInventory *,EItemRequestResult)&lt;br /&gt;
426	CTFPlayer::GiveNamedItem(char  const*,int,CScriptCreatedItem *,bool)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Compiling_SourceMod_Plugins&amp;diff=7011</id>
		<title>Compiling SourceMod Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Compiling_SourceMod_Plugins&amp;diff=7011"/>
		<updated>2009-03-09T15:21:43Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ok, so you've read the [[Introduction to SourcePawn]] and [[Introduction to SourceMod Plugins]] and now you want to actually compile a plugin.&lt;br /&gt;
&lt;br /&gt;
You'll need the compiler which is included in the .../sourcemod/scripting/ folder of the [http://www.sourcemod.net/downloads.php main distribution] (not the [http://www.sourcemod.net/sdk.php SDK]). Windows users will need [http://www.7-zip.org/ 7-zip] to extract the .tar.gz files.&lt;br /&gt;
&lt;br /&gt;
In Windows, open up a command prompt (Start-&amp;gt;Run or WindowsKey+R, then &amp;quot;cmd&amp;quot;):&lt;br /&gt;
 cd &amp;lt;sourcemod&amp;gt;\scripting&lt;br /&gt;
 spcomp myplugin.sp&lt;br /&gt;
[http://www.computerhope.com/cdhlp.htm cd command reference]&lt;br /&gt;
&lt;br /&gt;
In Linux use:&lt;br /&gt;
 ./compile.sh myplugin.sp&lt;br /&gt;
&lt;br /&gt;
Now simply move the .smx (not .sp) file from .../sourcemod/scripting/ to the .../sourcemod/plugins/ folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://forums.alliedmods.net/showthread.php?t=52664 Reference Source]&lt;br /&gt;
&lt;br /&gt;
See Also: [http://forums.alliedmods.net/forumdisplay.php?f=107 Scripting Forum]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_SourceMod&amp;diff=6784</id>
		<title>Installing SourceMod</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_SourceMod&amp;diff=6784"/>
		<updated>2009-01-05T20:47:36Z</updated>

		<summary type="html">&lt;p&gt;DJ Tsunami: /* Local Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing SourceMod is very simple, and it can be added with almost no configuration changes.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
SourceMod requires [[Metamod:Source]] 1.4.3 or higher. [http://www.metamodsource.net/ Click here] to visit the Metamod:Source homepage. Instructions to install SourceMM muanually can be found [http://wiki.alliedmods.net/index.php/Installing_Metamod:Source here].&lt;br /&gt;
&lt;br /&gt;
SourceMod will run on any mod built using the Source SDK.  It also supports &amp;quot;The Ship,&amp;quot; which uses the Source engine.&lt;br /&gt;
&lt;br /&gt;
=Uploading/Installing=&lt;br /&gt;
==Local Server==&lt;br /&gt;
To install SourceMod locally, simply extract the &amp;lt;tt&amp;gt;.zip&amp;lt;/tt&amp;gt; (Windows) or &amp;lt;tt&amp;gt;.tar.gz&amp;lt;/tt&amp;gt; (Linux) package to your mod folder (i.e. &amp;lt;tt&amp;gt;cstrike&amp;lt;/tt&amp;gt; for Counter-Strike, &amp;lt;tt&amp;gt;dod&amp;lt;/tt&amp;gt; for Day of Defeat, et cetera).&lt;br /&gt;
&lt;br /&gt;
==Remote Server==&lt;br /&gt;
To install SourceMod remotely, first extract the &amp;lt;tt&amp;gt;.zip&amp;lt;/tt&amp;gt; (Windows) or &amp;lt;tt&amp;gt;.tar.gz&amp;lt;/tt&amp;gt; (Linux) package to your local computer (for example, your Desktop).  You will see an &amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt; folder.  &lt;br /&gt;
&lt;br /&gt;
Using a tool such as [http://www.google.com/search?q=FTP FTP], locate your mod folder (i.e. &amp;lt;tt&amp;gt;cstrike&amp;lt;/tt&amp;gt; for Counter-Strike, &amp;lt;tt&amp;gt;dod&amp;lt;/tt&amp;gt; for Day of Defeat, et cetera).  Underneath this folder, you should have an &amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt; folder (if not, Metamod:Source is probably not installed).  From your local &amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt; folder, upload the entire contents to your remote &amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt; folder.  When done, your remote &amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt; folder should have a &amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
If you have trouble with these steps, you need to get acquainted with FTP and server management.  However, you can also ask your server provider for help.  Some providers also have web interfaces for managing your server.&lt;br /&gt;
&lt;br /&gt;
=Checking the Install=&lt;br /&gt;
Your folder layout should look like:&lt;br /&gt;
*&amp;lt;tt&amp;gt;[mod]&amp;lt;/tt&amp;gt; - Your mod's folder&lt;br /&gt;
**&amp;lt;tt&amp;gt;addons&amp;lt;/tt&amp;gt;&lt;br /&gt;
***&amp;lt;tt&amp;gt;metamod&amp;lt;/tt&amp;gt; - Metamod:Source&lt;br /&gt;
***&amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt; - SourceMod&lt;br /&gt;
&lt;br /&gt;
Once SourceMod is uploaded/copied and configured with Metamod:Source, restart your server completely.  If it is local, shut it down and restart it.  If it is remote, you may need to ask your server provider for help.  However, it is often safe to issue a &amp;quot;quit&amp;quot; command via [[rcon]], and most providers will automatically restart your server.&lt;br /&gt;
&lt;br /&gt;
First, in your [[server console]] (not client console), type:&lt;br /&gt;
&amp;lt;pre&amp;gt;meta list&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the install worked, you will see something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;] meta list&lt;br /&gt;
Listing 1 plugin:&lt;br /&gt;
    [01] SourceMod (1.1.0.2489) by AlliedModders LLC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then be able to use the SourceMod root console command, which can be invoked with simply:&lt;br /&gt;
&amp;lt;pre&amp;gt;sm&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;] sm version&lt;br /&gt;
 SourceMod Version Information:&lt;br /&gt;
    SourceMod Version: 1.1.0.2489&lt;br /&gt;
    SourcePawn Engine: SourcePawn 1.1, jit-x86 (build 1.1.0-svn)&lt;br /&gt;
    SourcePawn API: v1 = 4, v2 = 2&lt;br /&gt;
    Compiled on: Sep  5 2008 02:02:12&lt;br /&gt;
    http://www.sourcemod.net/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lastly, assuming you have already setup your administration user, you can test the in game menu by joining the server, and in the client console type the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;sm_admin&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see a menu popup with all you options.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If the install failed, you will generally see one of four symptoms.  &lt;br /&gt;
&lt;br /&gt;
==Metamod reports NOFILE or FAILED==&lt;br /&gt;
If &amp;quot;meta list&amp;quot; replies with something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;] meta list&lt;br /&gt;
-Id- Name                  Version     Author           Status  &lt;br /&gt;
[01] -                     -           -                NOFILE  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most likely, either the files are not located in the correct place, or the file could not be loaded.  For more information, use the following command (except use the correct list number):&lt;br /&gt;
&amp;lt;pre&amp;gt;meta list 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Metamod lists no plugins==&lt;br /&gt;
If &amp;quot;meta list&amp;quot; replies with something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;] meta list&lt;br /&gt;
-Id- Name                  Version     Author           Status  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You forgot to add SourceMod to the &amp;lt;tt&amp;gt;addons/metamod/metaplugins.ini&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
Or if that doesn't fix your problem, make sure you are using the correct build of Sourcemod (zip = windows, tar = linux).&lt;br /&gt;
&lt;br /&gt;
==Metamod says nothing==&lt;br /&gt;
If &amp;quot;meta list&amp;quot; has no reply at all, Metamod:Source is not properly installed. [http://wiki.alliedmods.net/index.php/Installing_SourceMM This wiki page] may provide you with clues on how to solve this problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
See [[SourceMod Support]].&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>DJ Tsunami</name></author>
		
	</entry>
</feed>