<?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=Bacardi</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=Bacardi"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/Bacardi"/>
	<updated>2026-05-30T22:33:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=SQL_(SourceMod_Scripting)&amp;diff=11360</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=11360"/>
		<updated>2022-09-25T18:16:40Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* External Links */ update link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|SQL (SourceMod_Scripting)}}&lt;br /&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, PostgreSQL (pgsql), 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_ConnectCustom&amp;lt;/tt&amp;gt; and manually specify all connection parameters by passing a keyvalue handle containing them.&lt;br /&gt;
&lt;br /&gt;
Example of a typical connection:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;char error[255];&lt;br /&gt;
Database db = SQL_DefConnect(error, sizeof(error));&lt;br /&gt;
&lt;br /&gt;
if (db == null)&lt;br /&gt;
{&lt;br /&gt;
    PrintToServer(&amp;quot;Could not connect: %s&amp;quot;, error);&lt;br /&gt;
} &lt;br /&gt;
else &lt;br /&gt;
{&lt;br /&gt;
    delete db;&lt;br /&gt;
}&amp;lt;/sourcepawn&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;sourcepawn&amp;gt;if (!SQL_FastQuery(db, &amp;quot;UPDATE stats SET players = players + 1&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
    char 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;/sourcepawn&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;sourcepawn&amp;gt;DBResultSet query = SQL_Query(db, &amp;quot;SELECT userid FROM vb_user WHERE username = 'BAILOPAN'&amp;quot;);&lt;br /&gt;
if (query == null)&lt;br /&gt;
{&lt;br /&gt;
    char 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;
} &lt;br /&gt;
else &lt;br /&gt;
{&lt;br /&gt;
    /* Process results here! */&lt;br /&gt;
&lt;br /&gt;
    /* Free the Handle */&lt;br /&gt;
    delete query;&lt;br /&gt;
}&amp;lt;/sourcepawn&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;sourcepawn&amp;gt;int GetSomeInfo(Database db, const char[] name)&lt;br /&gt;
{&lt;br /&gt;
    DBResultSet hQuery;&lt;br /&gt;
    char query[100];&lt;br /&gt;
&lt;br /&gt;
    /* Create enough space to make sure our string is quoted properly  */&lt;br /&gt;
    int buffer_len = strlen(name) * 2 + 1;&lt;br /&gt;
    char[] new_name = new char[buffer_len];&lt;br /&gt;
&lt;br /&gt;
    /* Ask the SQL driver to make sure our string is safely quoted */&lt;br /&gt;
    db.Escape(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)) == null)&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;
    delete hQuery;&lt;br /&gt;
    &lt;br /&gt;
    /* return info; */&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observe a version with prepared statements:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;DBStatement hUserStmt = null;&lt;br /&gt;
int GetSomeInfo(Database db, const char[] name)&lt;br /&gt;
{&lt;br /&gt;
    /* Check if we haven't already created the statement */&lt;br /&gt;
    if (hUserStmt == null)&lt;br /&gt;
    {&lt;br /&gt;
        char 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 == null)&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;
    /* Get some info here */&lt;br /&gt;
    /* return info; */&lt;br /&gt;
}&amp;lt;/sourcepawn&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;sql&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;/sql&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;sourcepawn&amp;gt;void 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;
    char name[MAX_NAME_LENGTH];&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(Database db, int age)&lt;br /&gt;
{&lt;br /&gt;
    char 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;
    DBResultSet hQuery = SQL_Query(db, query);&lt;br /&gt;
    if (hQuery == null)&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;
    delete hQuery;&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DBStatement hAgeStmt = null;&lt;br /&gt;
bool GetByAge_Statement(Database db, int age)&lt;br /&gt;
{&lt;br /&gt;
    if (hAgeSmt == null)&lt;br /&gt;
    {&lt;br /&gt;
        char 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))) == null)&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;/sourcepawn&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;
=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 (except connecting) use the same callback for result notification: &amp;lt;tt&amp;gt;SQLQueryCallback&amp;lt;/tt&amp;gt;.  The parameters are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;db&amp;lt;/tt&amp;gt; - The cloned database handle.  If the db handle was not found or was invalidated, &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; is passed.&lt;br /&gt;
*&amp;lt;tt&amp;gt;results&amp;lt;/tt&amp;gt; - Result object, or null on failure.&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;
Connecting however uses a different callback: &amp;lt;tt&amp;gt;SQLConnectCallback&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following parameters are used for the threaded connection callback:&lt;br /&gt;
*&amp;lt;tt&amp;gt;db&amp;lt;/tt&amp;gt;: Handle to the database connection, or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; if it could not be found.&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;sourcepawn&amp;gt;Database hDatabase = null;&lt;br /&gt;
&lt;br /&gt;
void StartSQL()&lt;br /&gt;
{&lt;br /&gt;
    Database.Connect(GotDatabase);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void GotDatabase(Database db, const char[] error, any data)&lt;br /&gt;
{&lt;br /&gt;
    if (db == null)&lt;br /&gt;
    {&lt;br /&gt;
        LogError(&amp;quot;Database failure: %s&amp;quot;, error);&lt;br /&gt;
    } &lt;br /&gt;
    else &lt;br /&gt;
    {&lt;br /&gt;
        hDatabase = db;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/sourcepawn&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;null&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;null&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;sourcepawn&amp;gt;void CheckSteamID(int userid, const char[] auth)&lt;br /&gt;
{&lt;br /&gt;
    char query[255];&lt;br /&gt;
    FormatEx(query, sizeof(query), &amp;quot;SELECT userid FROM users WHERE steamid = '%s'&amp;quot;, auth);&lt;br /&gt;
    hdatabase.Query(T_CheckSteamID, query, userid);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void T_CheckSteamID(Database db, DBResultSet results, const char[] error, any data)&lt;br /&gt;
{&lt;br /&gt;
    int client = 0;&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 (db == null || results == null || error[0] != '\0')&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;
    }&lt;br /&gt;
    else if (results.RowCount == 0)&lt;br /&gt;
    {&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;/sourcepawn&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;sourcepawn&amp;gt;bool GetByAge_Query(Database db, int age)&lt;br /&gt;
{&lt;br /&gt;
    char query[100];&lt;br /&gt;
    FormatEx(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;
&lt;br /&gt;
    DBResultSet hQuery = SQL_Query(db, query);&lt;br /&gt;
    if (hQuery == null)&lt;br /&gt;
    {&lt;br /&gt;
        SQL_UnlockDatabase(db);&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    SQL_UnlockDatabase(db);&lt;br /&gt;
&lt;br /&gt;
    PrintResults(hQuery);&lt;br /&gt;
&lt;br /&gt;
    delete hQuery;&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&amp;lt;/sourcepawn&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;
*[https://sqlitebrowser.org/ DB Browser for SQLite]&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>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=11247</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=11247"/>
		<updated>2021-10-16T14:32:24Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Arrays */  const int[] array&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 = new int[size];&lt;br /&gt;
	int 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>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Creating_Natives_(SourceMod_Scripting)&amp;diff=11246</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=11246"/>
		<updated>2021-10-16T14:22:27Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Arrays */  : error 161: brackets after variable name indicate a fixed-size array, but a dynamic size was given - did you mean to use 'new int[size]' syntax?&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 = new int[size];&lt;br /&gt;
	int 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>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Function_Calling_API_(SourceMod_Scripting)&amp;diff=11224</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=11224"/>
		<updated>2021-08-01T21:31:38Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Private Forwards */ remove const&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;sourcepawn&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;
    }&lt;br /&gt;
    else if (!attacker)&lt;br /&gt;
    {&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;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&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;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An indirect way to call this function would be:&lt;br /&gt;
&amp;lt;sourcepawn&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(event.GetInt(&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;/sourcepawn&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;sourcepawn&amp;gt;forward void OnClientDied(int attacker, int victim, const char[] weapon, bool headshot);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&amp;lt;sourcepawn&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;/sourcepawn&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;sourcepawn&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;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of this might look like:&lt;br /&gt;
&amp;lt;sourcepawn&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;
&lt;br /&gt;
    CreateNative(&amp;quot;HookClientDeath&amp;quot;, Native_HookClientDeath);&lt;br /&gt;
&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;/sourcepawn&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;sourcepawn&amp;gt;typedef MyFunction = function void (int client);&lt;br /&gt;
native void My_NativeEx(MyFunction func);&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&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, 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;
&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;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=KeyValues_(SourceMod_Scripting)&amp;diff=10993</id>
		<title>KeyValues (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=KeyValues_(SourceMod_Scripting)&amp;diff=10993"/>
		<updated>2020-04-03T13:00:34Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: kv.GoBack(kv) -&amp;gt; kv.GoBack()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KeyValues are simple, tree-based structures used for storing nested sections containing key/value pairs.  Detailed information on KeyValues can be seen at the [http://developer.valvesoftware.com/wiki/KeyValues_class Valve Developer Wiki].  &lt;br /&gt;
&lt;br /&gt;
All KeyValues specific functions in this document are from &amp;lt;tt&amp;gt;public/include/keyvalues.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Note: While the following examples are correct code-wise, over the years they have occasionally led people to use KeyValues in cases where they really should be using a [https://wiki.alliedmods.net/SQL_%28SourceMod_Scripting%29 database] instead.''&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
KeyValues consist of a ''nodes'', or ''sections'', which contain pairs of keys and values.  A section looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;section&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;key&amp;quot; &amp;quot;value&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;&amp;quot;section&amp;quot;&amp;lt;/tt&amp;gt; string denotes the section's name.  The &amp;lt;tt&amp;gt;&amp;quot;key&amp;quot;&amp;lt;/tt&amp;gt; string is the key name, and the &amp;lt;tt&amp;gt;&amp;quot;value&amp;quot;&amp;lt;/tt&amp;gt;&amp;quot; string is the value.&lt;br /&gt;
&lt;br /&gt;
KeyValues structures are created with &amp;lt;tt&amp;gt;new KeyValues()&amp;lt;/tt&amp;gt;.  The Handle must be freed when finished in order to avoid a memory leak.&lt;br /&gt;
&lt;br /&gt;
=Files=&lt;br /&gt;
KeyValues can be exported and imported via KeyValues files.  These files always consist of a root node and any number of sub-keys or sub-sections.  For example, a file might look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;MyFile&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;STEAM_0:0:7&amp;quot;&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;name&amp;quot;    &amp;quot;crab&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &amp;lt;tt&amp;gt;STEAM_0:0:7&amp;lt;/tt&amp;gt; is a section under &amp;lt;tt&amp;gt;MyFile&amp;lt;/tt&amp;gt;, the root node.  &lt;br /&gt;
&lt;br /&gt;
To load KeyValues from a file, use &amp;lt;tt&amp;gt;kv.ImportFromFile&amp;lt;/tt&amp;gt;  To save KeyValues to a file, use &amp;lt;tt&amp;gt;kv.ExportToFile&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;kv&amp;lt;/tt&amp;gt; is a Handle to a KeyValues structure.&lt;br /&gt;
&lt;br /&gt;
=Traversal=&lt;br /&gt;
SourceMod provides natives for traversing over a KeyValues structure.  However, it is important to understand how this traversal works.  Internally, SourceMod keeps track of two pieces of information:&lt;br /&gt;
*The root node&lt;br /&gt;
*A traversal stack&lt;br /&gt;
&lt;br /&gt;
Since a KeyValues structure is inherently recursive (it's a tree), the ''traversal stack'' is used to save a history of each ''traversal'' made (a traversal being a recursive dive into the tree, where the current nesting level deepens by one section).  The ''top'' of this stack is where all operations take place.  &lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;tt&amp;gt;kv.JumpToKey&amp;lt;/tt&amp;gt; will attempt to find a sub-key under the current section.  If it succeeds, the position in the tree has changed by moving down one level, and thus this position is pushed onto the traversal stack.  Now, operations such as &amp;lt;tt&amp;gt;kv.GetString&amp;lt;/tt&amp;gt; will use this new position.&lt;br /&gt;
&lt;br /&gt;
There are natives which change the position but do not change the traversal stack.  For example, &amp;lt;tt&amp;gt;kv.GotoNextKey&amp;lt;/tt&amp;gt; will change the current section being viewed, but there are no push/pop operations to the traversal stack.  This is because the nesting level did not change; it advances to the next section at the same level, rather than finding a section a level deeper.&lt;br /&gt;
&lt;br /&gt;
More traversal natives:&lt;br /&gt;
*&amp;lt;tt&amp;gt;kv.GotoFirstSubKey&amp;lt;/tt&amp;gt; - Finds the first sub-section under the current section.  This pushes the section onto the traversal stack.&lt;br /&gt;
*&amp;lt;tt&amp;gt;kv.GoBack&amp;lt;/tt&amp;gt; - Pops the traversal stack (moves up one level).&lt;br /&gt;
*&amp;lt;tt&amp;gt;kv.Rewind&amp;lt;/tt&amp;gt; - Clears the traversal stack so the current position is the root node.&lt;br /&gt;
&lt;br /&gt;
==Basic Lookup==&lt;br /&gt;
Let's take our &amp;lt;tt&amp;gt;MyFile&amp;lt;/tt&amp;gt; example from above.  How could we retrieve the name &amp;quot;crab&amp;quot; given the Steam ID?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;bool GetNameFromSteamID(const char[] steamid, char[] name, int maxlength)&lt;br /&gt;
{&lt;br /&gt;
    KeyValues kv = new KeyValues(&amp;quot;MyFile&amp;quot;);&lt;br /&gt;
    kv.ImportFromFile(&amp;quot;myfile.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (!kv.JumpToKey(steamid))&lt;br /&gt;
    {&lt;br /&gt;
        delete kv;&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    kv.GetString(&amp;quot;name&amp;quot;, name, maxlength);&lt;br /&gt;
    delete kv;&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' &amp;lt;tt&amp;gt;kv.JumpToKey&amp;lt;/tt&amp;gt; is a traversal native that changes the nesting level of the traversal stack.  However, &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; will not accidentally close only the current level of the KeyValues structure.  It will close the entire thing.&lt;br /&gt;
&lt;br /&gt;
==Iterative Lookup==&lt;br /&gt;
Let's modify our previous example to use iteration.  This has the same functionality, but demonstrates how to browse over many sections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;bool GetNameFromSteamID(const char[] steamid, char[] name, int maxlength)&lt;br /&gt;
{&lt;br /&gt;
    KeyValues kv = new KeyValues(&amp;quot;MyFile&amp;quot;);&lt;br /&gt;
    kv.ImportFromFile(&amp;quot;myfile.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Jump into the first subsection&lt;br /&gt;
    if (!kv.GotoFirstSubKey())&lt;br /&gt;
    {&lt;br /&gt;
        delete kv;&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Iterate over subsections at the same nesting level&lt;br /&gt;
    char buffer[255];&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        kv.GetSectionName(buffer, sizeof(buffer));&lt;br /&gt;
        if (StrEqual(buffer, steamid))&lt;br /&gt;
        {&lt;br /&gt;
            kv.GetString(&amp;quot;name&amp;quot;, name, maxlength);&lt;br /&gt;
            delete kv;&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
    } while (kv.GotoNextKey());&lt;br /&gt;
&lt;br /&gt;
    delete kv;&lt;br /&gt;
    &lt;br /&gt;
    return false;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this example, note that &amp;lt;tt&amp;gt;kv.GotoNextKey&amp;lt;/tt&amp;gt; is an iterative function, not a traversal one.  Since it does not change the nesting level, we don't need to call &amp;lt;tt&amp;gt;kv.GoBack&amp;lt;/tt&amp;gt; to return and continue iterating.&lt;br /&gt;
&lt;br /&gt;
==Full Traversal==&lt;br /&gt;
Let's say we wanted to browse every section of a KeyValues file.  An example of this might look like:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;void BrowseKeyValues(KeyValues kv)&lt;br /&gt;
{&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        // You can read the section/key name by using kv.GetSectionName here.&lt;br /&gt;
&lt;br /&gt;
        if (kv.GotoFirstSubKey(false))&lt;br /&gt;
        {&lt;br /&gt;
            // Current key is a section. Browse it recursively.&lt;br /&gt;
            BrowseKeyValues(kv);&lt;br /&gt;
            kv.GoBack();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            // Current key is a regular key, or an empty section.&lt;br /&gt;
            if (kv.GetDataType(NULL_STRING) != KvData_None)&lt;br /&gt;
            {&lt;br /&gt;
                // Read value of key here (use NULL_STRING as key name). You can&lt;br /&gt;
                // also get the key name by using kv.GetSectionName here.&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                // Found an empty sub section. It can be handled here if necessary.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    } while (kv.GotoNextKey(false));&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function will browse an entire KeyValues structure.  Note that every successful call to &amp;lt;tt&amp;gt;kv.GotoFirstSubKey&amp;lt;/tt&amp;gt; is paired with a call to &amp;lt;tt&amp;gt;kv.GoBack&amp;lt;/tt&amp;gt;.  This is because the former pushes onto the traversal stack.  We must pop the position off so we can continue browsing from our old position.&lt;br /&gt;
&lt;br /&gt;
Also note that &amp;lt;tt&amp;gt;keyOnly&amp;lt;/tt&amp;gt; is set to false in both &amp;lt;tt&amp;gt;kv.GotoFirstSubKey&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kv.GotoNextKey&amp;lt;/tt&amp;gt; so that it will jump to regular keys and not just between sections.  Because of this we also need to check if &amp;lt;tt&amp;gt;kv.GotoFirstSubKey&amp;lt;/tt&amp;gt; succeeded moving to a regular key before we read the value. This is simply done by getting the data type of the current key.  If &amp;lt;tt&amp;gt;kv.GotoFirstSubKey&amp;lt;/tt&amp;gt; failed to move to any key (the section is empty), the cursor is still on the section, which doesn't have a data type.  If there is a data type, we've confirmed that it's a regular key.&lt;br /&gt;
&lt;br /&gt;
=Deletion=&lt;br /&gt;
There are two ways to delete sections from a KeyValues structure:&lt;br /&gt;
*&amp;lt;tt&amp;gt;kv.DeleteKey&amp;lt;/tt&amp;gt; - Safely removes a named sub-section and any of its child sections/keys.&lt;br /&gt;
*&amp;lt;tt&amp;gt;kv.DeleteThis&amp;lt;/tt&amp;gt; - Safely removes the current position if possible.&lt;br /&gt;
&lt;br /&gt;
==Simple Deletion==&lt;br /&gt;
First, let's use our &amp;quot;basic lookup&amp;quot; example to delete a Steam ID section:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;&lt;br /&gt;
void RemoveSteamID(const char[] steamid)&lt;br /&gt;
{&lt;br /&gt;
    KeyValues kv = new KeyValues(&amp;quot;MyFile&amp;quot;);&lt;br /&gt;
    kv.ImportFromFile(&amp;quot;myfile.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (!kv.JumpToKey(steamid))&lt;br /&gt;
    {&lt;br /&gt;
        delete kv;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    kv.DeleteThis();&lt;br /&gt;
    kv.Rewind();&lt;br /&gt;
    kv.ExportToFile(&amp;quot;myfile.txt&amp;quot;);&lt;br /&gt;
    delete kv;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' We called &amp;lt;tt&amp;gt;kv.Rewind&amp;lt;/tt&amp;gt; so the file would be dumped from the root position, instead of the current one.&lt;br /&gt;
&lt;br /&gt;
==Iterative Deletion==&lt;br /&gt;
Likewise, let's show how our earlier iterative example could be adapted for deleting a section.  For this we can use &amp;lt;tt&amp;gt;kv.DeleteThis&amp;lt;/tt&amp;gt;, which deletes the current position from the previous position in the traversal stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;void RemoveSteamID(const char[] steamid)&lt;br /&gt;
{&lt;br /&gt;
    KeyValues kv = new KeyValues(&amp;quot;MyFile&amp;quot;);&lt;br /&gt;
    kv.ImportFromFile(&amp;quot;myfile.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (!kv.JumpToKey(steamid))&lt;br /&gt;
    {&lt;br /&gt;
        delete kv;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    char buffer[255];&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        kv.GetSectionName(buffer, sizeof(buffer))&lt;br /&gt;
        if (StrEqual(buffer, steamid))&lt;br /&gt;
        {&lt;br /&gt;
            kv.DeleteThis();&lt;br /&gt;
            delete kv;&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    } while (kv.GotoNextKey());&lt;br /&gt;
&lt;br /&gt;
  delete kv;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Full Deletion==&lt;br /&gt;
Now, let's take a look at how we would delete all (or some) keys.  &amp;lt;tt&amp;gt;kv.DeleteThis&amp;lt;/tt&amp;gt; has the special property that it can act as an automatic iterator.  When it deletes a key, it automatically attempts to advance to the next one, as &amp;lt;tt&amp;gt;kv.GotoNextKey&amp;lt;/tt&amp;gt; would.  If it can't find any more keys, it simply pops the traversal stack.  &lt;br /&gt;
&lt;br /&gt;
An example of deleting all SteamIDs that have blank names:&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;void DeleteAll(KeyValues kv)&lt;br /&gt;
{&lt;br /&gt;
    if (!kv.GotoFirstSubKey())&lt;br /&gt;
    {&lt;br /&gt;
        delete kv;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for (;;)&lt;br /&gt;
    {&lt;br /&gt;
        char name[4];&lt;br /&gt;
        kv.GetString(&amp;quot;name&amp;quot;, name, sizeof(name));&lt;br /&gt;
        if (name[0] == '\0')&lt;br /&gt;
        {&lt;br /&gt;
            if (kv.DeleteThis() &amp;lt; 1)&lt;br /&gt;
            {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (!kv.GotoNextKey()) &lt;br /&gt;
        {&lt;br /&gt;
            break;&lt;br /&gt;
        } &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  delete kv;&lt;br /&gt;
}&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While at first this loop looks infinite, it is not.  If &amp;lt;tt&amp;gt;kv.DeleteThis&amp;lt;/tt&amp;gt; fails to find a subsequent key, it will break out of the loop.  Similarly, if &amp;lt;tt&amp;gt;kv.GotoNextKey&amp;lt;/tt&amp;gt; fails, the loop will end.&lt;br /&gt;
&lt;br /&gt;
==KeyValue Creation==&lt;br /&gt;
This is how you would create the &amp;lt;tt&amp;gt;MyFile&amp;lt;/tt&amp;gt; example from above with the KeyValue API&lt;br /&gt;
&amp;lt;sourcepawn&amp;gt;KeyValues kv = new KeyValues(&amp;quot;MyFile&amp;quot;);&lt;br /&gt;
kv.JumpToKey(&amp;quot;STEAM_0:0:7&amp;quot;, true);&lt;br /&gt;
kv.SetString(&amp;quot;name&amp;quot;, &amp;quot;crab&amp;quot;);&lt;br /&gt;
kv.Rewind();&lt;br /&gt;
kv.ExportToFile(&amp;quot;C:\\javalia.txt&amp;quot;);&lt;br /&gt;
delete kv;&amp;lt;/sourcepawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;br /&gt;
{{LanguageSwitch}}&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=SourcePawn_Transitional_Syntax&amp;diff=10992</id>
		<title>SourcePawn Transitional Syntax</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=SourcePawn_Transitional_Syntax&amp;diff=10992"/>
		<updated>2020-03-31T19:24:43Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Link to Category:SourceMod_Scripting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
We would like to give our users a more modern language. Pawn is showing its age; manual memory management, buffers, tags, and lack of object-oriented API are very frustrating. We can't solve everything all at once, but we can begin to take steps in the right direction.&lt;br /&gt;
&lt;br /&gt;
SourceMod 1.7 introduces a ''Transitional API''. It is built on a new ''Transitional Syntax'' in SourcePawn, which is a set of language tools to make Pawn feel more modern. In particular, it allows developers to use older APIs in an object-oriented manner, without breaking compatibility. Someday, if and when SourcePawn can become a full-fledged modern language, the transitional API will making porting efforts very minimal.&lt;br /&gt;
&lt;br /&gt;
The transitional API has the following major features and changes:&lt;br /&gt;
* New Declarators - A cleaner way of declaring variables, similar to Java and C#.&lt;br /&gt;
* Methodmaps - Object-oriented wrappers around older APIs.&lt;br /&gt;
* Real Types - SourcePawn now has &amp;quot;int&amp;quot;, &amp;quot;float&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;void&amp;quot;, and &amp;quot;char&amp;quot; as real types.&lt;br /&gt;
* &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; - A new, general keyword to replace &amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=New Declarators=&lt;br /&gt;
Developers familiar with pawn will recognize Pawn's original declaration style:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
new Float:x = 5.0;&lt;br /&gt;
new y = 7;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the transitional syntax, this can be reworded as:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
float x = 5.0;&lt;br /&gt;
int y = 7;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following builtin tags now have types:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Float:&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bool:&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;bool&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;_:&amp;lt;/tt&amp;gt; (or no tag) is &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;String:&amp;lt;/tt&amp;gt; is &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt; can now be used as a return type for functions.&lt;br /&gt;
&lt;br /&gt;
===Rationale===&lt;br /&gt;
In the old style, tagged variables are not real types. &amp;lt;tt&amp;gt;Float:x&amp;lt;/tt&amp;gt; does not indicate a float-typed variable, it indicates a 32-bit &amp;quot;cell&amp;quot; &amp;lt;i&amp;gt;tagged&amp;lt;/i&amp;gt; as a float. It is possible to remove the tag or change the tag, which while flexible, is dangerous and confusing. The syntax itself is also problematic. The parser does not have the ability to identify characters in between the tag name and the colon. Internally, the compiler cannot represent values that are not exactly 32-bit.&lt;br /&gt;
&lt;br /&gt;
The takeaway message is: there is no sensible way to represent a concept like &amp;quot;int64&amp;quot; or &amp;quot;X is a type that represents an array of floats&amp;quot;. The tagging grammar makes it too awkward, and the compiler itself is incapable of attaching such information to a tag. We can't fix that right away, but we can begin to deprecate the tag system via a more normal declaration syntax.&lt;br /&gt;
&lt;br /&gt;
An easy example to see why this is necessary, is the weirdness in expressing something like this with tags:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native float[3] GetEntOrigin();&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note on the &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt; tag:'' The introduction of &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt; might initially seem confusing. The reason for this is that in the future, we would like to introduce a true &amp;quot;string&amp;quot; type that acts as an object, like strings in most other languages. The existing behavior in Pawn is an array of characters, which is much lower-level. The renaming clarifies what the type really is, and leaves the door open for better types in the future.&lt;br /&gt;
&lt;br /&gt;
==Arrays==&lt;br /&gt;
The new style of declaration disambiguates between two kinds of arrays. Pawn has ''indeterminate arrays'', where the size is not known, and ''determinate arrays'', where the size is known. We refer to these as &amp;quot;dynamic&amp;quot; and &amp;quot;fixed-length&amp;quot; arrays, respectively.&lt;br /&gt;
&lt;br /&gt;
'''A fixed-length array is declared by placing brackets after a variable name'''. For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
int CachedStuff[1000];&lt;br /&gt;
int PlayerData[MAXPLAYERS + 1] = { 0, ... };&lt;br /&gt;
int Weapons[] = { WEAPON_AK47, WEAPON_GLOCK, WEAPON_KNIFE };&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In these examples, the array size is fixed. The size is known ahead of time and cannot change. When using brackets in this position, the array size must be specified, either via an explicit size or inferred from an initial value.&lt;br /&gt;
&lt;br /&gt;
A dynamic-length array has the brackets '''before the variable name''', that is, '''after the type'''. The most common case is when specifying functions that take an array as input:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native void SetPlayerName(int player, const char[] name);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, we are specifying that the length of &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; is not always known - it could be anything.&lt;br /&gt;
&lt;br /&gt;
Dynamic arrays can also be created in local scopes. For example,&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
void FindPlayers()&lt;br /&gt;
{&lt;br /&gt;
  int[] players = new int[MaxClients + 1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allocates a new array of the given size and places a reference in &amp;lt;tt&amp;gt;players&amp;lt;/tt&amp;gt;. The memory is automatically freed when no longer in use.&lt;br /&gt;
&lt;br /&gt;
It is illegal to initialize a fixed-length array with an indeterminate array, and it is illegal to initialize a dynamic array with a fixed-array. It is also illegal to specify a fixed size on a dynamic length array.&lt;br /&gt;
&lt;br /&gt;
For the most part, this does not change existing Pawn semantics. It is simply new syntax intended to clarify the way arrays work.&lt;br /&gt;
&lt;br /&gt;
===Rationale===&lt;br /&gt;
In the original syntax, there was a subtle difference in array declaration:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
new array1[MAXPLAYERS + 1];&lt;br /&gt;
new array2[MaxClients + 1];&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, &amp;lt;tt&amp;gt;array1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;array2&amp;lt;/tt&amp;gt; are very different types: the first is an &amp;lt;tt&amp;gt;int[65]&amp;lt;/tt&amp;gt; and the latter is an &amp;lt;tt&amp;gt;int[]&amp;lt;/tt&amp;gt;. However, there is no syntactic difference: the compiler has to deduce whether the size expression is constant to determine the type. The new syntax clearly and explicitly disambiguates these cases, so in the future when we introduce fully dynamic and flexible arrays, we're less likely to break existing code.&lt;br /&gt;
&lt;br /&gt;
This may result in some confusion. Hopefully won't matter long term, as once we have true dynamic arrays, fixed arrays will become much less useful and more obscure.&lt;br /&gt;
&lt;br /&gt;
The rationale for restricting initializers is similar. Once we have true dynamic arrays, the restrictions will be lifted. In the meantime, we need to make sure we're limited to semantics that won't have subtle differences in the future.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
float x = 5.0;    // Replacement for &amp;quot;new Float:x = 5.0;&amp;quot;&lt;br /&gt;
int y = 4;        // Replacement for &amp;quot;new y = 4;&amp;quot;&lt;br /&gt;
char name[32];    // Replacement for &amp;quot;new String:name[32];&amp;quot; and &amp;quot;decl String:name[32];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void DoStuff(float x, int y, char[] name, int length) { //Replacement for &amp;quot;DoStuff(Float:x, y, String:name[], length)&amp;quot;&lt;br /&gt;
  Format(name, length, &amp;quot;%f %d&amp;quot;, x, y); //No replacement here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View As==&lt;br /&gt;
A new operator is available for reinterpreting the bits in a value as another type. This operator is called &amp;lt;tt&amp;gt;view_as&amp;lt;/tt&amp;gt;. It is not a safe cast, in that, it can transform one type to another even if the actual value does not conform to either.&lt;br /&gt;
&lt;br /&gt;
In pre-transitional syntax, this was called &amp;quot;retagging&amp;quot;. Retagging does not support new-style types, which is why this operator has been introduced. Example of before and after code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
// Before:&lt;br /&gt;
float x = Float:array.Get(i);&lt;br /&gt;
&lt;br /&gt;
// After:&lt;br /&gt;
float y = view_as&amp;lt;float&amp;gt;(array.Get(i));&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is worth reiterating that this is not a cast. If the value in the array is not a float, then when &amp;quot;viewed as&amp;quot; a float it will probably look very odd.&lt;br /&gt;
&lt;br /&gt;
==Grammar==&lt;br /&gt;
The new and old declaration grammar is below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return-type ::= return-old | return-new&lt;br /&gt;
return-new ::= type-expr new-dims?        // Note, dims not yet supported.&lt;br /&gt;
return-old ::= old-dims? label?&lt;br /&gt;
&lt;br /&gt;
argdecl ::= arg-old | arg-new&lt;br /&gt;
arg-new ::= &amp;quot;const&amp;quot;? type-expr '&amp;amp;'? symbol old-dims? ('=' arg-init)?&lt;br /&gt;
arg-old ::= &amp;quot;const&amp;quot;? tags? '&amp;amp;'? symbol old-dims? ('=' arg-init)?&lt;br /&gt;
&lt;br /&gt;
vardecl ::= var-old | var-new&lt;br /&gt;
var-new ::= var-new-prefix type-expr symbol old-dims?&lt;br /&gt;
var-new-prefix ::= &amp;quot;static&amp;quot; | &amp;quot;const&amp;quot;&lt;br /&gt;
var-old ::= var-old-prefix tag? symbol old-dims?&lt;br /&gt;
var-old-prefix ::= &amp;quot;new&amp;quot; | &amp;quot;decl&amp;quot; | &amp;quot;static&amp;quot; | &amp;quot;const&amp;quot;&lt;br /&gt;
&lt;br /&gt;
global ::= global-old | global-new&lt;br /&gt;
global-new ::= storage-class* type-expr symbol old-dims?&lt;br /&gt;
global-old ::= storage-class* tag? symbol old-dims?&lt;br /&gt;
&lt;br /&gt;
storage-class ::= &amp;quot;public&amp;quot; | &amp;quot;static&amp;quot; | &amp;quot;const&amp;quot; | &amp;quot;stock&amp;quot;&lt;br /&gt;
&lt;br /&gt;
type-expr ::= (builtin-type | symbol) new-dims?&lt;br /&gt;
builtin-type ::= &amp;quot;void&amp;quot;&lt;br /&gt;
               | &amp;quot;int&amp;quot;&lt;br /&gt;
               | &amp;quot;float&amp;quot;&lt;br /&gt;
               | &amp;quot;char&amp;quot;&lt;br /&gt;
               | &amp;quot;bool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
tags ::= tag-vector | tag&lt;br /&gt;
tag-vector ::= '{' symbol (',' symbol)* '}' ':'&lt;br /&gt;
tag ::= label&lt;br /&gt;
&lt;br /&gt;
new-dims ::= ('[' ']')*&lt;br /&gt;
old-dims ::= ('[' expr? ']')+&lt;br /&gt;
&lt;br /&gt;
label ::= symbol ':'&lt;br /&gt;
symbol ::= [A-Za-z_]([A-Za-z0-9_]*)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note, there is no equivalent of &amp;lt;tt&amp;gt;decl&amp;lt;/tt&amp;gt; in the new declarator syntax. &amp;lt;tt&amp;gt;decl&amp;lt;/tt&amp;gt; is considered to be dangerous and unnecessary. If an array's zero initialization is too costly, consider making it static or global.&lt;br /&gt;
&lt;br /&gt;
=Methodmaps=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Methodmaps are simple: they attach methods onto an enum. For example, here is our legacy API for Handles:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native CloneHandle(Handle handle);&lt;br /&gt;
native CloseHandle(Handle handle);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good example of our legacy API. Using it generally looks something like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
Handle array = CreateAdtArray();&lt;br /&gt;
PushArrayCell(array, 4);&lt;br /&gt;
CloseHandle(array);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gross! A Methodmap can clean it up by attaching functions to the &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt; tag, like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap Handle {&lt;br /&gt;
    public Clone() = CloneHandle;&lt;br /&gt;
    public Close() = CloseHandle;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, our earlier array code can start to look object-oriented:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
Handle array = CreateAdtArray();&lt;br /&gt;
PushArrayCell(array, 4);&lt;br /&gt;
array.Close();&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With a full methodmap for Arrays, for example,&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap ArrayList &amp;lt; Handle&lt;br /&gt;
{&lt;br /&gt;
  public native ArrayList(); // constructor&lt;br /&gt;
  public native void Push(any value);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can write even more object-like code:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
ArrayList array = new ArrayList();&lt;br /&gt;
array.Push(4);&lt;br /&gt;
delete array;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: the official API does not expose methods on raw Handles.)&lt;br /&gt;
&lt;br /&gt;
==Inheritance==&lt;br /&gt;
The Handle system has a &amp;quot;weak&amp;quot; hierarchy. All handles can be passed to &amp;lt;tt&amp;gt;CloseHandle&amp;lt;/tt&amp;gt;, but only AdtArray handles can be passed to functions like &amp;lt;tt&amp;gt;PushArrayCell&amp;lt;/tt&amp;gt;. This hierarchy is not enforced via tags (unfortunately), but instead by run-time checks. Methodmaps allow us to make individual handle types object-oriented, while also moving type-checks into the compiler.&lt;br /&gt;
&lt;br /&gt;
For example, here is a transitional API for arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native AdtArray CreateAdtArray();&lt;br /&gt;
&lt;br /&gt;
methodmap AdtArray &amp;lt; Handle {&lt;br /&gt;
    public PushCell() = PushArrayCell;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;CreateAdtArray&amp;lt;/tt&amp;gt; now returns &amp;lt;tt&amp;gt;AdtArray&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;. Normally that would break older code, but since &amp;lt;tt&amp;gt;AdtArray&amp;lt;/tt&amp;gt; inherits from &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt;, there is a special rule in the type system that allows coercing an &amp;lt;tt&amp;gt;AdtArray&amp;lt;/tt&amp;gt; to a &amp;lt;tt&amp;gt;Handle&amp;lt;/tt&amp;gt; (but not vice versa).&lt;br /&gt;
&lt;br /&gt;
Now, the API looks much more object-oriented:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
AdtArray array = CreateAdtArray();&lt;br /&gt;
array.PushCell(4);&lt;br /&gt;
array.Close();&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Inline Methods==&lt;br /&gt;
Methodmaps can declare inline methods and accessors. Inline methods can be either natives or Pawn functions. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap AdtArray {&lt;br /&gt;
    public native void PushCell(value);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example requires that an &amp;quot;AdtArray.PushCell&amp;quot; native exists somewhere in SourceMod. It has a magic initial parameter called &amp;quot;this&amp;quot;, so the signature will look something like:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native void AdtArray.PushCell(AdtArray this, value);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Of course, this exact signature will not appear in an include file - it's the signature that the C++ implementation should expect, however.)&lt;br /&gt;
&lt;br /&gt;
It's also possible to define new functions without a native:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap AdtArray {&lt;br /&gt;
    public native void PushCell(value);&lt;br /&gt;
&lt;br /&gt;
    public void PushCells(list[], count) {&lt;br /&gt;
        for (int i = 0; i &amp;lt; count; i++) {&lt;br /&gt;
            this.PushCell(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly, we can also define accessors. or example,&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap AdtArray {&lt;br /&gt;
    property int Size {&lt;br /&gt;
        public get() = GetArraySize;&lt;br /&gt;
    }&lt;br /&gt;
    property bool Empty {&lt;br /&gt;
        public get() {&lt;br /&gt;
            return this.Size == 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    property int Capacity {&lt;br /&gt;
        public native get();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first accessor simply assigns an existing function as an accessor for &amp;quot;Size&amp;quot;. The second accessor is an inline method with an implicit &amp;quot;this&amp;quot; parameter. The third accessor will bind to a native with the following name and signature:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native int AdtArray.Capacity.get(AdtArray this);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setters are also supported. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap Player {&lt;br /&gt;
    property int Health {&lt;br /&gt;
        public native get();&lt;br /&gt;
        public native set(int health);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Custom Tags==&lt;br /&gt;
Methodmaps don't have to be used with Handles. It is possible to define custom methodmaps on new or existing tags. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap AdminId {&lt;br /&gt;
    public int Rights() {&lt;br /&gt;
        return GetAdminFlags(this);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, for example, it is possible to do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;GetPlayerAdmin(id).Rights()&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constructors and Destructors==&lt;br /&gt;
Methodmaps can also define constructors and destructors, which is useful if they are intended to behave like actual objects. For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
methodmap AdtArray {&lt;br /&gt;
    public AdtArray(blocksize = 1);&lt;br /&gt;
    public ~AdtArray();&lt;br /&gt;
    public void PushCell(value);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now AdtArrays can be used in a fully object-oriented style:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
AdtArray array = new AdtArray();&lt;br /&gt;
array.PushCell(10);&lt;br /&gt;
array.PushCell(20);&lt;br /&gt;
array.PushCell(30);&lt;br /&gt;
delete array;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caveats==&lt;br /&gt;
There are a few caveats to methodmaps:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;CloseHandle() is not yet gone. It is required to call &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; on any object that previously would have required CloseHandle().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;There can be only one methodmap for a tag.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;When using existing natives, the first parameter of the native must coerce to the tag of the methodmap. Tag mismatches of the &amp;quot;this&amp;quot; parameter will result in an error. Not a warning!&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Methodmaps can only be defined on tags. Pawn has some ways of creating actual types (like via &amp;lt;tt&amp;gt;struct&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;class&amp;lt;/tt&amp;gt;). Methodmaps cannot be created on those types.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Methodmaps do not have strong typing. For example, it is still possible to perform &amp;quot;illegal&amp;quot; casts like &amp;lt;tt&amp;gt;Float:CreateAdtArray()&amp;lt;/tt&amp;gt;. This is necessary for backwards compatibility, so methodmap values can flow into natives like &amp;lt;tt&amp;gt;PrintToServer&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;CreateTimer&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;It is not possible to inherit from anything other than another previously declared methodmap.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Methodmaps can only be defined over scalars - that is, the &amp;quot;this&amp;quot; parameter can never be an array. This means they cannot be used for enum-structs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Destructors can only be native. When we are able to achieve garbage collection, destructors will be removed.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The signatures of methodmaps must use the new declaration syntax.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Methodmaps must be declared before they are used.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Grammar==&lt;br /&gt;
The grammar for methodmaps is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
visibility ::= &amp;quot;public&amp;quot;&lt;br /&gt;
method-args ::= arg-new* &amp;quot;...&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
methodmap ::= &amp;quot;methodmap&amp;quot; symbol? { methodmap-item* } term&lt;br /&gt;
methodmap-item ::=&lt;br /&gt;
           visibility &amp;quot;~&amp;quot;? symbol &amp;quot;(&amp;quot; &amp;quot;)&amp;quot; &amp;quot;=&amp;quot; symbol term&lt;br /&gt;
         | visibility &amp;quot;native&amp;quot; type-expr &amp;quot;~&amp;quot;? symbol methodmap-symbol &amp;quot;(&amp;quot; method-args &amp;quot;)&amp;quot; term&lt;br /&gt;
         | visibility type-expr symbol &amp;quot;(&amp;quot; method-args &amp;quot;)&amp;quot; func-body term&lt;br /&gt;
         | &amp;quot;property&amp;quot; type-expr symbol { property-decl } term&lt;br /&gt;
property-func ::= &amp;quot;get&amp;quot; | &amp;quot;set&amp;quot;&lt;br /&gt;
property-decl ::= visibility property-impl&lt;br /&gt;
property-impl ::=&lt;br /&gt;
           &amp;quot;native&amp;quot; property-func &amp;quot;(&amp;quot; &amp;quot;)&amp;quot; term&lt;br /&gt;
         | property-func &amp;quot;(&amp;quot; &amp;quot;)&amp;quot; func-body term&lt;br /&gt;
         | property-func &amp;quot;(&amp;quot; &amp;quot;)&amp;quot; &amp;quot;=&amp;quot; symbol&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Typedefs=&lt;br /&gt;
&lt;br /&gt;
Function tags and function enums have been deprecated in favor of a more modern syntax. Currently, they can still only create tag names for functions. Future versions will support arbitrary types.&lt;br /&gt;
&lt;br /&gt;
Upgrading both functags and funcenums is simple. Below are two examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
functag public Action:SrvCmd(args);&lt;br /&gt;
&lt;br /&gt;
funcenum Timer {&lt;br /&gt;
  Action:public(Handle:Timer, Handle:hndl),&lt;br /&gt;
  Action:public(Handle:timer),&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, this becomes:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
typedef SrvCmd = function Action (int args);&lt;br /&gt;
&lt;br /&gt;
typeset Timer {&lt;br /&gt;
  function Action (Handle timer, Handle hndl);&lt;br /&gt;
  function Action (Handle timer);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The grammar for the new syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef ::= &amp;quot;typedef&amp;quot; symbol &amp;quot;=&amp;quot; full-type-expr term&lt;br /&gt;
full-type-expr ::= &amp;quot;(&amp;quot; type-expr &amp;quot;)&amp;quot;&lt;br /&gt;
                 | type-expr&lt;br /&gt;
type-expr ::= &amp;quot;function&amp;quot; type-name &amp;quot;(&amp;quot; typedef-args? &amp;quot;)&amp;quot;&lt;br /&gt;
typedef-args ::= &amp;quot;...&amp;quot;&lt;br /&gt;
               | typedef-arg (&amp;quot;, &amp;quot; &amp;quot;...&amp;quot;)?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that typedefs only support new-style types.&lt;br /&gt;
&lt;br /&gt;
=Enum Structs=&lt;br /&gt;
&lt;br /&gt;
Enum structs were a previously unsupported mechanism for emulating structs through arrays. As of SourceMod 1.10, this mechanism is now fully supported through Transitional Syntax. Here is an example of enum struct syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
enum struct Rectangle {&lt;br /&gt;
  int x;&lt;br /&gt;
  int y;&lt;br /&gt;
  int width;&lt;br /&gt;
  int height;&lt;br /&gt;
&lt;br /&gt;
  int Area() {&lt;br /&gt;
    return this.width * this.height;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void DoStuff(Rectangle r) {&lt;br /&gt;
  PrintToServer(&amp;quot;%d, %d, %d, %d&amp;quot;, r.x, r.y, r.width, r.height);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enum structs are syntactic sugar and are internally represented as arrays. This means they pass by-reference to function arguments, and the &amp;quot;&amp;amp;&amp;quot; token is not required (nor is it allowed).&lt;br /&gt;
&lt;br /&gt;
Note that even though enum structs are actually arrays, for the most part they cannot be used as arrays. The exception is when interacting with opaque data structures like &amp;lt;tt&amp;gt;ArrayList&amp;lt;/tt&amp;gt;. For example, this is considered valid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
void SaveRectangle(ArrayList list, const Rectangle r) {&lt;br /&gt;
  list.PushArray(r, sizeof(r));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void PopArray(ArrayList list, Rectangle r) {&lt;br /&gt;
  list.GetArray(list.Length - 1, r, sizeof(r));&lt;br /&gt;
  list.Erase(list.Length - 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But this is not allowed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
Rectangle r;&lt;br /&gt;
PrintToServer(&amp;quot;%d&amp;quot;, r[0]);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The grammar for enum structs is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum-struct ::= &amp;quot;enum&amp;quot; &amp;quot;struct&amp;quot; symbol &amp;quot;{&amp;quot; newline enum-struct-entry enum-struct-entry* &amp;quot;}&amp;quot; term&lt;br /&gt;
enum-struct-entry ::= enum-struct-field&lt;br /&gt;
                    | enum-struct-method&lt;br /&gt;
enum-struct-field ::= type-expr symbol old-dims? term&lt;br /&gt;
enum-struct-method ::= type-expr symbol &amp;quot;(&amp;quot; method-args &amp;quot;)&amp;quot; func-body term&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Enforcing new syntax=&lt;br /&gt;
&lt;br /&gt;
You can enforce the new syntax in 1.7 by using &amp;lt;pawn&amp;gt;#pragma newdecls required&amp;lt;/pawn&amp;gt; ontop of your code, after the includes (or else current 1.7 includes which contain old syntax will be read with new-syntax rules).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod_Scripting]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10991</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10991"/>
		<updated>2020-03-31T13:39:41Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Newer Notepad++ version use now autoCompletion folder.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://youtu.be/RZ_sv6DtLQ8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Setting up a Notepad++ (SourceMod) - Wiki guide]&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
 &lt;br /&gt;
 *Update 31.3.2020 -Since Notepad++ 7.6.x and later&lt;br /&gt;
 C:\Program Files (x86)\notepad++\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;autoCompletion&amp;lt;/span&amp;gt;\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin (manually or through Plugin Manager).&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe &amp;quot;$(FILE_NAME)&amp;quot;&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:39, 31 March 2020 (CDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10989</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10989"/>
		<updated>2020-03-30T13:05:02Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: hidden template broken. removing it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''Source Dedicated Server''' into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://youtu.be/SF7lGzZM6Q0?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Installing SRCDS - Wiki guide]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://youtu.be/3XC8RnpgDgo?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Launching SRCDS - Wiki guide]&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive''}}&lt;br /&gt;
https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:05, 30 March 2020 (CDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10988</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10988"/>
		<updated>2020-03-30T12:58:45Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: hidden template broken. removing it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 07:58, 30 March 2020 (CDT)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive (free game), Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}}}}&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;&lt;br /&gt;
:[https://youtu.be/t1fYp98FGH8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=User_Messages&amp;diff=10700</id>
		<title>User Messages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=User_Messages&amp;diff=10700"/>
		<updated>2018-12-30T23:53:59Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: added link, csgo usermessage page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is just a dump of some stuff for now, needs a complete revamp later.&lt;br /&gt;
Here's a topic on the subject as well: https://forums.alliedmods.net/showthread.php?t=80256 and here http://forums.alliedmods.net/showthread.php?t=52777&lt;br /&gt;
&lt;br /&gt;
{{Note| Protobuf [[Counter-Strike:_Global_Offensive_UserMessages]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Counter-Strike: Source User Messages ===&lt;br /&gt;
List obtained by using 'meta game' in the console&lt;br /&gt;
&lt;br /&gt;
  User Messages:  Name                              Index  Size &lt;br /&gt;
                  Geiger                            0      1    &lt;br /&gt;
                  Train                             1      1    &lt;br /&gt;
                  HudText                           2      -1   &lt;br /&gt;
                  SayText                           3      -1   &lt;br /&gt;
                  SayText2                          4      -1   &lt;br /&gt;
                  TextMsg                           5      -1   &lt;br /&gt;
                  HudMsg                            6      -1   &lt;br /&gt;
                  ResetHUD                          7      1    &lt;br /&gt;
                  GameTitle                         8      0    &lt;br /&gt;
                  ItemPickup                        9      -1   &lt;br /&gt;
                  ShowMenu                          10     -1   &lt;br /&gt;
                  Shake                             11     13   &lt;br /&gt;
                  Fade                              12     10   &lt;br /&gt;
                  VGUIMenu                          13     -1   &lt;br /&gt;
                  Rumble                            14     3    &lt;br /&gt;
                  CloseCaption                      15     -1   &lt;br /&gt;
                  SendAudio                         16     -1   &lt;br /&gt;
                  RawAudio                          17     -1   &lt;br /&gt;
                  VoiceMask                         18     25   &lt;br /&gt;
                  RequestState                      19     0    &lt;br /&gt;
                  BarTime                           20     -1   &lt;br /&gt;
                  Damage                            21     -1   &lt;br /&gt;
                  RadioText                         22     -1   &lt;br /&gt;
                  HintText                          23     -1   &lt;br /&gt;
                  KeyHintText                       24     -1   &lt;br /&gt;
                  ReloadEffect                      25     2    &lt;br /&gt;
                  PlayerAnimEvent                   26     -1   &lt;br /&gt;
                  AmmoDenied                        27     2    &lt;br /&gt;
                  UpdateRadar                       28     -1   &lt;br /&gt;
                  KillCam                           29     -1   &lt;br /&gt;
                  MarkAchievement                   30     -1   &lt;br /&gt;
                  CallVoteFailed                    31     -1   &lt;br /&gt;
                  VoteStart                         32     -1   &lt;br /&gt;
                  VotePass                          33     -1   &lt;br /&gt;
                  VoteFailed                        34     2    &lt;br /&gt;
                  VoteSetup                         35     -1   &lt;br /&gt;
                  SPHapWeapEvent                    36     4    &lt;br /&gt;
                  HapDmg                            37     -1   &lt;br /&gt;
                  HapPunch                          38     -1   &lt;br /&gt;
                  HapSetDrag                        39     -1   &lt;br /&gt;
                  HapSetConst                       40     -1   &lt;br /&gt;
                  HapMeleeContact                   41     0    &lt;br /&gt;
                  PlayerStatsUpdate_DEPRECATED      42     -1   &lt;br /&gt;
                  AchievementEvent                  43     -1   &lt;br /&gt;
                  MatchEndConditions                44     -1   &lt;br /&gt;
                  MatchStatsUpdate                  45     -1   &lt;br /&gt;
                  PlayerStatsUpdate                 46     -1   &lt;br /&gt;
  47 user messages in total&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Left 4 Dead 2 User Messages ===&lt;br /&gt;
&lt;br /&gt;
For vote specific user messages see http://wiki.alliedmods.net/Left_4_Voting_2&lt;br /&gt;
&lt;br /&gt;
  User Messages:  Name                              Index  Size Parameter types&lt;br /&gt;
                  SayText2                          4      -1&lt;br /&gt;
                  TextMsg                           5      -1&lt;br /&gt;
                  HudMsg                            6      -1&lt;br /&gt;
                  ResetHUD                          7      1&lt;br /&gt;
                  GameTitle                         8      0&lt;br /&gt;
                  ItemPickup                        9      -1&lt;br /&gt;
                  ShowMenu                          10     -1&lt;br /&gt;
                  Shake                             11     13&lt;br /&gt;
                  Fade                              12     10&lt;br /&gt;
                  VGUIMenu                          13     -1	string, bool, string (keyvalues)&lt;br /&gt;
                  Rumble                            14     3&lt;br /&gt;
                  CloseCaption                      15     -1&lt;br /&gt;
                  CloseCaptionDirect                16     -1&lt;br /&gt;
                  SendAudio                         17     -1&lt;br /&gt;
                  RawAudio                          18     -1&lt;br /&gt;
                  VoiceMask                         19     9&lt;br /&gt;
                  RequestState                      20     0&lt;br /&gt;
                  BarTime                           21     -1&lt;br /&gt;
                  Damage                            22     -1&lt;br /&gt;
                  RadioText                         23     -1&lt;br /&gt;
                  HintText                          24     -1&lt;br /&gt;
                  KeyHintText                       25     -1&lt;br /&gt;
                  ReloadEffect                      26     4&lt;br /&gt;
                  PlayerAnimEvent                   27     -1&lt;br /&gt;
                  AmmoDenied                        28     2&lt;br /&gt;
                  UpdateRadar                       29     -1&lt;br /&gt;
                  KillCam                           30     -1&lt;br /&gt;
                  MarkAchievement                   31     -1&lt;br /&gt;
                  Splatter                          32     1&lt;br /&gt;
                  MeleeSlashSplatter                33     1&lt;br /&gt;
                  MeleeClubSplatter                 34     1&lt;br /&gt;
                  MudSplatter                       35     1&lt;br /&gt;
                  SplatterClear                     36     0&lt;br /&gt;
                  MessageText                       37     -1&lt;br /&gt;
                  TransitionRestore                 38     0&lt;br /&gt;
                  Spawn                             39     1&lt;br /&gt;
                  CreditsLine                       40     -1&lt;br /&gt;
                  CreditsMsg                        41     0&lt;br /&gt;
                  JoinLateMsg                       42     0&lt;br /&gt;
                  StatsCrawlMsg                     43     0&lt;br /&gt;
                  StatsSkipState                    44     2&lt;br /&gt;
                  ShowStats                         45     -1&lt;br /&gt;
                  BlurFade                          46     0&lt;br /&gt;
                  MusicCmd                          47     -1&lt;br /&gt;
                  WitchBloodSplatter                48     -1	vec[3]&lt;br /&gt;
                  AchievementEvent                  49     -1&lt;br /&gt;
                  PZDmgMsg                          50     -1&lt;br /&gt;
                  AllPlayersConnectedGameStarting   51     0&lt;br /&gt;
                  VoteRegistered                    52     1&lt;br /&gt;
                  DisconnectToLobby                 53     0	empty&lt;br /&gt;
                  CallVoteFailed                    54     1&lt;br /&gt;
                  SteamWeaponStatData               55     -1&lt;br /&gt;
                  CurrentTimescale                  56     4&lt;br /&gt;
                  DesiredTimescale                  57     16&lt;br /&gt;
                  PZEndGamePanelMsg                 58     1&lt;br /&gt;
                  PZEndGamePanelVoteRegisteredMsg   59     1&lt;br /&gt;
                  PZEndGameVoteStatsMsg             60     8&lt;br /&gt;
                  VoteStart                         61     -1&lt;br /&gt;
                  VotePass                          62     -1&lt;br /&gt;
                  VoteFail                          63     1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Team Fortress 2 User Messages ===&lt;br /&gt;
&lt;br /&gt;
  User Messages:  Name                              Index  Size&lt;br /&gt;
                  Geiger                            0      1    &lt;br /&gt;
                  Train                             1      1    &lt;br /&gt;
                  HudText                           2      -1   &lt;br /&gt;
                  SayText                           3      -1   &lt;br /&gt;
                  SayText2                          4      -1   &lt;br /&gt;
                  TextMsg                           5      -1   &lt;br /&gt;
                  ResetHUD                          6      1    &lt;br /&gt;
                  GameTitle                         7      0    &lt;br /&gt;
                  ItemPickup                        8      -1   &lt;br /&gt;
                  ShowMenu                          9      -1   &lt;br /&gt;
                  Shake                             10     13   &lt;br /&gt;
                  Fade                              11     10   &lt;br /&gt;
                  VGUIMenu                          12     -1   &lt;br /&gt;
                  Rumble                            13     3    &lt;br /&gt;
                  CloseCaption                      14     -1   &lt;br /&gt;
                  SendAudio                         15     -1   &lt;br /&gt;
                  VoiceMask                         16     17   &lt;br /&gt;
                  RequestState                      17     0    &lt;br /&gt;
                  Damage                            18     -1   &lt;br /&gt;
                  HintText                          19     -1   &lt;br /&gt;
                  KeyHintText                       20     -1   &lt;br /&gt;
                  HudMsg                            21     -1   &lt;br /&gt;
                  AmmoDenied                        22     2    &lt;br /&gt;
                  AchievementEvent                  23     -1   &lt;br /&gt;
                  UpdateRadar                       24     -1   &lt;br /&gt;
                  VoiceSubtitle                     25     3    &lt;br /&gt;
                  HudNotify                         26     2    &lt;br /&gt;
                  HudNotifyCustom                   27     -1   &lt;br /&gt;
                  PlayerStatsUpdate                 28     -1   &lt;br /&gt;
                  MapStatsUpdate                    29     -1   &lt;br /&gt;
                  PlayerIgnited                     30     3    &lt;br /&gt;
                  PlayerIgnitedInv                  31     3    &lt;br /&gt;
                  HudArenaNotify                    32     2    &lt;br /&gt;
                  UpdateAchievement                 33     -1   &lt;br /&gt;
                  TrainingMsg                       34     -1   &lt;br /&gt;
                  TrainingObjective                 35     -1   &lt;br /&gt;
                  DamageDodged                      36     -1   &lt;br /&gt;
                  PlayerJarated                     37     2    &lt;br /&gt;
                  PlayerExtinguished                38     2    &lt;br /&gt;
                  PlayerJaratedFade                 39     2    &lt;br /&gt;
                  PlayerShieldBlocked               40     2    &lt;br /&gt;
                  BreakModel                        41     -1   &lt;br /&gt;
                  CheapBreakModel                   42     -1   &lt;br /&gt;
                  BreakModel_Pumpkin                43     -1   &lt;br /&gt;
                  BreakModelRocketDud               44     -1   &lt;br /&gt;
                  CallVoteFailed                    45     -1   &lt;br /&gt;
                  VoteStart                         46     -1   &lt;br /&gt;
                  VotePass                          47     -1   &lt;br /&gt;
                  VoteFailed                        48     2    &lt;br /&gt;
                  VoteSetup                         49     -1   &lt;br /&gt;
                  PlayerBonusPoints                 50     3    &lt;br /&gt;
                  RDTeamPointsChanged               51     4    &lt;br /&gt;
                  SpawnFlyingBird                   52     -1   &lt;br /&gt;
                  PlayerGodRayEffect                53     -1   &lt;br /&gt;
                  PlayerTeleportHomeEffect          54     -1   &lt;br /&gt;
                  MVMStatsReset                     55     -1   &lt;br /&gt;
                  MVMPlayerEvent                    56     -1   &lt;br /&gt;
                  MVMResetPlayerStats               57     -1   &lt;br /&gt;
                  MVMWaveFailed                     58     0    &lt;br /&gt;
                  MVMAnnouncement                   59     2    &lt;br /&gt;
                  MVMPlayerUpgradedEvent            60     9    &lt;br /&gt;
                  MVMVictory                        61     2    &lt;br /&gt;
                  MVMWaveChange                     62     15   &lt;br /&gt;
                  MVMLocalPlayerUpgradesClear       63     1    &lt;br /&gt;
                  MVMLocalPlayerUpgradesValue       64     6    &lt;br /&gt;
                  MVMResetPlayerWaveSpendingStats   65     1    &lt;br /&gt;
                  MVMLocalPlayerWaveSpendingValue   66     12   &lt;br /&gt;
                  MVMResetPlayerUpgradeSpending     67     -1   &lt;br /&gt;
                  MVMServerKickTimeUpdate           68     1    &lt;br /&gt;
                  PlayerLoadoutUpdated              69     -1   &lt;br /&gt;
                  PlayerTauntSoundLoopStart         70     -1   &lt;br /&gt;
                  PlayerTauntSoundLoopEnd           71     -1   &lt;br /&gt;
                  ForcePlayerViewAngles             72     -1   &lt;br /&gt;
                  BonusDucks                        73     2    &lt;br /&gt;
                  EOTLDuckEvent                     74     7    &lt;br /&gt;
                  PlayerPickupWeapon                75     -1   &lt;br /&gt;
                  QuestObjectiveCompleted           76     14   &lt;br /&gt;
                  SPHapWeapEvent                    77     4    &lt;br /&gt;
                  HapDmg                            78     -1   &lt;br /&gt;
                  HapPunch                          79     -1   &lt;br /&gt;
                  HapSetDrag                        80     -1   &lt;br /&gt;
                  HapSetConst                       81     -1   &lt;br /&gt;
                  HapMeleeContact                   82     0&lt;br /&gt;
&lt;br /&gt;
=== Fade Flags ===&lt;br /&gt;
These may not be correct...&lt;br /&gt;
&lt;br /&gt;
 FFADE_IN            0x0001        // Just here so we don't pass 0 into the function&lt;br /&gt;
 FFADE_OUT           0x0002        // Fade out (not in)&lt;br /&gt;
 FFADE_MODULATE      0x0004        // Modulate (don't blend)&lt;br /&gt;
 FFADE_STAYOUT       0x0008        // ignores the duration, stays faded out until new ScreenFade message received&lt;br /&gt;
 FFADE_PURGE         0x0010        // Purges all other fades, replacing them with this one&lt;br /&gt;
&lt;br /&gt;
=== Fade Function ===&lt;br /&gt;
Example Fade function (be sure to define the Fade Flags!)&lt;br /&gt;
&lt;br /&gt;
This Fades the clients screen to a specified color, and stays until you reset the color to {0,0,0,0}&lt;br /&gt;
&lt;br /&gt;
To modify it to Fade the screen for a certain amount of time, remove the STAYOUT flag, and pass a value to &amp;quot;fade &amp;amp; hold&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 PerformFade(target, 500, {0, 128, 255, 51})&lt;br /&gt;
&lt;br /&gt;
 PerformFade(client, duration, const color[4]) {&lt;br /&gt;
 	new Handle:hFadeClient=StartMessageOne(&amp;quot;Fade&amp;quot;,client)&lt;br /&gt;
 	BfWriteShort(hFadeClient,duration)	// FIXED 16 bit, with SCREENFADE_FRACBITS fractional, milliseconds duration&lt;br /&gt;
 	BfWriteShort(hFadeClient,0)		// FIXED 16 bit, with SCREENFADE_FRACBITS fractional, milliseconds duration until reset (fade &amp;amp; hold)&lt;br /&gt;
 	BfWriteShort(hFadeClient,(FFADE_PURGE|FFADE_OUT|FFADE_STAYOUT)) // fade type (in / out)&lt;br /&gt;
 	BfWriteByte(hFadeClient,color[0])	// fade red&lt;br /&gt;
 	BfWriteByte(hFadeClient,color[1])	// fade green&lt;br /&gt;
 	BfWriteByte(hFadeClient,color[2])	// fade blue&lt;br /&gt;
 	BfWriteByte(hFadeClient,color[3])	// fade alpha&lt;br /&gt;
 	EndMessage()&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== HudMsg Function ===&lt;br /&gt;
This does not work in CS:S.&lt;br /&gt;
&lt;br /&gt;
This Draws a text Message to a specified players screen. This is just for educational purposes and there is a much easier way of doing this with native functions here: [https://sm.alliedmods.net/new-api/halflife/ShowHudText ShowHudText] &amp;amp; [https://sm.alliedmods.net/new-api/halflife/SetHudTextParams SetHudTextParams]&lt;br /&gt;
&lt;br /&gt;
 PerformHudMsg(client, &amp;quot;This is a Test&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 PerformHudMsg(client, const String:szMsg[]) {&lt;br /&gt;
 	new Handle:hBf = StartMessageOne(&amp;quot;HudMsg&amp;quot;, client)&lt;br /&gt;
 	BfWriteByte(hBf, 3) //channel&lt;br /&gt;
 	BfWriteFloat(hBf, 0.0); // x ( -1 = center )&lt;br /&gt;
 	BfWriteFloat(hBf, -1); // y ( -1 = center )&lt;br /&gt;
 	// second color&lt;br /&gt;
 	BfWriteByte(hBf, 0); //r1&lt;br /&gt;
 	BfWriteByte(hBf, 0); //g1&lt;br /&gt;
 	BfWriteByte(hBf, 255); //b1&lt;br /&gt;
 	BfWriteByte(hBf, 255); //a1 // transparent?&lt;br /&gt;
 	// init color&lt;br /&gt;
 	BfWriteByte(hBf, 255); //r2&lt;br /&gt;
 	BfWriteByte(hBf, 0); //g2&lt;br /&gt;
 	BfWriteByte(hBf, 0); //b2&lt;br /&gt;
 	BfWriteByte(hBf, 255); //a2&lt;br /&gt;
 	BfWriteByte(hBf, 0); //effect (0 is fade in/fade out; 1 is flickery credits; 2 is write out)&lt;br /&gt;
 	BfWriteFloat(hBf, 1.0); //fadeinTime (message fade in time - per character in effect 2)&lt;br /&gt;
 	BfWriteFloat(hBf, 1.0); //fadeoutTime&lt;br /&gt;
 	BfWriteFloat(hBf, 15.0); //holdtime&lt;br /&gt;
 	BfWriteFloat(hBf, 5.0); //fxtime (effect type(2) used)&lt;br /&gt;
 	BfWriteString(hBf, szMsg); //Message&lt;br /&gt;
 	EndMessage();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== HookUserMessage Fade ===&lt;br /&gt;
Some sample code to hook a UserMessage, In this case Fade.&lt;br /&gt;
You cannot send other UserMessages inside of a UserMessage Hook. Many simple functions such as PrintToChat call UserMessages.&lt;br /&gt;
&lt;br /&gt;
 public OnPluginStart() {&lt;br /&gt;
     HookUserMessage(GetUserMessageId(&amp;quot;Fade&amp;quot;),HookFade,true)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public Action:HookFade(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) {&lt;br /&gt;
 	new duration = BfReadShort(bf)&lt;br /&gt;
 	new holdtime = BfReadShort(bf)&lt;br /&gt;
 	BfReadShort(bf) 	//You must read all of the bf values, even If you only want the last value such as this one.&lt;br /&gt;
 	new r = BfReadByte(bf) 	//You do NOT need to store their value though.&lt;br /&gt;
 	new g = BfReadByte(bf)&lt;br /&gt;
 	new b = BfReadByte(bf)&lt;br /&gt;
 	new a = BfReadByte(bf)&lt;br /&gt;
 	&lt;br /&gt;
 	PrintToServer(&amp;quot;Duration: %i, HoldTime: %i, rgba: %i %i %i %i&amp;quot;,duration,holdtime,r,g,b,a)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10696</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10696"/>
		<updated>2018-12-24T20:59:12Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 17:13, 21 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive (free game), Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
:[https://youtu.be/t1fYp98FGH8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10692</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10692"/>
		<updated>2018-12-16T09:36:37Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 17:13, 21 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive (free game), Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
:[https://youtu.be/t1fYp98FGH8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10690</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10690"/>
		<updated>2018-11-21T23:13:27Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: timestamp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 17:13, 21 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
:[https://youtu.be/t1fYp98FGH8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10689</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10689"/>
		<updated>2018-11-21T23:12:06Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: YouTube video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://youtu.be/RZ_sv6DtLQ8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Setting up a Notepad++ (SourceMod) - Wiki guide]&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin (manually or through Plugin Manager).&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe &amp;quot;$(FILE_NAME)&amp;quot;&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:47, 21 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10688</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10688"/>
		<updated>2018-11-21T23:07:49Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Plugin NppExec */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin (manually or through Plugin Manager).&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe &amp;quot;$(FILE_NAME)&amp;quot;&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:47, 21 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10687</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10687"/>
		<updated>2018-11-21T22:34:04Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Plugin NppExec */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe &amp;quot;$(FILE_NAME)&amp;quot;&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:47, 21 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10686</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10686"/>
		<updated>2018-11-21T22:32:03Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Plugin NppExec */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe &amp;quot;$(FILE_NAME)&amp;quot;&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:47, 21 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10685</id>
		<title>Setting up a Notepad++ (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Notepad%2B%2B_(SourceMod)&amp;diff=10685"/>
		<updated>2018-11-21T14:47:35Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: I need improve this page.... later&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is guide to setting up NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
Install '''Notepad++ 32-bit x86''' text editor&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://notepad-plus-plus.org/download/&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==SourcePawn syntax highlight &amp;amp; autocompletion==&lt;br /&gt;
&lt;br /&gt;
Download '''npp-docs zip''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://github.com/raziEiL/SourceMod-Npp-Docs/releases&amp;lt;br/&amp;gt;&lt;br /&gt;
and extract files on your desktop.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Move '''sourcemod.xml''' file into Notepad++ &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;...plugins\APIs&amp;lt;/span&amp;gt; folder&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\APIs\sourcemod.xml&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Open Notepad++ and select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Language -&amp;gt; Define your language...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Import...&amp;lt;/span&amp;gt; &lt;br /&gt;
and open '''userDefineLang.xml''' file&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plugin NppExec==&lt;br /&gt;
&lt;br /&gt;
Install NppExec Notepad++ plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
:https://sourceforge.net/projects/npp-plugins/files/NppExec/&amp;lt;br/&amp;gt;&lt;br /&gt;
 C:\Program Files (x86)\notepad++\plugins\NppExec.dll&lt;br /&gt;
Restart NotePad++&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Execute... (F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Add this script:&lt;br /&gt;
 NPP_SAVE&lt;br /&gt;
 cd &amp;quot;$(CURRENT_DIRECTORY)&amp;quot;&lt;br /&gt;
 spcomp.exe $(FILE_NAME)&lt;br /&gt;
 cmd /q /c move &amp;quot;$(CURRENT_DIRECTORY)\$(NAME_PART).smx&amp;quot; &amp;quot;$(CURRENT_DIRECTORY)\..\plugins\$(NAME_PART).smx&amp;quot;&lt;br /&gt;
Save -&amp;gt; name it ''sourcemod'' -&amp;gt; Save&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; Console Output Filters... (Shift+F6)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|✔️||%FILE%(%LINE%) : error *||0x99||0x00||0x00||B&lt;br /&gt;
|-&lt;br /&gt;
|✔️||%FILE%(%LINE%) : warning *||0x00||0x50||0x99||I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Plugins -&amp;gt; NppExec -&amp;gt; NppExec Advanced Options...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Select ''Associated scipt: sourcemod'', then click ''Add/Modify'' button. Ok and restart Notepad++&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Choose &amp;lt;span style=&amp;quot;font-family:courier&amp;quot;&amp;gt;Settings -&amp;gt; Shortcut Mapper...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; and go ''Plugin Commands'' tab.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find and clear ''Execute... = F6'' button.&amp;lt;br/&amp;gt;&lt;br /&gt;
Find ''sourcemod ='' and Modify ''F6'' button in this line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing compiling Sourcemod plugin==&lt;br /&gt;
Go SourceMod scripting folder, where you find *.sp files.&amp;lt;br/&amp;gt;&lt;br /&gt;
Make copy of any file for testing purpose and open it with NotePad++.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you hit F6 key, NotePad++ should:&lt;br /&gt;
*Save your file&lt;br /&gt;
*Run CMD and compile current *.sp file to *.smx&lt;br /&gt;
*Move compiled *.smx file from scripting folder to SourceMod plugins folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 08:47, 21 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10684</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10684"/>
		<updated>2018-11-20T15:46:54Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Rename youtube alt name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://www.youtube.com/watch?v=jqnnvIjH2WQ&amp;amp;index=4&amp;amp;list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Installing MetaMod:Source and SourceMod - Wiki guide]&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons&amp;lt;br/&amp;gt;&lt;br /&gt;
C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
{{Note|''To see example of commands output text, click Show -&amp;gt;''}}&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[#Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10683</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10683"/>
		<updated>2018-11-20T15:45:01Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Moved YouTube videos to top of page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''Source Dedicated Server''' into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://youtu.be/SF7lGzZM6Q0?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Installing SRCDS - Wiki guide]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://youtu.be/3XC8RnpgDgo?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video Launching SRCDS - Wiki guide]&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10682</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10682"/>
		<updated>2018-11-20T15:29:57Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: YouTube video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
[https://www.youtube.com/watch?v=jqnnvIjH2WQ&amp;amp;index=4&amp;amp;list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube]&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons&amp;lt;br/&amp;gt;&lt;br /&gt;
C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
{{Note|''To see example of commands output text, click Show -&amp;gt;''}}&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[#Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10681</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10681"/>
		<updated>2018-11-20T14:46:25Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: YouTube video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
:[https://youtu.be/t1fYp98FGH8?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10680</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10680"/>
		<updated>2018-11-20T14:15:22Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Launching SRCDS */ YouTube Video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''Source Dedicated Server''' into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]] [https://youtu.be/SF7lGzZM6Q0?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]][https://youtu.be/3XC8RnpgDgo?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10679</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10679"/>
		<updated>2018-11-20T13:49:33Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Installing SRCDS */ YouTube Video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''Source Dedicated Server''' into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]] [https://youtu.be/SF7lGzZM6Q0?list=PLDz5Z5KigHNV0QDPeO3bCl09GblHV0pX0 YouTube Video]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10678</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10678"/>
		<updated>2018-11-19T18:03:50Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: link to new page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
*[[Setting up a Notepad++ (SourceMod)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10677</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10677"/>
		<updated>2018-11-19T00:08:41Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: remove color and icon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''Source Dedicated Server''' into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10676</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10676"/>
		<updated>2018-11-18T23:33:50Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: tweak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Problem solving'''&lt;br /&gt;
{{Note|{{color|red|Problem to launch the game while using srcds.}} {{hidden|id=Problem_00|label=Click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program (or HL2.exe).&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10675</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10675"/>
		<updated>2018-11-18T22:59:43Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Installing addons */  tiny tweak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons&amp;lt;br/&amp;gt;&lt;br /&gt;
C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
{{Note|''To see example of commands output text, click Show -&amp;gt;''}}&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[#Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10674</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10674"/>
		<updated>2018-11-18T21:32:16Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Welcome new users! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
{{Note|Problem to launch the game while using srcds {{hidden|label=click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program.&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10673</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10673"/>
		<updated>2018-11-18T21:31:10Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: adding note, problem to launch game while using srcds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
{{Note|Problem to launch the game while using srcds {{hidden|label=click me!|&lt;br /&gt;
Such as CS:GO game. Go game directory and find '''csgo.exe''' program.&amp;lt;br/&amp;gt;&lt;br /&gt;
Create shortcut of program and add launch parameter '''-steam'''. Use shortcut instead Steam/Games window&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe&amp;quot; -steam&amp;lt;/code&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10672</id>
		<title>Category:SourceMod for beginners</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category:SourceMod_for_beginners&amp;diff=10672"/>
		<updated>2018-11-18T20:51:11Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: new category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:::{{Alert||'''This page is under construction''' --[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 14:51, 18 November 2018 (CST)}}&lt;br /&gt;
&lt;br /&gt;
= '''Welcome new users!''' =&lt;br /&gt;
This page is helping '''beginners''' who have no experience, to set up and start testing [https://www.sourcemod.net/ SourceMod] addon in own home PC (Windows).&amp;lt;br/&amp;gt;&lt;br /&gt;
- Some configuration (cvars, admins, etc. etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Tricks and Tips to start scripting own plugins&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Me [[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]), I try to guide you and add more content in here wiki when possible with my terrible english.&amp;lt;br/&amp;gt;&lt;br /&gt;
About games, we focus some popular games which have bots included. Such as Counter-Strike: Source, Counter-Strike: Global Offensive, Team Fortress 2 (free game!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation'''&lt;br /&gt;
&lt;br /&gt;
*[[Setting up a Source Dedicated Server (Windows)]]&lt;br /&gt;
*[[Installing MetaMod:Source and SourceMod (Windows)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...more content coming someday.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10671</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10671"/>
		<updated>2018-11-18T19:48:58Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Upgrading addons */  missing hastag #&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
{{Note|''To see example of commands output text, click Show -&amp;gt;''}}&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[#Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10670</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10670"/>
		<updated>2018-11-18T19:46:51Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Checking loaded addons &amp;amp; plugins */  note for example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
{{Note|''To see example of commands output text, click Show -&amp;gt;''}}&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10669</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10669"/>
		<updated>2018-11-18T19:43:20Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''{{color|orange|Source Dedicated Server}}''' {{srcds}} into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10668</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10668"/>
		<updated>2018-11-18T19:42:06Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: new category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod for beginners]]&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10667</id>
		<title>Installing MetaMod:Source and SourceMod (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Installing_MetaMod:Source_and_SourceMod_(Windows)&amp;diff=10667"/>
		<updated>2018-11-18T19:39:55Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: new quickstart guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - How install '''MetaMod:Source''' and '''SourceMod''' into Source Dedicated Server (Windows)&lt;br /&gt;
__TOC__&lt;br /&gt;
==Installing addons==&lt;br /&gt;
Download latest stable MM:S and SM zip packs (Windows version).&lt;br /&gt;
*https://www.sourcemm.net/downloads.php?branch=stable&lt;br /&gt;
*https://www.sourcemod.net/downloads.php?branch=stable&lt;br /&gt;
Extrack both zip files on your desktop, merging them into one.&lt;br /&gt;
&amp;lt;br/&amp;gt;Move '''addons''' and '''cfg''' folders into SRCDS &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example in Counter-Strike: Global Offensive dedicated server:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\addons|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\Server\counter-strike global offensive\csgo\cfg|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Checking loaded addons &amp;amp; plugins==&lt;br /&gt;
Launch SRCDS.&lt;br /&gt;
Typing these server commands into console input:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;padding-right:50px&amp;quot;|'''plugin_print'''||you see loaded addons&lt;br /&gt;
|-&lt;br /&gt;
|'''meta list'''||you see loaded MetaMod:Source plugins&lt;br /&gt;
|-&lt;br /&gt;
|'''sm exts list'''||you see loaded SourceMod extensions&lt;br /&gt;
|-&lt;br /&gt;
|'''sm plugins list'''||you see loaded SourceMod plugins&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{hidden|id=last|contentonly=yes|label=none|content=&amp;lt;br/&amp;gt;&lt;br /&gt;
 plugin_print&lt;br /&gt;
 Loaded plugins:&lt;br /&gt;
 ---------------------&lt;br /&gt;
 0:      &amp;quot;Metamod:Source 1.10.7-dev&amp;quot;&lt;br /&gt;
 ---------------------&lt;br /&gt;
 meta list&lt;br /&gt;
 Listing 3 plugins:&lt;br /&gt;
   [01] SourceMod (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [02] CS Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   [03] SDK Tools (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
 sm exts list&lt;br /&gt;
 [SM] Displaying 8 extensions:&lt;br /&gt;
 [01] Automatic Updater (1.9.0.6260): Updates SourceMod gamedata files&lt;br /&gt;
 [02] Webternet (1.9.0.6260): Extension for interacting with URLs&lt;br /&gt;
 [03] CS Tools (1.9.0.6260): CS extended functionality&lt;br /&gt;
 [04] BinTools (1.9.0.6260): Low-level C/C++ Calling API&lt;br /&gt;
 [05] SDK Tools (1.9.0.6260): Source SDK Tools&lt;br /&gt;
 [06] Top Menus (1.9.0.6260): Creates sorted nested menus&lt;br /&gt;
 [07] Client Preferences (1.9.0.6260): Saves client preference settings&lt;br /&gt;
 [08] SQLite (1.9.0.6260): SQLite Driver&lt;br /&gt;
 sm plugins list&lt;br /&gt;
 [SM] Listing 17 plugins:&lt;br /&gt;
   01 &amp;quot;Admin File Reader&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   02 &amp;quot;Admin Help&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   03 &amp;quot;Admin Menu&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   04 &amp;quot;Anti-Flood&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   05 &amp;quot;Basic Ban Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   06 &amp;quot;Basic Chat&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   07 &amp;quot;Basic Comm Control&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   08 &amp;quot;Basic Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   09 &amp;quot;Basic Info Triggers&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   10 &amp;quot;Basic Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   11 &amp;quot;Client Preferences&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   12 &amp;quot;Fun Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   13 &amp;quot;Fun Votes&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   14 &amp;quot;Nextmap&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   15 &amp;quot;Player Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   16 &amp;quot;Reserved Slots&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
   17 &amp;quot;Sound Commands&amp;quot; (1.9.0.6260) by AlliedModders LLC&lt;br /&gt;
&amp;lt;br/&amp;gt;|contentclass=toccolours|contentcss=&amp;quot;overflow: auto;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Upgrading addons==&lt;br /&gt;
Before upgrading files, close all running servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
:- If the server can not be shutdown (server reboot back up), find &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;metamod.vdf&amp;lt;/span&amp;gt; file and move it out from &amp;lt;span style=&amp;quot;font-family:courier new&amp;quot;&amp;gt;addons&amp;lt;/span&amp;gt; folder. Server stop loading MM:S and SM addons after reboot.&lt;br /&gt;
&lt;br /&gt;
Upgrading files, repeat again like in [[#Installing addons]].&amp;lt;br/&amp;gt;&lt;br /&gt;
But before moving files in server, delete these folders so you not lose your current configures/settings.&lt;br /&gt;
 addons\sourcemod\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;configs&amp;lt;/span&amp;gt;\&lt;br /&gt;
 cfg\&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;sourcemod&amp;lt;/span&amp;gt;\&lt;br /&gt;
Launch server (or reboot) and check loaded addons [[Checking loaded addons &amp;amp; plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 13:39, 18 November 2018 (CST)&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10666</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10666"/>
		<updated>2018-11-17T15:58:50Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Launching SRCDS */ update other games launch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''{{color|orange|Source Dedicated Server}}''' {{srcds}} into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run Counter-Strike: Global Offensive dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&lt;br /&gt;
Examples for other games&lt;br /&gt;
 &amp;quot;C:\Server\Counter-Strike Source\srcds.exe&amp;quot; -console -game cstrike +map de_dust2&lt;br /&gt;
 &amp;quot;C:\Server\Team Fortress 2\srcds.exe&amp;quot; -console -game tf +map cp_dustbowl&lt;br /&gt;
&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10665</id>
		<title>Talk:Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10665"/>
		<updated>2018-11-17T15:38:27Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
== Info 17.11.2018 ==&lt;br /&gt;
&lt;br /&gt;
This is one of page what I try to accomplish. Pls don't delete.&lt;br /&gt;
And try keep this page instruction short, it should be Quickstart guide.&lt;br /&gt;
&lt;br /&gt;
For more detailed description and for fancier programs for install SRCDS, there are plenty pages out there.&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10664</id>
		<title>Talk:Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10664"/>
		<updated>2018-11-17T15:38:12Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* Info 17.11.2018 */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info 17.11.2018 ==&lt;br /&gt;
&lt;br /&gt;
This is one of page what I try to accomplish. Pls don't delete.&lt;br /&gt;
And try keep this page instruction short, it should be Quickstart guide.&lt;br /&gt;
&lt;br /&gt;
For more detailed description and for fancier programs for install SRCDS, there are plenty pages out there.&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10663</id>
		<title>Setting up a Source Dedicated Server (Windows)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Setting_up_a_Source_Dedicated_Server_(Windows)&amp;diff=10663"/>
		<updated>2018-11-17T15:29:27Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Created page with &amp;quot;This is '''Quickstart guide''' - Setting up a '''{{color|orange|Source Dedicated Server}}''' {{srcds}} into your home PC (Windows version) using [https://developer.valvesoftwa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is '''Quickstart guide''' - Setting up a '''{{color|orange|Source Dedicated Server}}''' {{srcds}} into your home PC (Windows version) using [https://developer.valvesoftware.com/wiki/SteamCMD SteamCMD tool].&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Installing SRCDS==&lt;br /&gt;
[[File:Steamcmd files.png|thumb|50px|none]]&lt;br /&gt;
Get '''SteamCMD tool''' ([https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip Download Link]), extract zip file and place '''steamcmd.exe''' in this directory structure.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\steamcmd.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Open notepad.exe and create TXT file in same destination, named '''update.txt''' and create BATCH file named '''steamcmd_run.bat'''.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\steamcmd\update.txt&amp;lt;br/&amp;gt;C:\server\steamcmd\steamcmd_run.bat|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''steamcmd_run.bat''' file, save this script.&lt;br /&gt;
 steamcmd.exe +runscript update.txt&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Inside '''update.txt''' file, save this SteamCMD script&lt;br /&gt;
{{Note|''This script will now install multiple SRCDS (CS:GO, CS:S and TF2). Disable lines which you not want to install with double slash // or delete lines''}}&lt;br /&gt;
 &lt;br /&gt;
 login anonymous&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Global Offensive&amp;quot;&lt;br /&gt;
 app_update 740 validate&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Counter-Strike Source&amp;quot;&lt;br /&gt;
 app_update 232330 validate&lt;br /&gt;
 &lt;br /&gt;
 {{color|green|//force_install_dir &amp;quot;../Half-Life 2 Deathmatch&amp;quot;&lt;br /&gt;
 //app_update 232370 validate&lt;br /&gt;
 &lt;br /&gt;
 //force_install_dir &amp;quot;../Day of Defeat Source&amp;quot;&lt;br /&gt;
 //app_update 232290 validate}}&lt;br /&gt;
 &lt;br /&gt;
 force_install_dir &amp;quot;../Team Fortress 2&amp;quot;&lt;br /&gt;
 app_update 232250 validate&lt;br /&gt;
&lt;br /&gt;
{{Note|''If some reason you fail to create these above files, you can download those from google drive {{hidden|id=last2|label=Hidden Link!|labelonly=yes}}''&lt;br /&gt;
{{hidden|id=last2|contentonly=yes|label=none|content=https://drive.google.com/open?id=1Hb81rG2D5exQlPz1icLVG3c6VtIwedGP}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Run '''steamcmd_run.bat''' file, SteamCMD window should appear and start downloading files.&lt;br /&gt;
If everything is done right, you get SRCDS in &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;C:\server\&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Launching SRCDS==&lt;br /&gt;
[[File:Launch script.png|thumb|50px|none]]&lt;br /&gt;
Find '''srcds.exe''' program from SRCDS game directory. For example in CS:GO mod:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{font|text=C:\server\Counter-Strike Global Offensive\srcds.exe|font=Courier New|size=20px|color=#c9b295|bgcolor=#364d6a}}&lt;br /&gt;
|}&lt;br /&gt;
Create shortcut from '''srcds.exe''' and open shortcut properties.&amp;lt;br/&amp;gt;&lt;br /&gt;
In shortcut properties &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;Target:&amp;lt;/span&amp;gt; input, you see path to the program.&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*By adding parameter '''-console''', you run SRCDS without GUI&lt;br /&gt;
*Adding parameter '''-game''', you set &amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;&amp;lt;/span&amp;gt; folder you are going to run&lt;br /&gt;
*Adding SRCDS command '''+map''', you start server with specific map. You find maps in ...&amp;lt;span style=&amp;quot;font-family:courier;&amp;quot;&amp;gt;&amp;lt;game mod&amp;gt;/maps/&amp;lt;/span&amp;gt; folder&lt;br /&gt;
Example to run CS:GO dedicated server&lt;br /&gt;
 &amp;quot;C:\Server\counter-strike global offensive\srcds.exe&amp;quot; -console -game csgo +map de_dust2&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==Updating SRCDS==&lt;br /&gt;
Close all running SRCDS servers and run '''steamcmd_run.bat'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Bacardi|Bacardi]] ([[User talk:Bacardi|talk]]) 09:29, 17 November 2018 (CST)&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10662</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10662"/>
		<updated>2018-11-17T15:18:31Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Bacardi uploaded a new version of &amp;amp;quot;File:Steamcmd.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10661</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10661"/>
		<updated>2018-11-17T15:17:10Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Bacardi uploaded a new version of &amp;amp;quot;File:Steamcmd.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd_files.png&amp;diff=10660</id>
		<title>File:Steamcmd files.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd_files.png&amp;diff=10660"/>
		<updated>2018-11-17T15:12:32Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: steamcmd and files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;steamcmd and files&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File_talk:Steamcmd.png&amp;diff=10659</id>
		<title>File talk:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File_talk:Steamcmd.png&amp;diff=10659"/>
		<updated>2018-11-17T15:11:29Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: /* I don't know. I fail. */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== I don't know. I fail. ==&lt;br /&gt;
&lt;br /&gt;
Wiki is picking wrong picture everytime... :cry:&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10658</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10658"/>
		<updated>2018-11-17T15:05:42Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Bacardi uploaded a new version of &amp;amp;quot;File:Steamcmd.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10657</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10657"/>
		<updated>2018-11-17T15:04:33Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Bacardi uploaded a new version of &amp;amp;quot;File:Steamcmd.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10656</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10656"/>
		<updated>2018-11-17T15:02:25Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: Bacardi uploaded a new version of &amp;amp;quot;File:Steamcmd.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Launch_script.png&amp;diff=10655</id>
		<title>File:Launch script.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Launch_script.png&amp;diff=10655"/>
		<updated>2018-11-17T14:56:23Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: SRCDS launch script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SRCDS launch script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10654</id>
		<title>File:Steamcmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=File:Steamcmd.png&amp;diff=10654"/>
		<updated>2018-11-17T14:55:50Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: SteamCMD script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SteamCMD script&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Template:Srcds&amp;diff=10653</id>
		<title>Template:Srcds</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Template:Srcds&amp;diff=10653"/>
		<updated>2018-11-16T16:01:01Z</updated>

		<summary type="html">&lt;p&gt;Bacardi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:srcds.png|link=Source Dedicated Server|alt=&amp;lt;Source Dedicated Server&amp;gt;|18x16px|text-bottom]]&amp;lt;noinclude&amp;gt;[[Category:Game icons|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bacardi</name></author>
		
	</entry>
</feed>