MySQL: Online
Load: High
Sandbox: Ready

NuGet-Pakete und Datenbank in einem CounterStrikeSharp-Plugin

Viele nützliche Plugins speichern Daten: Bans, Statistiken, Ränge. Dafür fügst du dem Projekt ein NuGet-Paket hinzu, und die wichtigste Regel lautet, das Spiel nie zu blockieren, während du auf die Datenbank wartest. Diese Anleitung behandelt beides am Beispiel von Dapper und MySqlConnector.

1

Pakete hinzufügen

NuGet-Pakete stehen in der Projektdatei. Dapper macht Abfragen kurz, und MySqlConnector spricht mit MariaDB und MySQL. Unser Compiler lädt sie beim Bauen automatisch herunter.

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

Was beim Kompilieren passiert

Der Build erzeugt deine Plugin-DLL und daneben die DLLs der Pakete, die dein Plugin braucht. Dateien, die CounterStrikeSharp schon enthält, liegen getrennt in einem anderen Ordner, damit du sie nicht doppelt kopierst.

3

Was auf den Server kopiert wird

Kopiere den Plugin-Ordner samt den Paket-DLLs darin in den Ordner plugins deines Servers. Kopiere den Ordner dependencies nicht, denn der Server hat diese Dateien bereits, und eine zweite Kopie kann Konflikte verursachen.

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

Abfragen ohne das Spiel einzufrieren

Das Spiel läuft auf einem einzigen Haupt-Thread. Wartest du dort auf eine Datenbank, ruckelt der ganze Server. Führe die Abfrage in Task.Run aus, und wenn du wieder auf das Spiel zugreifen musst, kehrst du mit Server.NextFrame zum Haupt-Thread zurück.

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

Connection String in die Konfiguration

Schreibe Adresse, Benutzer und Passwort nicht in den Code. Lege den Connection String in der Plugin-Konfiguration ab, wie in unserer Konfigurationsanleitung, damit jeder Serverbetreiber seine eigene Datenbank nutzt.

6

Pakete, die nicht in ein Plugin gehören

Manche Pakete sind zu groß oder nicht dafür gemacht, in einem Spieleserver zu leben, etwa Web-Frameworks wie ASP.NET. Bevorzuge kleine Bibliotheken, und lädt ein Paket nicht, prüfe, ob es native Dateien braucht, die fehlen.

Nutze kein Datenbankkonto mit mehr Rechten, als das Plugin braucht. Lege einen Benutzer an, der nur seine eigenen Tabellen anfassen darf.
7

Vor dem Livebetrieb testen

Probiere das Plugin zuerst auf einem Testserver mit einer Testdatenbank aus. Prüfe, ob die Tabellen angelegt werden, ob eine fehlgeschlagene Verbindung das Plugin nicht zum Absturz bringt und ob das Log eine klare Meldung gibt, wenn die Datenbank nicht erreichbar ist.

War diese Anleitung hilfreich?

Seite generiert in 0.011 Sekunden
CounterStrikeSharp Web Compiler V1.0 - Erstellt mit von RomaniaBarlap für die Community.