MySQL: Online
Load: Medium
Sandbox: Ready

Paquetes NuGet y base de datos en un plugin de CounterStrikeSharp

Muchos plugins útiles guardan datos: baneos, estadísticas, rangos. Para eso añades un paquete NuGet al proyecto, y la regla más importante es no bloquear el juego mientras esperas a la base de datos. Esta guía cubre ambas cosas, con Dapper y MySqlConnector como ejemplo.

1

Añade los paquetes

Los paquetes NuGet se listan en el archivo de proyecto. Dapper acorta las consultas y MySqlConnector habla con MariaDB y MySQL. Nuestro compilador los descarga por ti al compilar.

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

Qué pasa al compilar

La compilación produce la DLL de tu plugin y, a su lado, las DLL de los paquetes que necesita. Los archivos que CounterStrikeSharp ya incluye se separan en otra carpeta, para que no los copies dos veces.

3

Qué copiar al servidor

Copia la carpeta del plugin, con las DLL de los paquetes dentro, a la carpeta plugins de tu servidor. No copies la carpeta dependencies, porque el servidor ya tiene esos archivos y una segunda copia puede causar conflictos.

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

Ejecuta una consulta sin congelar el juego

El juego corre en un único hilo principal. Si esperas ahí a una base de datos, todo el servidor da tirones. Ejecuta la consulta en Task.Run y, cuando necesites tocar el juego de nuevo, vuelve al hilo principal con 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

Guarda la cadena de conexión en la configuración

No escribas la dirección, el usuario y la contraseña en el código. Pon la cadena de conexión en la configuración del plugin, como en nuestra guía de configuración, para que cada dueño de servidor use su propia base de datos.

6

Paquetes que no pintan nada en un plugin

Algunos paquetes son demasiado grandes o no están hechos para vivir dentro de un servidor de juego, como los frameworks web tipo ASP.NET. Prefiere bibliotecas pequeñas y, si un paquete no carga, comprueba si necesita archivos nativos que faltan.

No uses una cuenta de base de datos con más permisos de los que necesita el plugin. Crea un usuario que solo pueda tocar sus propias tablas.
7

Prueba antes de salir en producción

Prueba primero el plugin en un servidor de pruebas con una base de datos de pruebas. Comprueba que las tablas se crean, que una conexión fallida no rompe el plugin y que el registro da un mensaje claro cuando la base de datos está caída.

¿Te ha resultado útil este tutorial?

Página generada en 0.011 segundos
CounterStrikeSharp Web Compiler V1.0 - Hecho con por RomaniaBarlap para la comunidad.