远征GM命令跟数据库创建
本帖最后由 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
大佬威武。。。。。。。。。。。 顶一下顶一下 多谢分享,不错哦 感谢分享
大佬威武
页:
[1]