传奇3K引擎多功能GM管理后台NPC脚本 权限校验玩家查询账号管控全服公告功能实现方案

来源: 作者: 点击:
本脚本只允许管理员权限角色打开后台,普通玩家点击直接拦截,集成在线玩家查询、传送、封号解封、刷物品、全服公告、沙巴克控制、怪物攻城、服务器状态查看,适配3K引擎语法,修改前备份Mir200\Envir下NPC脚本与QFunction文件,防止语法报错造成M2加载异常。

权限原理,脚本开头检测管理员权限,非GM直接提示拒绝访问,所有后台操作全部增加日志输出,记录操作人、目标角色、操作时间,方便后期核对。3K引擎使用ISADMIN判定管理员,GETHUMAN系列指令读取在线玩家信息,MAPMOVE实现跨地图传送,ADDITEM发放道具,SENDMSG发送公告。

NPC主脚本,新建GM管理后台NPC,Merchant.txt添加NPC条目放置安全区。
[@main]
#ACT
#IF
NOT ISADMIN
#ACT
SENDMSG 6 权限不足,你不是管理员。
BREAK
#ELSEACT
MESSAGE 【GM多功能管理后台】
MESSAGE <$COLOR=250>1.\(COLOR=250>1.在线玩家列表查询</\)</$COLOR>
MESSAGE <$COLOR=250>2.\(COLOR=250>2.传唤指定玩家到身边</\)</$COLOR>
MESSAGE <$COLOR=250>3.\(COLOR=250>3.传送至指定玩家位置</\)</$COLOR>
MESSAGE <$COLOR=250>4.\(COLOR=250>4.刷取道具到背包</\)</$COLOR>
MESSAGE <$COLOR=250>5.\(COLOR=250>5.发送全服彩色公告</\)</$COLOR>
MESSAGE <$COLOR=250>6.\(COLOR=250>6.玩家账号封禁与解封</\)</$COLOR>
MESSAGE <$COLOR=250>7.\(COLOR=250>7.一键怪物攻城</\)</$COLOR>
MESSAGE <$COLOR=250>8.\(COLOR=250>8.沙巴克攻城开关控制</\)</$COLOR>
MESSAGE <$COLOR=250>9.\(COLOR=250>9.查看服务器在线人数</\)</$COLOR>
#SACT
#CHOOSE
1,@ShowOnlineList
2,@RecallPlayer
3,@GotoPlayer
4,@GMAddItem
5,@SendAllNotice
6,@BanAccount
7,@StartMonsterSiege
8,@ControlCastleWar
9,@ShowOnlineCount

[@ShowOnlineList]
#ACT
GETHUMANCOUNT <$STR(S0)>
MESSAGE \(STR(S0)>
MESSAGE 当前在线总人数:<\)<$STR(S0)>
MOV S1 0
#WHILE
<$STR(S1)> < <$STR(S0)>
#ACT
GETHUMANNAME <$STR(S1)> <$STR(S2)>
GETHUMANMAP <$STR(S2)> <$STR(S3)>
GETHUMANLEVEL <$STR(S2)> <$STR(S4)>
MESSAGE 玩家:<$STR(S2)> \(STR(S2)> 等级:<\)<$STR(S4)> 地图:<$STR(S3)>
#ACT
INC S1 1
#ENDWHILE
BREAK

[@RecallPlayer]
#ACT
INPUT <$STR(S0)>
MESSAGE \(STR(S0)>
MESSAGE 输入要传唤的角色名:<\)<$\(STR(S0)>
#IF
HUMANEXIST <\)$\(STR(S0)>
#ACT
RECALL <\)$STR(S0)>
SENDMSG 0 #G管理员传唤玩家【<$STR(S0)>】
SENDMSG 6 已传唤【<$STR(S0)>】到你身边。
#ELSEACT
SENDMSG 6 该角色不在线或者不存在。
BREAK

[@GotoPlayer]
#ACT
INPUT <$\(STR(S0)>
#IF
HUMANEXIST <\)$STR(S0)>
#ACT
GOTO <$STR(S0)>
SENDMSG 6 \(STR(S0)>
SENDMSG 6 你已经传送到玩家【<\)<$STR(S0)>】所在位置。
#ELSEACT
SENDMSG 6 角色不存在或者离线。
BREAK

[@GMAddItem]
#ACT
INPUT <$STR(S0)>
INPUT <$STR(S1)>
MESSAGE 物品名称:<$STR(S0)> \(STR(S0)> 数量:<\)<$STR(S1)>
#IF
CHECKITEMNAMEEXIST <$\(STR(S0)>
#ACT
ADDITEM <\)$STR(S0)> <$STR(S1)>
SENDMSG 6 \(STR(S1)>
SENDMSG 6 成功添加【<\)<$STR(S0)>】*<$STR(S1)>到背包。
#ELSEACT
SENDMSG 6 物品名称在数据库不存在。
BREAK

[@SendAllNotice]
#ACT
INPUT <$\(STR(S0)>
#ACT
SENDMSG 0 #R【GM公告】<\)$STR(S0)>
SENDMSG 6 全服公告发送完成。
BREAK

[@BanAccount]
#ACT
MESSAGE 1=封禁账号 2=解封账号
INPUT <$STR(S0)>
INPUT <$STR(S1)>
#IF
<$\(STR(S0)> = 1
#ACT
BANACCOUNT <\)$STR(S1)>
SENDMSG 0 #R管理员封禁账号【<$STR(S1)>】
SENDMSG 6 账号【<$STR(S1)>】已封禁。
#ELSEACT
#IF
<$\(STR(S0)> = 2
#ACT
UNBANACCOUNT <\)$STR(S1)>
SENDMSG 0 #G管理员解封账号【<$STR(S1)>】
SENDMSG 6 账号【<$STR(S1)>】已解除封禁。
#ELSEACT
SENDMSG 6 输入选项错误。
BREAK

[@StartMonsterSiege]
#ACT
STARTSIEGE
SENDMSG 0 #R怪物攻城已经开启,所有主城将刷新攻城怪物!
SENDMSG 6 怪物攻城启动成功。
BREAK

[@ControlCastleWar]
#ACT
MESSAGE 1开启沙巴克 2结束沙巴克
INPUT <$\(STR(S0)>
#IF
<\)$STR(S0)> = 1
#ACT
STARTCASTLEWAR
SENDMSG 0 #R沙巴克攻城战斗开启!
#ELSEACT
#IF
<$STR(S0)> = 2
#ACT
ENDCASTLEWAR
SENDMSG 0 #Y沙巴克攻城战斗结束。
#ELSEACT
SENDMSG 6 输入参数错误。
BREAK

[@ShowOnlineCount]
#ACT
GETHUMANCOUNT <$STR(S0)>
SENDMSG 6 \(STR(S0)>
SENDMSG 6 当前服务器在线总人数:<\)<$STR(S0)>
MESSAGE 在线人数:<$STR(S0)>
BREAK

配套QFunction日志记录片段,所有GM操作写入日志文本,3K引擎支持FILEWRITE文本写入指令,记录操作行为。
[@GmOperLog]
#ACT
FILEWRITE ..\Log\GMOperLog.txt 【<$DATETIME>\(DATETIME>】管理员【<\)<$USERNAME>】执行操作:<$STR(S0)>
BREAK

调用日志示例,在传唤玩家分支内追加:
#ACT
MOV S9 传唤玩家<$STR(S0)>
CALL @GmOperLog

防护与安全设置,后台NPC只放置在管理员专属地图,普通玩家无法进入该地图。M2权限配置,严格管控管理员角色,不要批量开放ISADMIN权限。增加操作冷却,短时间禁止连续多次执行刷物品、封号指令,防止误操作。可增加二级密码校验,进入后台前要求输入管理员密码,密码存储在全局变量,防止GM账号被盗滥用后台。
二级密码示例追加到@main开头:
#IF
NOT ISADMIN
#ACT
SENDMSG 6 权限不足。
BREAK
#ELSEACT
GETGLOBALVAR G_GMPwd <$STR(S0)>
INPUT <$STR(S1)>
#IF
<$STR(S1)> <> <$STR(S0)>
#ACT
SENDMSG 6 管理员密码错误。
BREAK

性能注意事项,在线玩家列表遍历功能,服务器人数较多时,遍历GETHUMANNAME会短暂占用CPU,建议只在低在线时段使用,不要频繁刷新在线列表。所有输入INPUT指令,做好名称过滤,防止特殊字符引发脚本异常。

常见故障排查,普通玩家能打开后台,检查开头NOT ISADMIN判断,3K引擎ISADMIN依靠M2管理员列表配置,角色没有加入管理员列表才能拦截。传唤玩家失效,核对HUMANEXIST指令,仅识别在线角色,离线角色无法传唤。发送全服公告无显示,确认SENDMSG 0为全服广播指令,3K引擎消息编号0代表全服。怪物攻城不刷新,确认M2开启怪物攻城事件,STARTSIEGE指令引擎支持。

扩展功能,可增加角色等级调整、元宝金币增减、清除玩家PK值、一键清理地图怪物、踢出在线玩家、查询行会信息。可以增加定时服务器维护,全局定时器到点自动发维护公告,倒计时后关闭沙巴克、踢出所有在线玩家。

部署步骤,添加NPC到Merchant.txt,新建NPC脚本粘贴全部后台代码,QFunction追加GM操作日志标签,保存文件重载M2脚本。登录管理员账号打开后台,依次测试玩家查询、传唤、发公告、怪物攻城等功能,调试完成删除测试SENDMSG,正式服开启日志记录。

注意,3K引擎指令和HERO、GOM不完全通用,不要直接跨引擎直接使用。正式环境务必做好权限隔离,不要将后台NPC放置在主城安全区,避免权限泄露造成服务器数据受损。