Консольные переменные

Как читать и записывать консольные переменные (ConVars).

Обзор

Консольные переменные (ConVars) являются основным способом настройки параметров игры и поведения плагинов. С новой поддержкой классов вы можете работать с ConVars двумя способами:

  • Подход на основе классов - Использование класса-обёртки ConVar для более чистого объектно-ориентированного кода
  • Подход на основе функций - Традиционные функции в стиле C с явными дескрипторами

Поиск ConVar

Используйте статический метод ConVar.Find для получения экземпляра ConVar:

var cheatsCvar = ConVar.Find("sv_cheats");
if (cheatsCvar != null && cheatsCvar.Valid()) {
    // Используйте экземпляр ConVar
}

Манипулирование примитивными значениями

Чтение и установка значений более интуитивны с методами:

var cheatsCvar = ConVar.Find("sv_cheats");

// Чтение значения с использованием типизированных методов
bool value = cheatsCvar.GetBool();

// Установка значения с использованием типизированных методов
cheatsCvar.SetBool(true);

// Вы также можете использовать универсальный метод Set
cheatsCvar.Set(true);

Манипулирование объектами

Строковые значения обрабатываются через типизированные методы:

var stringCvar = ConVar.Find("sv_skyname");

// Получение строкового значения
string skyName = stringCvar.GetString();
PrintToServer($"sv_skyname = {skyName}");

// Установка строкового значения
stringCvar.SetString("foobar");

Создание ConVars

Создавайте ConVars используя конструктор класса с автоматическим определением типа:

// Создание различных типов ConVars
var stringCvar = new ConVar("my_plugin_name", "DefaultName", "Player name", ConVarFlags.None);
var intCvar = new ConVar("my_plugin_maxplayers", 32, "Max players", ConVarFlags.None);
var floatCvar = new ConVar("my_plugin_speed", 1.5f, "Speed multiplier", ConVarFlags.None);
var boolCvar = new ConVar("my_plugin_enabled", true, "Enable plugin", ConVarFlags.None);

// Использование созданных ConVars
if (boolCvar.GetBool()) {
    int maxPlayers = intCvar.GetInt32();
    PrintToServer($"Plugin enabled with {maxPlayers} max players\n");
}

Полный пример

using Plugify;
using static s2sdk.s2sdk;

public unsafe class ConVarDemo : Plugin
{
    private ConVar speedCvar;
    private ConVar gravityCvar;

    public void OnPluginStart()
    {
        // Создание пользовательских ConVars
        speedCvar = new ConVar("demo_speed", 1.0f, "Player speed multiplier", ConVarFlags.None);
        gravityCvar = new ConVar("demo_gravity", 1.0f, "Gravity multiplier", ConVarFlags.None);

        // Подключение к изменениям ConVar
        speedCvar.HookChange(OnSpeedChanged);

        // Поиск существующих игровых ConVars
        var cheatsCvar = ConVar.Find("sv_cheats");
        if (cheatsCvar != null && cheatsCvar.Valid())
        {
            bool cheatsEnabled = cheatsCvar.GetBool();
            PrintToServer($"Cheats enabled: {cheatsEnabled}\n");
        }
    }

    public void OnPluginEnd()
    {
        // Отключение от изменений
        if (speedCvar != null && speedCvar.Valid())
        {
            speedCvar.UnhookChange(OnSpeedChanged);
        }
    }

    private static void OnSpeedChanged(ulong handle, string oldValue, double newValue)
    {
        PrintToServer($"Speed changed from {oldValue} to {newValue}\n");
    }
}