Difference between revisions of "ConVars (SourceMod Scripting)/ru"
(New page: ConVars are ''con''sole ''var''iables. They store string, float, or numerical values. These values can be changed via the console or .cfg files, and sometimes even persist across server ...) |
m |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{Languages|ConVars_(SourceMod_Scripting)}} | |
+ | Квары - ''это консольные переменные.'' Они могут иметь числовое или строчное значение. Их значения могут быть изменены через консоль или с помощью .cfg файлов, а иногда сохраняются для всех сеансов сервера. | ||
− | = | + | =Введение= |
− | + | Квары доступны через Handle`s. Есть 2 способа получить Handle квара. Создать новый квар или найти существующий. Если вы создадите уже существующий квар, автоматически будет использоваться старый. | |
− | '' | + | ''Примечание: Handle`s для кваров являются уникальными, их не нужно закрывать или присваивать INVALID_HANDLE. Они должны существовать пока SourceMod запущен.'' |
− | == | + | ==Поиск кваров== |
− | + | Искать квары очень просто. Например, вы хотите найти <tt>mp_startmoney</tt> из Counter-Strike:Source: | |
<pawn>new g_hStartMoney | <pawn>new g_hStartMoney | ||
Line 16: | Line 17: | ||
}</pawn> | }</pawn> | ||
− | '' | + | ''Примечание: FindConVar() вернет ''<tt>INVALID_HANDLE</tt>'' если квар не найден. Keep this in mind if you are trying to read ConVars from other plugins.'' |
− | == | + | ==Создание кваров== |
− | + | Простейший квар требует всего 2 значения: имя и значение по умолчанию. Тем не менее, он может содержать описание: | |
<pawn>new Handle:g_hEnabled | <pawn>new Handle:g_hEnabled | ||
Line 25: | Line 26: | ||
public OnPluginStart() | public OnPluginStart() | ||
{ | { | ||
− | g_hEnabled = CreateConVar("myplugin_enabled", "1", " | + | g_hEnabled = CreateConVar("myplugin_enabled", "1", "Включение/Выключение плагина.") |
}</pawn> | }</pawn> | ||
− | + | Вы так же имеете возможностю ограничить значение. Например, давайте создадим квар названием <tt>myplugin_ratio</tt>, который не может быть выше 1,0 и ниже 0,1. | |
<pawn>new Handle:g_hEnabled | <pawn>new Handle:g_hEnabled | ||
Line 36: | Line 37: | ||
"0.6", | "0.6", | ||
"Sets a vote ratio", | "Sets a vote ratio", | ||
− | _, /* | + | _, /* Флаги (будут обсуждаться позже) */ |
− | true, /* | + | true, /* Включить минимальное значение */ |
0.1, | 0.1, | ||
− | true, /* | + | true, /* Включить максимальное значение */ |
1.0) | 1.0) | ||
}</pawn> | }</pawn> | ||
− | + | Значение по умолчанию может иметь любой тип данных, и оно не ограничивает будущие типы данных, которые можно использовать. Тем не менее, минимальные и максимальные ограничения всегда должны быть числом с плавающей точкой (float). | |
− | + | Если вы создаете квар, который уже существует, вы получите Handle на этот квар. Кроме того, сами Handle будут идентичны, поскольку плагин будет владеть Handle. Описание, значение по умолчанию, или ограничения не будут изменены. | |
− | = | + | =Использование/Изменение значений= |
− | + | Использовать квары очень просто. Например, мы хотим изменить <tt>mp_startmoney</tt>, но сохранить старое значение и восстановить его позже. Повторно используем наш код <tt>mp_startmoney</tt> от раздела <tt>Получение кваров</tt>: | |
<pawn>new g_oldmoney | <pawn>new g_oldmoney | ||
Line 63: | Line 64: | ||
}</pawn> | }</pawn> | ||
− | + | Хотя существуют различные функции для типов значений (с плавающей точкой, строки, и так далее), внутренние данные всегда сохраняются так же. Например, этот код будет работать: | |
<pawn>public GetStartMoney() | <pawn>public GetStartMoney() | ||
Line 74: | Line 75: | ||
}</pawn> | }</pawn> | ||
− | + | Несмотря на то, что <tt>mp_startmoney</tt> целое число, он может использоваться как строка. | |
− | = | + | =Флаги= |
− | + | Квары могут иметь ряд флагов, в зависимости от которых могут менять свое поведение. Основные флаги: | |
− | *<tt>FCVAR_PROTECTED</tt> - | + | *<tt>FCVAR_PROTECTED</tt> - Секретная информация (не должны подвергаться воздействию клиентов или логов). |
− | *<tt>FCVAR_NOTIFY</tt> - | + | *<tt>FCVAR_NOTIFY</tt> - Уведомление клиентов об изменении. |
− | *<tt>FCVAR_CHEAT</tt> - | + | *<tt>FCVAR_CHEAT</tt> - Могут использоваться только в случае если <tt>sv_cheats</tt> равно 1. |
− | *<tt>FCVAR_REPLICATED</tt> - | + | *<tt>FCVAR_REPLICATED</tt> - Принудительная установка значения квара на клиенте. |
− | + | Например, мы хотим изменить значение квара с флагом FCVAR_CHEAT. The following two functions could be used: | |
<pawn>UnsetCheatVar(Handle:hndl) | <pawn>UnsetCheatVar(Handle:hndl) | ||
{ | { | ||
Line 126: | Line 127: | ||
'''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. | '''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. | ||
− | [[Category:SourceMod Scripting | + | [[Category:Ru:SourceMod Scripting]] |
− |
Latest revision as of 10:06, 22 June 2019
Language: | English • русский |
---|
Квары - это консольные переменные. Они могут иметь числовое или строчное значение. Их значения могут быть изменены через консоль или с помощью .cfg файлов, а иногда сохраняются для всех сеансов сервера.
Contents
Введение
Квары доступны через Handle`s. Есть 2 способа получить Handle квара. Создать новый квар или найти существующий. Если вы создадите уже существующий квар, автоматически будет использоваться старый.
Примечание: Handle`s для кваров являются уникальными, их не нужно закрывать или присваивать INVALID_HANDLE. Они должны существовать пока SourceMod запущен.
Поиск кваров
Искать квары очень просто. Например, вы хотите найти mp_startmoney из Counter-Strike:Source:
new g_hStartMoney public OnPluginStart() { g_hStartMoney = FindConVar("mp_startmoney") }
Примечание: FindConVar() вернет INVALID_HANDLE если квар не найден. Keep this in mind if you are trying to read ConVars from other plugins.
Создание кваров
Простейший квар требует всего 2 значения: имя и значение по умолчанию. Тем не менее, он может содержать описание:
new Handle:g_hEnabled public OnPluginStart() { g_hEnabled = CreateConVar("myplugin_enabled", "1", "Включение/Выключение плагина.") }
Вы так же имеете возможностю ограничить значение. Например, давайте создадим квар названием myplugin_ratio, который не может быть выше 1,0 и ниже 0,1.
new Handle:g_hEnabled public OnPluginStart() { g_hEnabled = CreateConVar("myplugin_ratio", "0.6", "Sets a vote ratio", _, /* Флаги (будут обсуждаться позже) */ true, /* Включить минимальное значение */ 0.1, true, /* Включить максимальное значение */ 1.0) }
Значение по умолчанию может иметь любой тип данных, и оно не ограничивает будущие типы данных, которые можно использовать. Тем не менее, минимальные и максимальные ограничения всегда должны быть числом с плавающей точкой (float).
Если вы создаете квар, который уже существует, вы получите Handle на этот квар. Кроме того, сами Handle будут идентичны, поскольку плагин будет владеть Handle. Описание, значение по умолчанию, или ограничения не будут изменены.
Использование/Изменение значений
Использовать квары очень просто. Например, мы хотим изменить mp_startmoney, но сохранить старое значение и восстановить его позже. Повторно используем наш код mp_startmoney от раздела Получение кваров:
new g_oldmoney SetStartMoney(newmoney) { g_oldmoney = GetConVarInt(g_hStartMoney) SetConVarInt(g_hStartMoney, newmoney) } RestoreStartMoney() { SetConVarInt(g_hStartMoney, g_oldmoney) }
Хотя существуют различные функции для типов значений (с плавающей точкой, строки, и так далее), внутренние данные всегда сохраняются так же. Например, этот код будет работать:
public GetStartMoney() { decl String:buffer[128] GetConVarString(g_hStartMoney, buffer, sizeof(buffer)) return StringToInt(buffer) }
Несмотря на то, что mp_startmoney целое число, он может использоваться как строка.
Флаги
Квары могут иметь ряд флагов, в зависимости от которых могут менять свое поведение. Основные флаги:
- FCVAR_PROTECTED - Секретная информация (не должны подвергаться воздействию клиентов или логов).
- FCVAR_NOTIFY - Уведомление клиентов об изменении.
- FCVAR_CHEAT - Могут использоваться только в случае если sv_cheats равно 1.
- FCVAR_REPLICATED - Принудительная установка значения квара на клиенте.
Например, мы хотим изменить значение квара с флагом FCVAR_CHEAT. The following two functions could be used:
UnsetCheatVar(Handle:hndl) { new flags = GetConVarFlags(hndl) flags &= ~FCVAR_CHEAT SetConVarFlags(hndl, flags) } SetCheatVar(Handle:hndl) { new flags = GetConVarFlags(hndl) flags |= FCVAR_CHEAT SetConVarFlags(hndl, flags) }
Change Callbacks
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.
For example, let's say you want to detect when bot_quota changes and to prevent it from going below 2:
new Handle:g_hBotQuota public OnPluginStart() { g_hBotQuota = FindConVar("bot_quota") if (g_hBotQuota != INVALID_HANDLE) { HookConVarChange(g_hBotQuota, OnBotQuotaChange) } } public OnBotQuotaChange(Handle:cvar, const String:oldVal[], const String:newVal[]) { if (StringToInt(newVal) < 2) { SetConVarInt(cvar, 2) } }
Note 1: You do not need to explicitly unhook ConVarChange functions on shutdown. These hooks are removed when your plugin unloads.
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.