bfdz49 发表于 2025-5-28 10:55:28

远征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




点上一支烟 发表于 2025-5-28 20:43:58

大佬威武。。。。。。。。。。。

qwer112233 发表于 2025-6-11 14:19:04

顶一下顶一下

liyicheng556 发表于 2025-6-14 08:43:43

多谢分享,不错哦

songfc 发表于 2025-6-14 09:00:20

感谢分享

简歌丶 发表于 2025-6-14 11:01:33


大佬威武
页: [1]
查看完整版本: 远征GM命令跟数据库创建

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明