本帖最后由 bfdz49 于 2025-5-28 11:21 编辑
- INSERT INTO GMCommands (CommandName, Description, Format, ErrorMsg, RequiredRight, CheckRight, SupportServer, ServerID)
- VALUES
- ('count', '显示在线玩家数量', '/count', '无效的命令格式', 10, 1, 0, NULL),
- ('userlist', '显示在线玩家列表', '/userlist', '无效的命令格式', 50, 1, 0, NULL),
- ('monitorluaerror', '监控玩家客户端的 Lua 错误信息', '/monitorluaerror <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('cancelmonitorluaerror', '取消监控玩家客户端的 Lua 错误信息', '/cancelmonitorluaerror <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('tile', '设置玩家的瓷砖位置', '/tile <玩家名> <x> <y>', '无效的命令格式', 150, 1, 1, NULL),
- ('move', '移动玩家到指定位置', '/move <玩家名> <x> <y>', '无效的命令格式', 150, 1, 1, NULL),
- ('moveex', '扩展移动玩家到指定位置', '/moveex <玩家名> <x> <y>', '无效的命令格式', 150, 1, 1, NULL),
- ('pull', '将玩家拉到 GM 位置', '/pull <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('push', '将玩家推到指定位置', '/push <玩家名> <x> <y>', '无效的命令格式', 150, 1, 1, NULL),
- ('setpos', '设置玩家的位置', '/setpos <玩家名> <x> <y>', '无效的命令格式', 150, 1, 1, NULL),
- ('getpos', '获取玩家的位置', '/getpos <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('mute', '禁言玩家', '/mute <玩家名> <时间> <原因>', '无效的命令格式', 100, 1, 1, NULL),
- ('muteex', '扩展禁言玩家', '/muteex <玩家名> <时间> <原因>', '无效的命令格式', 100, 1, 1, NULL),
- ('mutebroadcast', '广播禁言信息', '/mutebroadcast <玩家名> <时间> <原因>', '无效的命令格式', 100, 1, 1, NULL),
- ('kick', '踢出玩家', '/kick <玩家名> <原因>', '无效的命令格式', 100, 1, 1, NULL),
- ('kickbroadcast', '广播踢出信息', '/kickbroadcast <玩家名> <原因>', '无效的命令格式', 100, 1, 1, NULL),
- ('king', '设置玩家为国王', '/king <玩家名>', '无效的命令格式', 200, 1, 0, NULL),
- ('ad', '广播广告信息', '/ad <信息>', '无效的命令格式', 50, 1, 1, NULL),
- ('adreset', '重置广告信息', '/adreset', '无效的命令格式', 50, 1, 1, NULL),
- ('maintain', '设置维护模式', '/maintain <时间> <持续时间>', '无效的命令格式', 200, 1, 1, NULL),
- ('hide', '设置 GM 隐身状态', '/hide <状态>', '无效的命令格式', 100, 1, 0, NULL),
- ('scan', '扫描玩家信息', '/scan <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('scanprocess', '扫描玩家进程', '/scanprocess <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('scanqq', '扫描玩家 QQ 信息', '/scanqq <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('scanwinver', '扫描玩家 Windows 版本', '/scanwinver <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('scanping', '扫描玩家网络延迟', '/scanping <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('statuserinfo', '统计玩家信息', '/statuserinfo <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('getuserinfo', '获取玩家详细信息', '/getuserinfo <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('consolecmd', '执行控制台命令', '/consolecmd <命令>', '无效的命令格式', 200, 1, 1, NULL),
- ('scanplugin', '扫描玩家插件', '/scanplugin <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('killprocess', '杀死玩家进程', '/killprocess <玩家名> <进程名>', '无效的命令格式', 150, 1, 1, NULL),
- ('crash', '使玩家客户端崩溃', '/crash <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('killservercluster', '杀死服务器集群', '/killservercluster', '无效的命令格式', 200, 1, 1, NULL),
- ('addkey', '添加关键字', '/addkey <关键字>', '无效的命令格式', 50, 1, 1, NULL),
- ('removekey', '移除关键字', '/removekey <关键字>', '无效的命令格式', 50, 1, 1, NULL),
- ('clearkey', '清空关键字列表', '/clearkey', '无效的命令格式', 50, 1, 1, NULL),
- ('getfile', '获取文件信息', '/getfile <玩家名> <文件名>', '无效的命令格式', 100, 1, 1, NULL),
- ('getlog', '获取日志信息', '/getlog <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('debug', '调试信息', '/debug <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('startprofile', '开始性能分析', '/startprofile <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('stopprofile', '停止性能分析', '/stopprofile <玩家名>', '无效的命令格式', 150, 1, 1, NULL),
- ('getpath', '获取路径信息', '/getpath <玩家名>', '无效的命令格式', 100, 1, 1, NULL),
- ('getmutelist', '获取禁言列表', '/getmutelist', '无效的命令格式', 100, 1, 1, NULL),
- ('clearmutelist', '清空禁言列表', '/clearmutelist', '无效的命令格式', 100, 1, 1, NULL),
- ('freeze', '冻结玩家', '/freeze <玩家名> <时间> <原因>', '无效的命令格式', 150, 1, 1, NULL),
- ('prison', '将玩家投入监牢', '/prison <玩家名> <时间> <原因>', '无效的命令格式', 1
复制代码 创建数据库GM
- 创建 GMCommands 表
- CREATE TABLE GMCommands (
- CommandID INT PRIMARY KEY IDENTITY(1,1), -- 主键,自增
- CommandName NVARCHAR(255) NOT NULL, -- 命令名称
- Description NVARCHAR(MAX), -- 命令描述
- Format NVARCHAR(255), -- 命令格式
- ErrorMsg NVARCHAR(255), -- 错误信息
- RequiredRight BIGINT NOT NULL, -- 执行该命令所需的权限
- CheckRight BIT NOT NULL DEFAULT 1, -- 是否需要检查权限
- SupportServer BIT NOT NULL DEFAULT 0, -- 是否支持服务器操作
- ServerID INT -- 服务器 ID(如果适用)
- );
- 创建 GMUsers 表
- CREATE TABLE GMUsers (
- UserID INT PRIMARY KEY IDENTITY(1,1), -- 主键,自增
- GMName NVARCHAR(255) NOT NULL, -- GM 用户名
- ServerID INT, -- 用户所属服务器 ID(如果适用)
- Rights BIGINT NOT NULL -- 用户的权限级别
- );
- 创建 CommandResults 表
- CREATE TABLE CommandResults (
- ResultID INT PRIMARY KEY IDENTITY(1,1), -- 主键,自增
- CommandID INT NOT NULL, -- 执行的命令 ID
- SenderID INT NOT NULL, -- 发送者的用户 ID
- ResultData VARBINARY(MAX), -- 命令执行的结果数据
- ResultTime DATETIME NOT NULL DEFAULT GETDATE() -- 命令执行的时间
- );
- 可以为 CommandResults 表添加外键约束,引用 GMCommands 和 GMUsers 表。
- ALTER TABLE CommandResults
- ADD CONSTRAINT FK_CommandResults_CommandID
- FOREIGN KEY (CommandID) REFERENCES GMCommands(CommandID);
- ALTER TABLE CommandResults
- ADD CONSTRAINT FK_CommandResults_SenderID
- FOREIGN KEY (SenderID) REFERENCES GMUsers(UserID);
- 插入 GMCommands 数据
- INSERT INTO GMCommands (CommandName, Description, Format, ErrorMsg, RequiredRight, CheckRight, SupportServer, ServerID)
- VALUES
- ('kick', 'Kick a user from the server', '/kick <username>', 'Invalid command format', 100, 1, 1, NULL),
- ('broadcast', 'Broadcast a message to all users', '/broadcast <message>', 'Invalid command format', 50, 1, 1, NULL),
- ('status', 'Check server status', '/status', 'Invalid command format', 10, 1, 0, NULL);
- 插入 CommandResults 数据
- INSERT INTO CommandResults (CommandID, SenderID, ResultData, ResultTime)
- VALUES
- (1, 1, 0x12345678, '2025-05-28 10:00:00'),
- (2, 2, 0x87654321, '2025-05-28 10:30:00'),
- (3, 3, 0x11223344, '2025-05-28 11:00:00');
- 查询所有命令
- SELECT * FROM GMCommands;
- 查询特定用户的所有命令执行
- SELECT cr.ResultID, gc.CommandName, cr.ResultData, cr.ResultTime
- FROM CommandResults cr
- JOIN GMCommands gc ON cr.CommandID = gc.CommandID
- WHERE cr.SenderID = 1;
- GMCommands 表存储 GM 命令的基本信息和配置
- Column Name Data Type Description
- CommandID INT (Primary Key) 命令的唯一标识符
- CommandName NVARCHAR(255) 命令名称
- Description NVARCHAR(MAX) 命令描述
- Format NVARCHAR(255) 命令格式
- ErrorMsg NVARCHAR(255) 错误信息
- RequiredRight BIGINT 执行该命令所需的权限
- CheckRight BIT 是否需要检查权限
- SupportServer BIT 是否支持服务器操作
- ServerID INT 服务器 ID(如果适用)
- GMUsers 表存储 GM 用户的信息
- Column Name Data Type Description
- UserID INT (Primary Key) 用户的唯一标识符
- GMName NVARCHAR(255) GM 用户名
- ServerID INT 用户所属服务器 ID(如果适用)
- Rights BIGINT 用户的权限级别
- CommandResults 表存储命令执行的结果
- Column Name Data Type Description
- ResultID INT (Primary Key) 结果的唯一标识符
- CommandID INT (Foreign Key) 执行的命令 ID
- SenderID INT 发送者的用户 ID
- ResultData VARBINARY(MAX) 命令执行的结果数据
- ResultTime DATETIME 命令执行的时间
复制代码 插入玩家数据
- 插入或更新玩家记录
- 出现错误话 例如这样
- 消息 544,级别 16,状态 1,第 1 行
- 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'GMUsers' 中的标识列插入显式值。
- 完成时间: 2025-05-28T10:29:30.9169367+08:00
- 解决方法方法 :关闭 IDENTITY_INSERT
-
- SET IDENTITY_INSERT GMUsers ON;
- 插入数据,3833是玩家的ID
- INSERT INTO GMUsers (UserID, GMName, ServerID, Rights)
- VALUES (3833, 'Player3833', NULL, 200);
- 重新打开 IDENTITY_INSERT
- SET IDENTITY_INSERT GMUsers OFF;
- 完整的 SQL 脚本
- SET IDENTITY_INSERT GMUsers ON;
- IF NOT EXISTS (SELECT 1 FROM GMUsers WHERE UserID = 3833)
- BEGIN
- INSERT INTO GMUsers (UserID, GMName, ServerID, Rights)
- VALUES (3833, 'Player3833', NULL, 200);
- END
- ELSE
- BEGIN
- UPDATE GMUsers
- SET Rights = 200, GMName = 'Player3833'
- WHERE UserID = 3833;
- END
- SET IDENTITY_INSERT GMUsers OFF;
- 不使用 IDENTITY 插入如果你不需要显式指定 UserID ,可以让 SQL Server 自动生成 UserID 。在这种情况下,你只需要插入其他字段, UserID 会自动递增
- IF NOT EXISTS (SELECT 1 FROM GMUsers WHERE UserID = 3833)
- BEGIN
- INSERT INTO GMUsers (GMName, ServerID, Rights)
- VALUES ('Player3833', NULL, 200);
- END
- ELSE
- BEGIN
- UPDATE GMUsers
- SET Rights = 200, GMName = 'Player3833'
- WHERE UserID = 3833;
- END
复制代码
|