<?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=Kailo</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=Kailo"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/Kailo"/>
	<updated>2026-04-17T06:42:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=10750</id>
		<title>ConVars (SourceMod Scripting)/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=10750"/>
		<updated>2019-06-22T16:06:39Z</updated>

		<summary type="html">&lt;p&gt;Kailo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|ConVars_(SourceMod_Scripting)}}&lt;br /&gt;
Квары - ''это консольные переменные.'' Они могут иметь числовое или строчное значение. Их значения могут быть изменены через консоль или с помощью .cfg файлов, а иногда сохраняются для всех сеансов сервера.&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
Квары доступны через Handle`s. Есть 2 способа получить Handle квара. Создать новый квар или найти существующий. Если вы создадите уже существующий квар, автоматически будет использоваться старый.&lt;br /&gt;
&lt;br /&gt;
''Примечание: Handle`s для кваров являются уникальными, их не нужно закрывать или присваивать INVALID_HANDLE. Они должны существовать пока SourceMod запущен.''&lt;br /&gt;
&lt;br /&gt;
==Поиск кваров==&lt;br /&gt;
Искать квары очень просто. Например, вы хотите найти &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; из Counter-Strike:Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_hStartMoney&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hStartMoney = FindConVar(&amp;quot;mp_startmoney&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Примечание: FindConVar() вернет ''&amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt;'' если квар не найден.  Keep this in mind if you are trying to read ConVars from other plugins.''&lt;br /&gt;
&lt;br /&gt;
==Создание кваров==&lt;br /&gt;
Простейший квар требует всего 2 значения: имя и значение по умолчанию. Тем не менее, он может содержать описание:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hEnabled&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hEnabled = CreateConVar(&amp;quot;myplugin_enabled&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;Включение/Выключение плагина.&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы так же имеете возможностю ограничить значение. Например, давайте создадим квар названием &amp;lt;tt&amp;gt;myplugin_ratio&amp;lt;/tt&amp;gt;, который не может быть выше 1,0 и ниже 0,1.&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hEnabled&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hEnabled = CreateConVar(&amp;quot;myplugin_ratio&amp;quot;,&lt;br /&gt;
			&amp;quot;0.6&amp;quot;,&lt;br /&gt;
			&amp;quot;Sets a vote ratio&amp;quot;,&lt;br /&gt;
			_,	/* Флаги (будут обсуждаться позже) */&lt;br /&gt;
			true,	/* Включить минимальное значение */&lt;br /&gt;
			0.1,&lt;br /&gt;
			true,	/* Включить максимальное значение */&lt;br /&gt;
			1.0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значение по умолчанию может иметь любой тип данных, и оно не ограничивает будущие типы данных, которые можно использовать. Тем не менее, минимальные и максимальные ограничения всегда должны быть числом с плавающей точкой (float).&lt;br /&gt;
&lt;br /&gt;
Если вы создаете квар, который уже существует, вы получите Handle на этот квар. Кроме того, сами Handle будут идентичны, поскольку плагин будет владеть Handle. Описание, значение по умолчанию, или ограничения не будут изменены.&lt;br /&gt;
&lt;br /&gt;
=Использование/Изменение значений=&lt;br /&gt;
Использовать квары очень просто. Например, мы хотим изменить &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt;, но сохранить старое значение и восстановить его позже. Повторно используем наш код &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; от раздела &amp;lt;tt&amp;gt;Получение кваров&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_oldmoney&lt;br /&gt;
&lt;br /&gt;
SetStartMoney(newmoney)&lt;br /&gt;
{&lt;br /&gt;
	g_oldmoney = GetConVarInt(g_hStartMoney)&lt;br /&gt;
	SetConVarInt(g_hStartMoney, newmoney)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RestoreStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	SetConVarInt(g_hStartMoney, g_oldmoney)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хотя существуют различные функции для типов значений (с плавающей точкой, строки, и так далее), внутренние данные всегда сохраняются так же. Например, этот код будет работать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public GetStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	decl String:buffer[128]&lt;br /&gt;
&lt;br /&gt;
	GetConVarString(g_hStartMoney, buffer, sizeof(buffer))&lt;br /&gt;
&lt;br /&gt;
	return StringToInt(buffer)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; целое число, он может использоваться как строка.&lt;br /&gt;
&lt;br /&gt;
=Флаги=&lt;br /&gt;
Квары могут иметь ряд флагов, в зависимости от которых могут менять свое поведение. Основные флаги:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_PROTECTED&amp;lt;/tt&amp;gt; - Секретная информация (не должны подвергаться воздействию клиентов или логов).&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_NOTIFY&amp;lt;/tt&amp;gt; - Уведомление клиентов об изменении.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_CHEAT&amp;lt;/tt&amp;gt; - Могут использоваться только в случае если &amp;lt;tt&amp;gt;sv_cheats&amp;lt;/tt&amp;gt; равно 1.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_REPLICATED&amp;lt;/tt&amp;gt; - Принудительная установка значения квара на клиенте.&lt;br /&gt;
&lt;br /&gt;
Например,  мы хотим изменить значение квара с флагом FCVAR_CHEAT.  The following two functions could be used:&lt;br /&gt;
&amp;lt;pawn&amp;gt;UnsetCheatVar(Handle:hndl)&lt;br /&gt;
{&lt;br /&gt;
	new flags = GetConVarFlags(hndl)&lt;br /&gt;
	flags &amp;amp;= ~FCVAR_CHEAT&lt;br /&gt;
	SetConVarFlags(hndl, flags)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SetCheatVar(Handle:hndl)&lt;br /&gt;
{&lt;br /&gt;
	new flags = GetConVarFlags(hndl)&lt;br /&gt;
	flags |= FCVAR_CHEAT&lt;br /&gt;
	SetConVarFlags(hndl, flags)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Change Callbacks=&lt;br /&gt;
As of Half-Life 2, it is possible to know when ConVars change.  While this is a very powerful feature, you must be careful not to set a ConVar inside a ConVar change hook such that it re-invokes he same callback.  This results in ''infinite recursion''.&lt;br /&gt;
&lt;br /&gt;
For example, let's say you want to detect when &amp;lt;tt&amp;gt;bot_quota&amp;lt;/tt&amp;gt; changes and to prevent it from going below 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hBotQuota&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hBotQuota = FindConVar(&amp;quot;bot_quota&amp;quot;)&lt;br /&gt;
	if (g_hBotQuota != INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		HookConVarChange(g_hBotQuota, OnBotQuotaChange)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public OnBotQuotaChange(Handle:cvar, const String:oldVal[], const String:newVal[])&lt;br /&gt;
{&lt;br /&gt;
	if (StringToInt(newVal) &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		SetConVarInt(cvar, 2)&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note 1:''' You do not need to explicitly unhook ConVarChange functions on shutdown.  These hooks are removed when your plugin unloads.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You cannot prevent cvar changes from happening; you can only change the value again.  If the engine or game mod already have a change function installed for a ConVar, that function will always be called first.&lt;br /&gt;
&lt;br /&gt;
[[Category:Ru:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)/ru&amp;diff=10000</id>
		<title>Admin Menu Configuration (SourceMod)/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)/ru&amp;diff=10000"/>
		<updated>2015-09-06T07:56:49Z</updated>

		<summary type="html">&lt;p&gt;Kailo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Admin Menu Configuration (SourceMod)}}&lt;br /&gt;
&lt;br /&gt;
В меню администратора SourceMod'а можно менять порядок пунктов. Пункты не могут быть перемещены из одной категории в другую, но они могут изменить свой порядок (расположение) внутри категории. Пункты, которые не были отсортированы, будут отображены ''после'' сортированных пунктов, и их сортировка будет определяться их трансляционной фразой.&lt;br /&gt;
&lt;br /&gt;
Сортировка контролируется файлом ''addons/sourcemod/configs/adminmenu_sorting.txt''. Каждая секция обозначает имя категории. Порядок секций определяет порядок категорий (категории тоже можно сортировать). Каждая секция содержит список уникальных имен пунктов, которые будут сортироваться.&lt;br /&gt;
&lt;br /&gt;
Помните, что пункты ''не'' команды. Они являются уникальными названиями, связанными с каждым пунктом меню. Сторонние плагины могут добавлять новые пукнты в меню администратора, и эти пункты будут иметь своё собственное уникальное имя, несмотря на то, есть ли такая команда или нет.&lt;br /&gt;
&lt;br /&gt;
=Пример=&lt;br /&gt;
Данный пример делает меню похожим на меню администратора Mani Admin Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Menu&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;PlayerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_slay&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_kick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_ban&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_gag&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_burn&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_map&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_execcfg&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_reloadadmins&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;VotingCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_cancelvote&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votemap&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votekick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_voteban&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для файла, приведенного выше, меню администратора будет выглядить следующим образом:&lt;br /&gt;
*Открыв его, будет три категории в следующем порядке: управление игроками, управление сервером, управление голосованиями&lt;br /&gt;
*Управление игроками будет содержать в следующем порядке: убить, кикнуть, забанить, отключить чат, поджечь. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
*Управление сервером будет содержать в следующем порядке: сменить карту, выполнить cfg, перезагрузить список администраторов. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
*Управление голосованием будет содержать в следующем порядке: отменить голосование, начать голосование за смену карты, начать голосование за кик, начать голосование за бан. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)&amp;diff=9999</id>
		<title>Admin Menu Configuration (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)&amp;diff=9999"/>
		<updated>2015-09-06T07:56:15Z</updated>

		<summary type="html">&lt;p&gt;Kailo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Admin Menu Configuration (SourceMod)}}&lt;br /&gt;
&lt;br /&gt;
SourceMod's administration menu can be configured to change the ordering of items.  Items cannot be moved from one category to another, however, they can be re-ordered within categories.  Items that are not explicitly sorted are displayed ''after'' the sorted items, and they are sorted by their translated phrase in the client's language.&lt;br /&gt;
&lt;br /&gt;
Sorting is controlled via ''addons/sourcemod/configs/adminmenu_sorting.txt''.  Each section specifies the name of a category.  The order of the sections determines the order the categories are sorted.  Each section contains a list of unique item names that specify item sorting.&lt;br /&gt;
&lt;br /&gt;
Note that the items are ''not'' commands.  They are the unique names associated with each item on the menu.  Third party plugins may add new items to the admin menu, and those items will have their own unique names, whether there is an associated command or not.&lt;br /&gt;
&lt;br /&gt;
=Sample Layout=&lt;br /&gt;
This layout is designed to look similar to Mani Admin Plugin's admin menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Menu&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;PlayerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_slay&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_kick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_ban&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_gag&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_burn&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_map&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_execcfg&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_reloadadmins&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;VotingCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_cancelvote&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votemap&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votekick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_voteban&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)/ru&amp;diff=9997</id>
		<title>Admin Menu Configuration (SourceMod)/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Admin_Menu_Configuration_(SourceMod)/ru&amp;diff=9997"/>
		<updated>2015-09-06T07:55:34Z</updated>

		<summary type="html">&lt;p&gt;Kailo: Kailo moved page Ru:Admin Menu Configuration (SourceMod) to Admin Menu Configuration (SourceMod)/ru&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В меню администратора SourceMod'а можно менять порядок пунктов. Пункты не могут быть перемещены из одной категории в другую, но они могут изменить свой порядок (расположение) внутри категории. Пункты, которые не были отсортированы, будут отображены ''после'' сортированных пунктов, и их сортировка будет определяться их трансляционной фразой.&lt;br /&gt;
&lt;br /&gt;
Сортировка контролируется файлом ''addons/sourcemod/configs/adminmenu_sorting.txt''. Каждая секция обозначает имя категории. Порядок секций определяет порядок категорий (категории тоже можно сортировать). Каждая секция содержит список уникальных имен пунктов, которые будут сортироваться.&lt;br /&gt;
&lt;br /&gt;
Помните, что пункты ''не'' команды. Они являются уникальными названиями, связанными с каждым пунктом меню. Сторонние плагины могут добавлять новые пукнты в меню администратора, и эти пункты будут иметь своё собственное уникальное имя, несмотря на то, есть ли такая команда или нет.&lt;br /&gt;
&lt;br /&gt;
=Пример=&lt;br /&gt;
Данный пример делает меню похожим на меню администратора Mani Admin Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Menu&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;PlayerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_slay&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_kick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_ban&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_gag&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_burn&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServerCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_map&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_execcfg&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_reloadadmins&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;VotingCommands&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_cancelvote&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votemap&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_votekick&amp;quot;&lt;br /&gt;
        &amp;quot;item&amp;quot;      &amp;quot;sm_voteban&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для файла, приведенного выше, меню администратора будет выглядить следующим образом:&lt;br /&gt;
*Открыв его, будет три категории в следующем порядке: управление игроками, управление сервером, управление голосованиями&lt;br /&gt;
*Управление игроками будет содержать в следующем порядке: убить, кикнуть, забанить, отключить чат, поджечь. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
*Управление сервером будет содержать в следующем порядке: сменить карту, выполнить cfg, перезагрузить список администраторов. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
*Управление голосованием будет содержать в следующем порядке: отменить голосование, начать голосование за смену карты, начать голосование за кик, начать голосование за бан. Дальше будут идти все пункты, которые не перечислены, но относятся к этой категории.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Documentation]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Admin_Menu_Configuration_(SourceMod)&amp;diff=9998</id>
		<title>Ru:Admin Menu Configuration (SourceMod)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Admin_Menu_Configuration_(SourceMod)&amp;diff=9998"/>
		<updated>2015-09-06T07:55:34Z</updated>

		<summary type="html">&lt;p&gt;Kailo: Kailo moved page Ru:Admin Menu Configuration (SourceMod) to Admin Menu Configuration (SourceMod)/ru&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Admin Menu Configuration (SourceMod)/ru]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Counter-Strike:_Global_Offensive_Weapons&amp;diff=9938</id>
		<title>Counter-Strike: Global Offensive Weapons</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Counter-Strike:_Global_Offensive_Weapons&amp;diff=9938"/>
		<updated>2015-07-12T18:04:00Z</updated>

		<summary type="html">&lt;p&gt;Kailo: /* Pistols */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Weapon_Names(Source)]] &amp;gt; [[Counter-Strike: Global Offensive Weapons]]&lt;br /&gt;
&lt;br /&gt;
==Counter-Strike: Global Offensive Weapons :==&lt;br /&gt;
&lt;br /&gt;
Here you can see the weapon's name returned in event's return values&lt;br /&gt;
(just add &amp;quot;weapon_&amp;quot; before if weapon's name comes from functions and not from events)&lt;br /&gt;
&lt;br /&gt;
===Pistols===&lt;br /&gt;
* glock&lt;br /&gt;
* p250&lt;br /&gt;
* fiveseven&lt;br /&gt;
* deagle&lt;br /&gt;
* elite&lt;br /&gt;
* hkp2000 ''CT-only''&lt;br /&gt;
* tec9 ''T-only''&lt;br /&gt;
&lt;br /&gt;
===Heavy===&lt;br /&gt;
* nova&lt;br /&gt;
* xm1014&lt;br /&gt;
* mag7 ''CT-only''&lt;br /&gt;
* sawedoff ''T-only''&lt;br /&gt;
* m249&lt;br /&gt;
* negev&lt;br /&gt;
&lt;br /&gt;
===SMGs===&lt;br /&gt;
* mp9 ''CT-only''&lt;br /&gt;
* mac10 ''T-only''&lt;br /&gt;
* mp7&lt;br /&gt;
* ump45&lt;br /&gt;
* p90&lt;br /&gt;
* bizon&lt;br /&gt;
&lt;br /&gt;
===Rifles===&lt;br /&gt;
* famas ''CT-only''&lt;br /&gt;
* m4a1 ''CT-only''&lt;br /&gt;
* galilar ''T-only''&lt;br /&gt;
* ak47 ''T-only''&lt;br /&gt;
* ssg08&lt;br /&gt;
* aug ''CT-only''&lt;br /&gt;
* sg556 ''T-only''&lt;br /&gt;
* awp&lt;br /&gt;
* scar20 ''CT-only''&lt;br /&gt;
* g3sg1 ''T-only''&lt;br /&gt;
&lt;br /&gt;
===Gear===&lt;br /&gt;
* taser&lt;br /&gt;
* knife&lt;br /&gt;
&lt;br /&gt;
===Grenades===&lt;br /&gt;
* hegrenade&lt;br /&gt;
* flashbang&lt;br /&gt;
* smokegrenade&lt;br /&gt;
* molotov&lt;br /&gt;
* decoy&lt;br /&gt;
&lt;br /&gt;
Back to : [[Weapon_Names(Source)]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9832</id>
		<title>ConVars (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9832"/>
		<updated>2015-03-08T18:53:46Z</updated>

		<summary type="html">&lt;p&gt;Kailo: /* Using/Changing Values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|ConVars_(SourceMod_Scripting)}}&lt;br /&gt;
This page for the new [[SourcePawn Transitional Syntax]]. For the old syntax see [https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;amp;oldid=6865 old version of page].&lt;br /&gt;
&lt;br /&gt;
'''ConVars''' are ''con''sole ''var''iables. They store string which can view as boolean, float, or numerical values. These values can be changed via the console or .cfg files, and sometimes even persist across server sessions.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
ConVars are accessed through own class named as [https://sm.alliedmods.net/new-api/convars/ConVar ConVar]. There are two ways to obtain a ConVar. You can either create a new ConVar, or find an existing one. If you create a ConVar that already exists, it will automatically re-use the old one.&lt;br /&gt;
&lt;br /&gt;
== Finding ConVars ==&lt;br /&gt;
Finding ConVars is very simple. For example, let's say you want to use &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; from Counter-Strike:Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvStartMoney&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney = FindConVar(&amp;quot;mp_startmoney&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: FindConVar() will return ''&amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;'' if the ConVar is not found.  Keep this in mind if you are trying to read ConVars from other plugins.''&lt;br /&gt;
&lt;br /&gt;
== Creating ConVars ==&lt;br /&gt;
A simple ConVar only requires two parameters, a name and a default value. However, it's a good idea to include a description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvEnabled&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvEnabled = CreateConVar(&amp;quot;myplugin_enabled&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;Sets whether my plugin is enabled&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also specify value constraints. For example, let's create a cvar called &amp;lt;tt&amp;gt;myplugin_ratio&amp;lt;/tt&amp;gt; which cannot go above 1.0 or below 0.1.&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvRatio&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvRatio = CreateConVar(&amp;quot;myplugin_ratio&amp;quot;,&lt;br /&gt;
			&amp;quot;0.6&amp;quot;,&lt;br /&gt;
			&amp;quot;Sets a vote ratio&amp;quot;,&lt;br /&gt;
			_,	/* Flags will be discussed later */&lt;br /&gt;
			true,	/* Has a minimum */&lt;br /&gt;
			0.1,&lt;br /&gt;
			true,	/* Has a maximum */&lt;br /&gt;
			1.0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default value can be any type of data, and it does not restrict future data types that can be used.  However, the minimum and maximum constraints always interpret the value as a float.&lt;br /&gt;
&lt;br /&gt;
= Using/Changing Values =&lt;br /&gt;
Managing ConVars is very simple.  For example, let's say we want to change &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt;, but save the old value and restore it later.  Re-using our &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; code from &amp;lt;tt&amp;gt;[[ConVars_(SourceMod_Scripting)#Finding _ConVars|FindConVar]]&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;int g_oldmoney&lt;br /&gt;
&lt;br /&gt;
SetStartMoney(int newmoney)&lt;br /&gt;
{&lt;br /&gt;
	g_oldmoney = g_hStartMoney.IntValue&lt;br /&gt;
	g_cvStartMoney.IntValue = newmoney&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RestoreStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney.IntValue = g_oldmoney&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although there are different functions for value types (float, string, et cetera), the internal data is always stored the same way.  For example, this code will work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int GetStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	char buffer[128]&lt;br /&gt;
&lt;br /&gt;
	g_cvStartMoney.GetString(buffer, 128)&lt;br /&gt;
&lt;br /&gt;
	return StringToInt(buffer)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Even though &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; is an integer, it can still be retrieved as a string.&lt;br /&gt;
&lt;br /&gt;
= Flags =&lt;br /&gt;
ConVars can have a number of flags to change their behaviour.  A few of the important flags are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_PROTECTED&amp;lt;/tt&amp;gt; - Sensitive information (should not be exposed to clients or logs).&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_NOTIFY&amp;lt;/tt&amp;gt; - Clients are notified of changes.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_CHEAT&amp;lt;/tt&amp;gt; - Can only be use if &amp;lt;tt&amp;gt;sv_cheats&amp;lt;/tt&amp;gt; is 1.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_REPLICATED&amp;lt;/tt&amp;gt; - Setting is forced to clients.&lt;br /&gt;
&lt;br /&gt;
Let's say we wanted to toggle whether a cvar had FCVAR_CHEAT.  The following two functions could be used:&lt;br /&gt;
&amp;lt;pawn&amp;gt;void UnsetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags &amp;amp;= ~FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags |= FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Change Callbacks =&lt;br /&gt;
As of Half-Life 2, it is possible to know when ConVars change.  While this is a very powerful feature, you must be careful not to set a ConVar inside a ConVar change hook such that it re-invokes he same callback.  This results in ''infinite recursion''.&lt;br /&gt;
&lt;br /&gt;
For example, let's say you want to detect when &amp;lt;tt&amp;gt;bot_quota&amp;lt;/tt&amp;gt; changes and to prevent it from going below 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_hBotQuota&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hBotQuota = FindConVar(&amp;quot;bot_quota&amp;quot;)&lt;br /&gt;
	if (g_hBotQuota != null)&lt;br /&gt;
	{&lt;br /&gt;
		g_hBotQuota.AddChangeHook(OnBotQuotaChange)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnBotQuotaChange(ConVar convar, char[] oldValue, char[] newValue)&lt;br /&gt;
{&lt;br /&gt;
	if (StringToInt(newValue) &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		convar.IntValue = 2&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note 1:''' You do not need to explicitly unhook ConVarChange functions on shutdown.  These hooks are removed when your plugin unloads.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You cannot prevent cvar changes from happening; you can only change the value again.  If the engine or game mod already have a change function installed for a ConVar, that function will always be called first.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9831</id>
		<title>ConVars (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9831"/>
		<updated>2015-03-08T18:52:27Z</updated>

		<summary type="html">&lt;p&gt;Kailo: /* Creating ConVars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|ConVars_(SourceMod_Scripting)}}&lt;br /&gt;
This page for the new [[SourcePawn Transitional Syntax]]. For the old syntax see [https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;amp;oldid=6865 old version of page].&lt;br /&gt;
&lt;br /&gt;
'''ConVars''' are ''con''sole ''var''iables. They store string which can view as boolean, float, or numerical values. These values can be changed via the console or .cfg files, and sometimes even persist across server sessions.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
ConVars are accessed through own class named as [https://sm.alliedmods.net/new-api/convars/ConVar ConVar]. There are two ways to obtain a ConVar. You can either create a new ConVar, or find an existing one. If you create a ConVar that already exists, it will automatically re-use the old one.&lt;br /&gt;
&lt;br /&gt;
== Finding ConVars ==&lt;br /&gt;
Finding ConVars is very simple. For example, let's say you want to use &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; from Counter-Strike:Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvStartMoney&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney = FindConVar(&amp;quot;mp_startmoney&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: FindConVar() will return ''&amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;'' if the ConVar is not found.  Keep this in mind if you are trying to read ConVars from other plugins.''&lt;br /&gt;
&lt;br /&gt;
== Creating ConVars ==&lt;br /&gt;
A simple ConVar only requires two parameters, a name and a default value. However, it's a good idea to include a description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvEnabled&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvEnabled = CreateConVar(&amp;quot;myplugin_enabled&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;Sets whether my plugin is enabled&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also specify value constraints. For example, let's create a cvar called &amp;lt;tt&amp;gt;myplugin_ratio&amp;lt;/tt&amp;gt; which cannot go above 1.0 or below 0.1.&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvRatio&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvRatio = CreateConVar(&amp;quot;myplugin_ratio&amp;quot;,&lt;br /&gt;
			&amp;quot;0.6&amp;quot;,&lt;br /&gt;
			&amp;quot;Sets a vote ratio&amp;quot;,&lt;br /&gt;
			_,	/* Flags will be discussed later */&lt;br /&gt;
			true,	/* Has a minimum */&lt;br /&gt;
			0.1,&lt;br /&gt;
			true,	/* Has a maximum */&lt;br /&gt;
			1.0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default value can be any type of data, and it does not restrict future data types that can be used.  However, the minimum and maximum constraints always interpret the value as a float.&lt;br /&gt;
&lt;br /&gt;
= Using/Changing Values =&lt;br /&gt;
Managing ConVars is very simple.  For example, let's say we want to change &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt;, but save the old value and restore it later.  Re-using our &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; code from &amp;lt;tt&amp;gt;FindConVar&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;int g_oldmoney&lt;br /&gt;
&lt;br /&gt;
SetStartMoney(int newmoney)&lt;br /&gt;
{&lt;br /&gt;
	g_oldmoney = g_hStartMoney.IntValue&lt;br /&gt;
	g_cvStartMoney.IntValue = newmoney&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RestoreStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney.IntValue = g_oldmoney&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although there are different functions for value types (float, string, et cetera), the internal data is always stored the same way.  For example, this code will work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int GetStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	char buffer[128]&lt;br /&gt;
&lt;br /&gt;
	g_cvStartMoney.GetString(buffer, 128)&lt;br /&gt;
&lt;br /&gt;
	return StringToInt(buffer)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Even though &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; is an integer, it can still be retrieved as a string.&lt;br /&gt;
&lt;br /&gt;
= Flags =&lt;br /&gt;
ConVars can have a number of flags to change their behaviour.  A few of the important flags are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_PROTECTED&amp;lt;/tt&amp;gt; - Sensitive information (should not be exposed to clients or logs).&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_NOTIFY&amp;lt;/tt&amp;gt; - Clients are notified of changes.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_CHEAT&amp;lt;/tt&amp;gt; - Can only be use if &amp;lt;tt&amp;gt;sv_cheats&amp;lt;/tt&amp;gt; is 1.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_REPLICATED&amp;lt;/tt&amp;gt; - Setting is forced to clients.&lt;br /&gt;
&lt;br /&gt;
Let's say we wanted to toggle whether a cvar had FCVAR_CHEAT.  The following two functions could be used:&lt;br /&gt;
&amp;lt;pawn&amp;gt;void UnsetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags &amp;amp;= ~FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags |= FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Change Callbacks =&lt;br /&gt;
As of Half-Life 2, it is possible to know when ConVars change.  While this is a very powerful feature, you must be careful not to set a ConVar inside a ConVar change hook such that it re-invokes he same callback.  This results in ''infinite recursion''.&lt;br /&gt;
&lt;br /&gt;
For example, let's say you want to detect when &amp;lt;tt&amp;gt;bot_quota&amp;lt;/tt&amp;gt; changes and to prevent it from going below 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_hBotQuota&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hBotQuota = FindConVar(&amp;quot;bot_quota&amp;quot;)&lt;br /&gt;
	if (g_hBotQuota != null)&lt;br /&gt;
	{&lt;br /&gt;
		g_hBotQuota.AddChangeHook(OnBotQuotaChange)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnBotQuotaChange(ConVar convar, char[] oldValue, char[] newValue)&lt;br /&gt;
{&lt;br /&gt;
	if (StringToInt(newValue) &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		convar.IntValue = 2&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note 1:''' You do not need to explicitly unhook ConVarChange functions on shutdown.  These hooks are removed when your plugin unloads.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You cannot prevent cvar changes from happening; you can only change the value again.  If the engine or game mod already have a change function installed for a ConVar, that function will always be called first.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9830</id>
		<title>ConVars (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;diff=9830"/>
		<updated>2015-03-08T18:49:03Z</updated>

		<summary type="html">&lt;p&gt;Kailo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|ConVars_(SourceMod_Scripting)}}&lt;br /&gt;
This page for the new [[SourcePawn Transitional Syntax]]. For the old syntax see [https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)&amp;amp;oldid=6865 old version of page].&lt;br /&gt;
&lt;br /&gt;
'''ConVars''' are ''con''sole ''var''iables. They store string which can view as boolean, float, or numerical values. These values can be changed via the console or .cfg files, and sometimes even persist across server sessions.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
ConVars are accessed through own class named as [https://sm.alliedmods.net/new-api/convars/ConVar ConVar]. There are two ways to obtain a ConVar. You can either create a new ConVar, or find an existing one. If you create a ConVar that already exists, it will automatically re-use the old one.&lt;br /&gt;
&lt;br /&gt;
== Finding ConVars ==&lt;br /&gt;
Finding ConVars is very simple. For example, let's say you want to use &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; from Counter-Strike:Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvStartMoney&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney = FindConVar(&amp;quot;mp_startmoney&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: FindConVar() will return ''&amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;'' if the ConVar is not found.  Keep this in mind if you are trying to read ConVars from other plugins.''&lt;br /&gt;
&lt;br /&gt;
== Creating ConVars ==&lt;br /&gt;
A simple ConVar only requires two parameters, a name and a default value. However, it's a good idea to include a description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvEnabled&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvEnabled = CreateConVar(&amp;quot;myplugin_enabled&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;Sets whether my plugin is enabled&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also specify value constraints. For example, let's create a cvar called &amp;lt;tt&amp;gt;myplugin_ratio&amp;lt;/tt&amp;gt; which cannot go above 1.0 or below 0.1.&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_cvRatio&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_cvRatio = CreateConVar(&amp;quot;myplugin_ratio&amp;quot;,&lt;br /&gt;
			&amp;quot;0.6&amp;quot;,&lt;br /&gt;
			&amp;quot;Sets a vote ratio&amp;quot;,&lt;br /&gt;
			_,	/* Flags will be discussed later */&lt;br /&gt;
			true,	/* Has a minimum */&lt;br /&gt;
			0.1,&lt;br /&gt;
			true,	/* Has a maximum */&lt;br /&gt;
			1.0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default value can be any type of data, and it does not restrict future data types that can be used.  However, the minimum and maximum constraints always interpret the value as a float.&lt;br /&gt;
&lt;br /&gt;
= Using/Changing Values =&lt;br /&gt;
Managing ConVars is very simple.  For example, let's say we want to change &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt;, but save the old value and restore it later.  Re-using our &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; code from &amp;lt;tt&amp;gt;FindConVar&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;int g_oldmoney&lt;br /&gt;
&lt;br /&gt;
SetStartMoney(int newmoney)&lt;br /&gt;
{&lt;br /&gt;
	g_oldmoney = g_hStartMoney.IntValue&lt;br /&gt;
	g_cvStartMoney.IntValue = newmoney&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RestoreStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	g_cvStartMoney.IntValue = g_oldmoney&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although there are different functions for value types (float, string, et cetera), the internal data is always stored the same way.  For example, this code will work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public int GetStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	char buffer[128]&lt;br /&gt;
&lt;br /&gt;
	g_cvStartMoney.GetString(buffer, 128)&lt;br /&gt;
&lt;br /&gt;
	return StringToInt(buffer)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Even though &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; is an integer, it can still be retrieved as a string.&lt;br /&gt;
&lt;br /&gt;
= Flags =&lt;br /&gt;
ConVars can have a number of flags to change their behaviour.  A few of the important flags are:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_PROTECTED&amp;lt;/tt&amp;gt; - Sensitive information (should not be exposed to clients or logs).&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_NOTIFY&amp;lt;/tt&amp;gt; - Clients are notified of changes.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_CHEAT&amp;lt;/tt&amp;gt; - Can only be use if &amp;lt;tt&amp;gt;sv_cheats&amp;lt;/tt&amp;gt; is 1.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_REPLICATED&amp;lt;/tt&amp;gt; - Setting is forced to clients.&lt;br /&gt;
&lt;br /&gt;
Let's say we wanted to toggle whether a cvar had FCVAR_CHEAT.  The following two functions could be used:&lt;br /&gt;
&amp;lt;pawn&amp;gt;void UnsetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags &amp;amp;= ~FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SetCheatVar(ConVar convar)&lt;br /&gt;
{&lt;br /&gt;
	int flags = convar.Flags&lt;br /&gt;
	flags |= FCVAR_CHEAT&lt;br /&gt;
	convar.Flags = flags&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Change Callbacks =&lt;br /&gt;
As of Half-Life 2, it is possible to know when ConVars change.  While this is a very powerful feature, you must be careful not to set a ConVar inside a ConVar change hook such that it re-invokes he same callback.  This results in ''infinite recursion''.&lt;br /&gt;
&lt;br /&gt;
For example, let's say you want to detect when &amp;lt;tt&amp;gt;bot_quota&amp;lt;/tt&amp;gt; changes and to prevent it from going below 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;ConVar g_hBotQuota&lt;br /&gt;
&lt;br /&gt;
public void OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hBotQuota = FindConVar(&amp;quot;bot_quota&amp;quot;)&lt;br /&gt;
	if (g_hBotQuota != null)&lt;br /&gt;
	{&lt;br /&gt;
		g_hBotQuota.AddChangeHook(OnBotQuotaChange)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void OnBotQuotaChange(ConVar convar, char[] oldValue, char[] newValue)&lt;br /&gt;
{&lt;br /&gt;
	if (StringToInt(newValue) &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		convar.IntValue = 2&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note 1:''' You do not need to explicitly unhook ConVarChange functions on shutdown.  These hooks are removed when your plugin unloads.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You cannot prevent cvar changes from happening; you can only change the value again.  If the engine or game mod already have a change function installed for a ConVar, that function will always be called first.&lt;br /&gt;
&lt;br /&gt;
[[Category:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=9828</id>
		<title>ConVars (SourceMod Scripting)/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=9828"/>
		<updated>2015-03-08T15:42:35Z</updated>

		<summary type="html">&lt;p&gt;Kailo: Kailo moved page Ru:ConVars (SourceMod Scripting) to ConVars (SourceMod Scripting)/ru: Wrong non-english page name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Квары - ''это консольные переменные.'' Они могут иметь числовое или строчное значение. Их значения могут быть изменены через консоль или с помощью .cfg файлов, а иногда сохраняются для всех сеансов сервера.&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
Квары доступны через Handle`s. Есть 2 способа получить Handle квара. Создать новый квар или найти существующий. Если вы создадите уже существующий квар, автоматически будет использоваться старый.&lt;br /&gt;
&lt;br /&gt;
''Примечание: Handle`s для кваров являются уникальными, их не нужно закрывать или присваивать INVALID_HANDLE. Они должны существовать пока SourceMod запущен.''&lt;br /&gt;
&lt;br /&gt;
==Поиск кваров==&lt;br /&gt;
Искать квары очень просто. Например, вы хотите найти &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; из Counter-Strike:Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_hStartMoney&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hStartMoney = FindConVar(&amp;quot;mp_startmoney&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Примечание: FindConVar() вернет ''&amp;lt;tt&amp;gt;INVALID_HANDLE&amp;lt;/tt&amp;gt;'' если квар не найден.  Keep this in mind if you are trying to read ConVars from other plugins.''&lt;br /&gt;
&lt;br /&gt;
==Создание кваров==&lt;br /&gt;
Простейший квар требует всего 2 значения: имя и значение по умолчанию. Тем не менее, он может содержать описание:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hEnabled&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hEnabled = CreateConVar(&amp;quot;myplugin_enabled&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;Включение/Выключение плагина.&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы так же имеете возможностю ограничить значение. Например, давайте создадим квар названием &amp;lt;tt&amp;gt;myplugin_ratio&amp;lt;/tt&amp;gt;, который не может быть выше 1,0 и ниже 0,1.&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hEnabled&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hEnabled = CreateConVar(&amp;quot;myplugin_ratio&amp;quot;,&lt;br /&gt;
			&amp;quot;0.6&amp;quot;,&lt;br /&gt;
			&amp;quot;Sets a vote ratio&amp;quot;,&lt;br /&gt;
			_,	/* Флаги (будут обсуждаться позже) */&lt;br /&gt;
			true,	/* Включить минимальное значение */&lt;br /&gt;
			0.1,&lt;br /&gt;
			true,	/* Включить максимальное значение */&lt;br /&gt;
			1.0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значение по умолчанию может иметь любой тип данных, и оно не ограничивает будущие типы данных, которые можно использовать. Тем не менее, минимальные и максимальные ограничения всегда должны быть числом с плавающей точкой (float).&lt;br /&gt;
&lt;br /&gt;
Если вы создаете квар, который уже существует, вы получите Handle на этот квар. Кроме того, сами Handle будут идентичны, поскольку плагин будет владеть Handle. Описание, значение по умолчанию, или ограничения не будут изменены.&lt;br /&gt;
&lt;br /&gt;
=Использование/Изменение значений=&lt;br /&gt;
Использовать квары очень просто. Например, мы хотим изменить &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt;, но сохранить старое значение и восстановить его позже. Повторно используем наш код &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; от раздела &amp;lt;tt&amp;gt;Получение кваров&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_oldmoney&lt;br /&gt;
&lt;br /&gt;
SetStartMoney(newmoney)&lt;br /&gt;
{&lt;br /&gt;
	g_oldmoney = GetConVarInt(g_hStartMoney)&lt;br /&gt;
	SetConVarInt(g_hStartMoney, newmoney)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RestoreStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	SetConVarInt(g_hStartMoney, g_oldmoney)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хотя существуют различные функции для типов значений (с плавающей точкой, строки, и так далее), внутренние данные всегда сохраняются так же. Например, этот код будет работать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public GetStartMoney()&lt;br /&gt;
{&lt;br /&gt;
	decl String:buffer[128]&lt;br /&gt;
&lt;br /&gt;
	GetConVarString(g_hStartMoney, buffer, sizeof(buffer))&lt;br /&gt;
&lt;br /&gt;
	return StringToInt(buffer)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что &amp;lt;tt&amp;gt;mp_startmoney&amp;lt;/tt&amp;gt; целое число, он может использоваться как строка.&lt;br /&gt;
&lt;br /&gt;
=Флаги=&lt;br /&gt;
Квары могут иметь ряд флагов, в зависимости от которых могут менять свое поведение. Основные флаги:&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_PROTECTED&amp;lt;/tt&amp;gt; - Секретная информация (не должны подвергаться воздействию клиентов или логов).&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_NOTIFY&amp;lt;/tt&amp;gt; - Уведомление клиентов об изменении.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_CHEAT&amp;lt;/tt&amp;gt; - Могут использоваться только в случае если &amp;lt;tt&amp;gt;sv_cheats&amp;lt;/tt&amp;gt; равно 1.&lt;br /&gt;
*&amp;lt;tt&amp;gt;FCVAR_REPLICATED&amp;lt;/tt&amp;gt; - Принудительная установка значения квара на клиенте.&lt;br /&gt;
&lt;br /&gt;
Например,  мы хотим изменить значение квара с флагом FCVAR_CHEAT.  The following two functions could be used:&lt;br /&gt;
&amp;lt;pawn&amp;gt;UnsetCheatVar(Handle:hndl)&lt;br /&gt;
{&lt;br /&gt;
	new flags = GetConVarFlags(hndl)&lt;br /&gt;
	flags &amp;amp;= ~FCVAR_CHEAT&lt;br /&gt;
	SetConVarFlags(hndl, flags)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SetCheatVar(Handle:hndl)&lt;br /&gt;
{&lt;br /&gt;
	new flags = GetConVarFlags(hndl)&lt;br /&gt;
	flags |= FCVAR_CHEAT&lt;br /&gt;
	SetConVarFlags(hndl, flags)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Change Callbacks=&lt;br /&gt;
As of Half-Life 2, it is possible to know when ConVars change.  While this is a very powerful feature, you must be careful not to set a ConVar inside a ConVar change hook such that it re-invokes he same callback.  This results in ''infinite recursion''.&lt;br /&gt;
&lt;br /&gt;
For example, let's say you want to detect when &amp;lt;tt&amp;gt;bot_quota&amp;lt;/tt&amp;gt; changes and to prevent it from going below 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new Handle:g_hBotQuota&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart()&lt;br /&gt;
{&lt;br /&gt;
	g_hBotQuota = FindConVar(&amp;quot;bot_quota&amp;quot;)&lt;br /&gt;
	if (g_hBotQuota != INVALID_HANDLE)&lt;br /&gt;
	{&lt;br /&gt;
		HookConVarChange(g_hBotQuota, OnBotQuotaChange)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public OnBotQuotaChange(Handle:cvar, const String:oldVal[], const String:newVal[])&lt;br /&gt;
{&lt;br /&gt;
	if (StringToInt(newVal) &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		SetConVarInt(cvar, 2)&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note 1:''' You do not need to explicitly unhook ConVarChange functions on shutdown.  These hooks are removed when your plugin unloads.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You cannot prevent cvar changes from happening; you can only change the value again.  If the engine or game mod already have a change function installed for a ConVar, that function will always be called first.&lt;br /&gt;
&lt;br /&gt;
[[Category:Ru:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:ConVars_(SourceMod_Scripting)&amp;diff=9829</id>
		<title>Ru:ConVars (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:ConVars_(SourceMod_Scripting)&amp;diff=9829"/>
		<updated>2015-03-08T15:42:35Z</updated>

		<summary type="html">&lt;p&gt;Kailo: Kailo moved page Ru:ConVars (SourceMod Scripting) to ConVars (SourceMod Scripting)/ru: Wrong non-english page name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ConVars (SourceMod Scripting)/ru]]&lt;/div&gt;</summary>
		<author><name>Kailo</name></author>
		
	</entry>
</feed>