<?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=R1KO</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=R1KO"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/R1KO"/>
	<updated>2026-05-08T01:52:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Vectors_Explained_(Scripting)&amp;diff=10482</id>
		<title>Ru:Vectors Explained (Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Vectors_Explained_(Scripting)&amp;diff=10482"/>
		<updated>2017-11-13T16:17:32Z</updated>

		<summary type="html">&lt;p&gt;R1KO: Created page with &amp;quot;=Введение= Есть три разных типа векторов:  - '''Позиционные векторы'''  - '''Угловые векторы'''  - '''Вект...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
В большинстве случаев вы, вероятно, будете использовать только один из них за раз, но вам не мешает узнать, для чего нужны другие два типа. Вот пример стандартной функции «TeleportEntity», чтобы показать вам, как она выглядит:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
native int TeleportEntity(int entity, const float origin[3], const float angles[3], const float velocity[3]);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Вектор положения''': Первый вектор в этом нативе, объявленном как origin[3], является вектором положения. Это просто говорит нам абсолютные позиции сущностей в мире. Вектор положения мог бы выглядеть примерно так {15.0, 30.0, 15.0}, и это означало бы, что объект имеет 15 единиц вдоль оси X, 30 единиц вдоль оси Y и 15 единиц вдоль оси Z.&lt;br /&gt;
&lt;br /&gt;
'''Угловой вектор''': Второй вектор в этой нативной, объявленной как angles[3], является угловым вектором. Это указывает на вращение объекта. Этот вектор будет соответствовать формату {pitch, yaw, roll}, который изменяет углы указанного объекта.&lt;br /&gt;
«Pitch» - это углы вращения вверх и вниз, «Yaw» - влево и вправо, а «Roll» - это вращение вдоль вектора вверх / вниз / влево / вправо.&lt;br /&gt;
&lt;br /&gt;
'''Вектор скорости''': Последний вектор в нативе представляет собой вектор скорости, объявленный как velocity[3] в примере. Этот вектор сообщает игре, где объект будет находиться в следующем кадре (фрейме). Таким образом, в следующем игровом кадре вектор положения этого объекта будет представлять собой сумму вектора положения и вектора скорости из нашего текущего кадра.&lt;br /&gt;
&lt;br /&gt;
==Векторы скорости==&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
float vecOrigin[3], vecVelocity[3], vecResult[3];&lt;br /&gt;
&lt;br /&gt;
AddVectors(vecOrigin, vecVelocity, vecResult);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;/div&gt;</summary>
		<author><name>R1KO</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:AutoConfigs_(SourceMod_Scripting)&amp;diff=9937</id>
		<title>Ru:AutoConfigs (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:AutoConfigs_(SourceMod_Scripting)&amp;diff=9937"/>
		<updated>2015-07-07T15:47:09Z</updated>

		<summary type="html">&lt;p&gt;R1KO: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
SourceMod обеспечивает простую систему для плагинов, которая автоматически генерирует конфигурационные файлы, которые загружаются при загрузке. Это обеспечивается с помощью &amp;lt;tt&amp;gt;AutoExecConfig&amp;lt;/tt&amp;gt; размещенной в &amp;lt;tt&amp;gt;scripting/include/sourcemod.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После того как все конфиг файлы исполнены, будет вызвано событие &amp;lt;tt&amp;gt;OnConfigsExecuted&amp;lt;/tt&amp;gt;. Оно будет вызыватся всегда, даже если у вашего плагина не было конфигов или они были загружены позже. &lt;br /&gt;
&lt;br /&gt;
=Использование=&lt;br /&gt;
Есть три параметра для вызова:&lt;br /&gt;
*''autoCreate'' - Если true, SourceMod запишет все ConVars созданные плагином в конфиг если он отсутствует.&lt;br /&gt;
*''name'' - Имя конфиг файла (включая .cfg расширение).  Если пусто имя плагина, то будет использоваться с &amp;lt;tt&amp;gt;plugin.&amp;lt;/tt&amp;gt; пометкой. Пример: для плагина &amp;lt;tt&amp;gt;hat.smx&amp;lt;/tt&amp;gt; будет создан &amp;lt;tt&amp;gt;plugin.hat.cfg&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*''folder'' - При желание можно сменить папку в главной &amp;lt;tt&amp;gt;cfg&amp;lt;/tt&amp;gt; папки. По умолчанию это &amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt;, и конфиги будут в &amp;lt;tt&amp;gt;cfg/sourcemod/&amp;lt;/tt&amp;gt;.  Если пусто, конфиг будет расположен в &amp;lt;tt&amp;gt;cfg/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Примичание'': Возможно создать вложенные папки; SourceMod будет пытаться создать каждую из них.&lt;br /&gt;
&lt;br /&gt;
''Примичание'': Если у вас несколько &amp;lt;tt&amp;gt;AutoExecConfig&amp;lt;/tt&amp;gt; вызовов помеченных '''autoCreate''' то будет создан только первый, а все следующие будут проигнорированы. Таким образом, нет возможности автоматически разделить cvars между несколькими файлами.&lt;br /&gt;
&lt;br /&gt;
=Пример Dump=&lt;br /&gt;
autoCreate функция создает конфиг файл, который выглядит так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// This file was auto-generated by SourceMod (v1.0.0.986)&lt;br /&gt;
// ConVars for plugin &amp;quot;hat.smx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// MySQL database&lt;br /&gt;
// -&lt;br /&gt;
// Default: &amp;quot;&amp;quot;&lt;br /&gt;
mysqlk_database &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// MySQL host, use this to configure various&lt;br /&gt;
// things for your server.&lt;br /&gt;
// -&lt;br /&gt;
// Default: &amp;quot;localhost&amp;quot;&lt;br /&gt;
mysqlk_host &amp;quot;localhost&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Ru:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>R1KO</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:AutoConfigs_(SourceMod_Scripting)&amp;diff=9936</id>
		<title>Ru:AutoConfigs (SourceMod Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:AutoConfigs_(SourceMod_Scripting)&amp;diff=9936"/>
		<updated>2015-07-07T15:43:27Z</updated>

		<summary type="html">&lt;p&gt;R1KO: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
SourceMod обеспечивает простую систему для плагинов, которая автоматически генерирует конфиг файлы, которые загружаются при загрузке.  Это обеспечивается с помощью &amp;lt;tt&amp;gt;AutoExecConfig&amp;lt;/tt&amp;gt; размещенной в &amp;lt;tt&amp;gt;scripting/include/sourcemod.inc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После того как все конфиг файлы исполнены, &amp;lt;tt&amp;gt;OnConfigsExecuted&amp;lt;/tt&amp;gt; должно вызываться.  This forward will always be called, even if your plugin had no configs or if it was loaded late. &lt;br /&gt;
&lt;br /&gt;
=Использование=&lt;br /&gt;
Эти три параметра для вызова:&lt;br /&gt;
*''autoCreate'' - Если true, SourceMod will dump all ConVars created by the plugin into a config file if the specified config file does not exist.&lt;br /&gt;
*''name'' - Имя конфиг файла (включая .cfg расширение).  Если пусто имя плагина, то будет использоваться с &amp;lt;tt&amp;gt;plugin.&amp;lt;/tt&amp;gt; пометкой. Пример: для плагина &amp;lt;tt&amp;gt;hat.smx&amp;lt;/tt&amp;gt; будет создан &amp;lt;tt&amp;gt;plugin.hat.cfg&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*''folder'' - При желание можно сменить папку в главной &amp;lt;tt&amp;gt;cfg&amp;lt;/tt&amp;gt; папки. По умолчанию это &amp;lt;tt&amp;gt;sourcemod&amp;lt;/tt&amp;gt;, и конфиги будут в &amp;lt;tt&amp;gt;cfg/sourcemod/&amp;lt;/tt&amp;gt;.  Если пусто, конфиг будет расположен в &amp;lt;tt&amp;gt;cfg/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Примичание'': Возможно создать вложенные папки; SourceMod будет пытаться создать каждую из них.&lt;br /&gt;
&lt;br /&gt;
''Примичание'': Если у вас несколько &amp;lt;tt&amp;gt;AutoExecConfig&amp;lt;/tt&amp;gt; вызовов помеченных '''autoCreate''' то будет создан только первый, а все следующие будут проигнорированы. Таким образом, нет возможности автоматически разделить cvars между несколькими файлами.&lt;br /&gt;
&lt;br /&gt;
=Пример Dump=&lt;br /&gt;
autoCreate функция создает конфиг файл, который выглядит так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// This file was auto-generated by SourceMod (v1.0.0.986)&lt;br /&gt;
// ConVars for plugin &amp;quot;hat.smx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// MySQL database&lt;br /&gt;
// -&lt;br /&gt;
// Default: &amp;quot;&amp;quot;&lt;br /&gt;
mysqlk_database &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// MySQL host, use this to configure various&lt;br /&gt;
// things for your server.&lt;br /&gt;
// -&lt;br /&gt;
// Default: &amp;quot;localhost&amp;quot;&lt;br /&gt;
mysqlk_host &amp;quot;localhost&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Ru:SourceMod Scripting]]&lt;/div&gt;</summary>
		<author><name>R1KO</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=9465</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=9465"/>
		<updated>2014-01-06T20:50:54Z</updated>

		<summary type="html">&lt;p&gt;R1KO: &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>R1KO</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=9464</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=9464"/>
		<updated>2014-01-06T20:44:03Z</updated>

		<summary type="html">&lt;p&gt;R1KO: &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;
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;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>R1KO</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=ConVars_(SourceMod_Scripting)/ru&amp;diff=9463</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=9463"/>
		<updated>2014-01-06T20:38:23Z</updated>

		<summary type="html">&lt;p&gt;R1KO: &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;
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 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;
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;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>R1KO</name></author>
		
	</entry>
</feed>