Pacotes NuGet e banco de dados num plugin do CounterStrikeSharp
Muitos plugins úteis guardam dados: banimentos, estatísticas, ranks. Para isso você adiciona um pacote NuGet ao projeto, e a regra mais importante é não bloquear o jogo enquanto espera o banco de dados. Este guia cobre as duas coisas, usando Dapper e MySqlConnector como exemplo.
Adicione os pacotes
Os pacotes NuGet são listados no arquivo de projeto. O Dapper encurta as consultas e o MySqlConnector conversa com MariaDB e MySQL. Nosso compilador os baixa para você durante a compilação.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
O que acontece ao compilar
A compilação gera a DLL do seu plugin e, ao lado, as DLLs dos pacotes de que ele precisa. Os arquivos que o CounterStrikeSharp já contém ficam separados em outra pasta, para você não copiá-los duas vezes.
O que copiar para o servidor
Copie a pasta do plugin, com as DLLs dos pacotes dentro, para a pasta plugins do servidor. Não copie a pasta dependencies, porque o servidor já tem esses arquivos e uma segunda cópia pode causar conflitos.
Execute uma consulta sem congelar o jogo
O jogo roda em uma única thread principal. Se você esperar um banco de dados ali, o servidor inteiro engasga. Execute a consulta em Task.Run e, quando precisar mexer no jogo de novo, volte à thread principal com 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);
});
});
}
Mantenha a string de conexão na configuração
Não escreva endereço, usuário e senha no código. Coloque a string de conexão na configuração do plugin, como no nosso guia de configuração, para que cada dono de servidor use o próprio banco.
Pacotes que não combinam com um plugin
Alguns pacotes são grandes demais ou não foram feitos para viver dentro de um servidor de jogo, como frameworks web do tipo ASP.NET. Prefira bibliotecas pequenas e, se um pacote não carregar, verifique se ele precisa de arquivos nativos que estão faltando.
Teste antes de ir para produção
Experimente o plugin primeiro num servidor de teste com um banco de teste. Verifique se as tabelas são criadas, se uma conexão que falha não derruba o plugin e se o log dá uma mensagem clara quando o banco está fora do ar.
Este tutorial foi útil?
Barlap para a comunidade.