Как добавить файл конфигурации в плагин CounterStrikeSharp
Значения, прописанные в коде, годятся для теста, но настоящему плагину нужны настройки: сообщения, лимиты, данные для подключения к базе. CounterStrikeSharp умеет сам создавать и читать JSON-конфигурацию по обычному классу C#.
Зачем нужна конфигурация
С конфигурацией владелец сервера правит текстовый файл и перезагружает плагин, а не ждёт, пока вы измените код и пришлёте новую версию. Кроме того, секреты вроде паролей остаются вне исходного кода.
Опишите настройки в классе
Создайте класс, наследующий BasePluginConfig. Каждое свойство — это настройка, а присвоенное значение — значение по умолчанию. JsonPropertyName задаёт имя, которое будет в файле.
using System.Text.Json.Serialization;
using CounterStrikeSharp.API.Core;
public class MyConfig : BasePluginConfig
{
[JsonPropertyName("WelcomeMessage")]
public string WelcomeMessage { get; set; } = "Welcome to the server!";
[JsonPropertyName("MaxWarnings")]
public int MaxWarnings { get; set; } = 3;
}
Свяжите его с плагином
Пусть плагин реализует IPluginConfig с вашим классом конфигурации. Тогда CounterStrikeSharp прочитает файл и вызовет OnConfigParsed до Load, передав вам загруженные значения.
public class MyPlugin : BasePlugin, IPluginConfig<MyConfig>{
public override string ModuleName => "Config Example";
public override string ModuleVersion => "1.0.0";
public MyConfig Config { get; set; } = new();
public void OnConfigParsed(MyConfig config) { Config = config; }}
Где создаётся файл
При первой загрузке плагина фреймворк записывает файл с вашими значениями по умолчанию в configs/plugins, в папку с именем плагина. Владельцы серверов редактируют именно этот файл.
Как выглядит файл
Получается простой JSON-файл с одной записью на каждое свойство. Владелец может изменить значения и оставить остальное как есть.
{
"WelcomeMessage": "Welcome to the server!",
"MaxWarnings": 3
}
Используйте значения
Читайте настройки из свойства Config в любом месте плагина после разбора конфигурации, например в Load или в обработчике события.
Logger.LogInformation("Warnings allowed: {Max}", Config.MaxWarnings);
Что стоит помнить
Изменения в файле применяются при следующей загрузке плагина, а не мгновенно. Если в новой версии вы переименуете или удалите свойство, предупредите пользователей: в их старом файле остались прежние имена. А поскольку конфигурация — читаемый текст, не кладите в неё ничего, что не должен видеть админ.
Было ли это руководство полезным?
Barlap для сообщества.