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.
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>
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.
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.
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);
});
});
}
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.
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.
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?
Barlap para la comunidad.