Pachete NuGet și bază de date într-un plugin CounterStrikeSharp
Multe pluginuri utile salvează date: banuri, statistici, ranguri. Pentru asta adaugi un pachet NuGet în proiect, iar regula cea mai importantă este să nu blochezi jocul cât aștepți răspunsul bazei de date. Ghidul le acoperă pe amândouă, cu Dapper și MySqlConnector ca exemplu.
Adaugă pachetele
Pachetele NuGet se listează în fișierul de proiect. Dapper scurtează interogările, iar MySqlConnector comunică cu MariaDB și MySQL. Compilatorul nostru le descarcă singur la build.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
Ce se întâmplă la compilare
Build-ul produce DLL-ul pluginului și, lângă el, DLL-urile pachetelor de care are nevoie. Fișierele pe care CounterStrikeSharp le conține deja sunt puse separat, în alt folder, ca să nu le copiezi de două ori.
Ce copiezi pe server
Copiază folderul pluginului, cu DLL-urile pachetelor din interior, în folderul plugins al serverului. Nu copia folderul dependencies, pentru că serverul are deja acele fișiere, iar o a doua copie poate cauza conflicte.
Rulează o interogare fără să îngheți jocul
Jocul rulează pe un singur fir principal. Dacă aștepți acolo o bază de date, tot serverul se blochează pe moment. Rulează interogarea în Task.Run, iar când ai nevoie să atingi din nou jocul, revino pe firul principal cu 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);
});
});
}
Păstrează connection string-ul în configurare
Nu scrie adresa, utilizatorul și parola în cod. Pune connection string-ul în configurarea pluginului, ca în ghidul nostru despre configurare, ca fiecare proprietar de server să-și folosească propria bază de date.
Pachete care nu au ce căuta într-un plugin
Unele pachete sunt prea mari sau nu sunt făcute să trăiască într-un server de joc, de exemplu framework-urile web precum ASP.NET. Preferă biblioteci mici, iar dacă un pachet nu se încarcă, verifică dacă are nevoie de fișiere native care lipsesc.
Testează înainte să pui în producție
Încearcă mai întâi pluginul pe un server de test, cu o bază de date de test. Verifică dacă tabelele se creează, dacă o conexiune eșuată nu blochează pluginul și dacă logul dă un mesaj clar când baza de date nu răspunde.
A fost util acest tutorial?
Barlap pentru comunitate.