Pacchetti NuGet e database in un plugin CounterStrikeSharp
Molti plugin utili salvano dati: ban, statistiche, ranghi. Per farlo aggiungi un pacchetto NuGet al progetto, e la regola più importante è non bloccare il gioco mentre aspetti il database. Questa guida tratta entrambe le cose, con Dapper e MySqlConnector come esempio.
Aggiungi i pacchetti
I pacchetti NuGet si elencano nel file di progetto. Dapper rende le query più brevi e MySqlConnector dialoga con MariaDB e MySQL. Il nostro compilatore li scarica per te durante la compilazione.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
Cosa succede durante la compilazione
La compilazione produce la DLL del plugin e, accanto, le DLL dei pacchetti di cui ha bisogno. I file che CounterStrikeSharp contiene già vengono separati in un’altra cartella, così non li copi due volte.
Cosa copiare sul server
Copia la cartella del plugin, con le DLL dei pacchetti al suo interno, nella cartella plugins del tuo server. Non copiare la cartella dependencies, perché il server ha già quei file e una seconda copia può causare conflitti.
Esegui una query senza bloccare il gioco
Il gioco gira su un solo thread principale. Se lì aspetti un database, l’intero server scatta. Esegui la query in Task.Run e, quando devi toccare di nuovo il gioco, torna al thread principale 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);
});
});
}
Tieni la stringa di connessione nella configurazione
Non scrivere indirizzo, utente e password nel codice. Metti la stringa di connessione nella configurazione del plugin, come nella nostra guida alla configurazione, così ogni proprietario di server usa il proprio database.
Pacchetti che non c’entrano con un plugin
Alcuni pacchetti sono troppo grandi o non sono fatti per vivere dentro un server di gioco, per esempio i framework web come ASP.NET. Preferisci librerie piccole e, se un pacchetto non si carica, controlla se richiede file nativi che mancano.
Prova prima di andare in produzione
Prova prima il plugin su un server di test con un database di test. Verifica che le tabelle vengano create, che una connessione fallita non mandi in crash il plugin e che il log dia un messaggio chiaro quando il database non risponde.
Questo tutorial ti è stato utile?
Barlap per la comunità.