MySQL: Online
Load: Low
Sandbox: Running

Пакеты NuGet и база данных в плагине CounterStrikeSharp

Многие полезные плагины хранят данные: баны, статистику, ранги. Для этого в проект добавляют пакет NuGet, а самое важное правило — не блокировать игру, пока вы ждёте базу данных. В руководстве разобрано и то и другое на примере Dapper и MySqlConnector.

1

Добавьте пакеты

Пакеты NuGet перечисляются в файле проекта. Dapper делает запросы короче, а MySqlConnector общается с MariaDB и MySQL. Наш компилятор сам скачивает их при сборке.

<ItemGroup>
  <PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
  <PackageReference Include="Dapper" Version="2.*" />
  <PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
2

Что происходит при сборке

Сборка создаёт DLL плагина и рядом — DLL пакетов, которые ему нужны. Файлы, которые уже есть в CounterStrikeSharp, выносятся в отдельную папку, чтобы вы не копировали их дважды.

3

Что копировать на сервер

Скопируйте папку плагина вместе с DLL пакетов внутри неё в папку plugins вашего сервера. Папку dependencies не копируйте: эти файлы на сервере уже есть, а вторая копия может вызвать конфликты.

YourPlugin-Release.zip
YourPlugin
YourPlugin.dll
Dapper.dll
MySqlConnector.dll
dependencies
Files already provided by CounterStrikeSharp
4

Выполняйте запрос, не подвешивая игру

Игра работает в одном главном потоке. Если ждать базу данных в нём, лагать начнёт весь сервер. Выполняйте запрос в 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);
        });
    });
}
5

Храните строку подключения в конфигурации

Не пишите адрес, пользователя и пароль в коде. Положите строку подключения в конфигурацию плагина, как в нашем руководстве по конфигурации, чтобы каждый владелец сервера использовал свою базу.

6

Пакеты, которым не место в плагине

Некоторые пакеты слишком велики или не рассчитаны на работу внутри игрового сервера, например веб-фреймворки вроде ASP.NET. Предпочитайте небольшие библиотеки, а если пакет не загружается, проверьте, не нужны ли ему отсутствующие нативные файлы.

Не используйте учётную запись базы данных с большими правами, чем нужно плагину. Создайте пользователя, который может работать только со своими таблицами.
7

Проверяйте перед запуском в работу

Сначала испытайте плагин на тестовом сервере с тестовой базой. Убедитесь, что таблицы создаются, что неудачное подключение не роняет плагин и что при недоступной базе в логе появляется понятное сообщение.

Было ли это руководство полезным?

Страница сформирована за 0.014 секунд
CounterStrikeSharp Web Compiler V1.0 - Сделано с от RomaniaBarlap для сообщества.