在 CounterStrikeSharp 插件中使用 NuGet 包与数据库
许多实用的插件都要保存数据:封禁记录、统计、段位。为此你要在项目里添加 NuGet 包,而最重要的规则是:在等待数据库时不要阻塞游戏。本指南以 Dapper 和 MySqlConnector 为例,把这两点都讲清楚。
1
添加软件包
NuGet 包写在项目文件中。Dapper 让查询更简洁,MySqlConnector 负责与 MariaDB 和 MySQL 通信。我们的编译器会在构建时替你下载它们。
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
2
编译时会发生什么
构建会生成你的插件 DLL,以及它旁边的、插件所需软件包的 DLL。CounterStrikeSharp 已经包含的文件会被单独放进另一个文件夹,这样你就不会重复复制。
3
该把什么复制到服务器
把插件文件夹(里面带有软件包的 DLL)复制到服务器的 plugins 文件夹中。不要复制 dependencies 文件夹,因为服务器本来就有这些文件,再多一份可能引起冲突。
YourPlugin-Release.zip
YourPlugin
YourPlugin.dll
Dapper.dll
MySqlConnector.dll
dependencies
Files already provided by CounterStrikeSharp
4
执行查询而不卡住游戏
游戏运行在唯一的主线程上。如果在那里等待数据库,整个服务器都会卡顿。请在 Task.Run 中执行查询,需要再次操作游戏时,用 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);
});
});
}
5
把连接字符串放在配置里
不要把地址、用户名和密码写进代码。请像我们的配置指南那样,把连接字符串放在插件配置中,这样每位服主都可以使用自己的数据库。
6
不适合放进插件的包
有些软件包太大,或者根本不是为在游戏服务器内运行而设计的,比如 ASP.NET 之类的 Web 框架。请优先选择小型库,如果某个包加载失败,检查它是否需要缺失的本机文件。
不要使用权限超出插件需要的数据库账号。请创建一个只能操作自己数据表的用户。
7
上线前先测试
先在测试服务器上用测试数据库试用插件。检查数据表能否正常创建、连接失败时插件是否不会崩溃,以及数据库宕机时日志里是否有清晰的提示。
这篇教程对你有帮助吗?
页面生成耗时 0.012 秒
CounterStrikeSharp Web Compiler V1.0 - 制作工具
由
Barlap 为社区打造。
Barlap 为社区打造。