Пакеты NuGet и база данных в плагине CounterStrikeSharp
Многие полезные плагины хранят данные: баны, статистику, ранги. Для этого в проект добавляют пакет NuGet, а самое важное правило — не блокировать игру, пока вы ждёте базу данных. В руководстве разобрано и то и другое на примере Dapper и MySqlConnector.
Добавьте пакеты
Пакеты NuGet перечисляются в файле проекта. Dapper делает запросы короче, а MySqlConnector общается с MariaDB и MySQL. Наш компилятор сам скачивает их при сборке.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
Что происходит при сборке
Сборка создаёт DLL плагина и рядом — DLL пакетов, которые ему нужны. Файлы, которые уже есть в CounterStrikeSharp, выносятся в отдельную папку, чтобы вы не копировали их дважды.
Что копировать на сервер
Скопируйте папку плагина вместе с DLL пакетов внутри неё в папку plugins вашего сервера. Папку dependencies не копируйте: эти файлы на сервере уже есть, а вторая копия может вызвать конфликты.
Выполняйте запрос, не подвешивая игру
Игра работает в одном главном потоке. Если ждать базу данных в нём, лагать начнёт весь сервер. Выполняйте запрос в Task.Run, а когда понадобится снова обратиться к игре, возвращайтесь в главный поток через Server.NextFrame.
using CounterStrikeSharp.API;
using Dapper;
using Microsoft.Extensions.Logging;
using MySqlConnector;
public void CountPlayers()
{
Task.Run(async () =>
{
await using var connection = new MySqlConnection(Config.ConnectionString); var count = await connection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM players");
Server.NextFrame(() => {
Logger.LogInformation("Players in the database: {Count}", count);
});
});
}
Храните строку подключения в конфигурации
Не пишите адрес, пользователя и пароль в коде. Положите строку подключения в конфигурацию плагина, как в нашем руководстве по конфигурации, чтобы каждый владелец сервера использовал свою базу.
Пакеты, которым не место в плагине
Некоторые пакеты слишком велики или не рассчитаны на работу внутри игрового сервера, например веб-фреймворки вроде ASP.NET. Предпочитайте небольшие библиотеки, а если пакет не загружается, проверьте, не нужны ли ему отсутствующие нативные файлы.
Проверяйте перед запуском в работу
Сначала испытайте плагин на тестовом сервере с тестовой базой. Убедитесь, что таблицы создаются, что неудачное подключение не роняет плагин и что при недоступной базе в логе появляется понятное сообщение.
Было ли это руководство полезным?
Barlap для сообщества.