在传奇服务端中,通过NPC脚本实现双倍经验功能,并限制仅GM可触发,需结合权限判断、状态变量与定时器机制。以下以GOM或Hero引擎通用写法为例,直述实现步骤。
首先,在Npc_def目录下创建NPC脚本文件,例如ExpDouble.txt。该NPC放置于地图指定坐标,供玩家交互。
脚本内容如下:
[@main]
IF
ISADMIN
ACT
goto @check_double_status
ELSEACT
message 只有管理员才能开启双倍经验!
break
[@check_double_status]
IF
EQUAL [DOUBLE_EXP_ACTIVE] 1
ACT
message 双倍经验已开启,无需重复操作。
break
ELSEACT
goto @start_double_exp
[@start_double_exp]
ACT
set [DOUBLE_EXP_ACTIVE] 1
starttimer 7200 ; 持续2小时(7200秒)
sendmsg 0 [系统] GM开启了全服双倍经验,持续2小时!
message 双倍经验已开启,持续2小时。
在QFunction-0.txt中添加计时器结束处理:
[@Timer7200]
IF
EQUAL [DOUBLE_EXP_ACTIVE] 1
ACT
set [DOUBLE_EXP_ACTIVE] 0
sendmsg 0 [系统] 双倍经验时间结束。
关键点说明:
ISADMIN 是引擎内置指令,用于判断当前角色是否拥有管理员权限(通常需登录时输入正确GM命令或配置AdminList.txt);
[DOUBLE_EXP_ACTIVE] 为自定义全局变量,标记双倍状态是否生效;
sendmsg 0 表示向全服广播消息,部分引擎写作 SENDMSGALL;
starttimer 启动的计时器独立运行,即使GM下线仍会按时结束。
若需支持手动关闭,可在主菜单增加选项:
[@main]
IF
ISADMIN
ACT
movr D1
sendmsg 5 请选择操作:
sendmsg 5 1. 开启双倍经验
sendmsg 5 2. 关闭双倍经验
waitcmd 1 @open_exp
waitcmd 2 @close_exp
[@close_exp]
IF
EQUAL [DOUBLE_EXP_ACTIVE] 1
ACT
set [DOUBLE_EXP_ACTIVE] 0
canceltimer 7200
sendmsg 0 [系统] GM提前关闭了双倍经验。
message 已关闭双倍经验。
ELSEACT
message 当前未开启双倍经验。
服务端需确保经验计算逻辑读取该变量。在标准引擎中,通常在人物打怪获得经验处已有条件判断,例如:
; 在QManage.txt 或 MonsterDrop.txt 中
IF
EQUAL [DOUBLE_EXP_ACTIVE] 1
ACT
CALC exp = * 2
ELSEACT
CALC exp =
若引擎未内置此逻辑,需手动修改经验发放段落,加入变量检测。
测试步骤:
用GM账号登录并触发NPC;
观察是否提示“只有管理员才能开启”(非GM测试);
GM开启后,普通角色打怪经验是否翻倍;
2小时后或手动关闭后,经验是否恢复正常。
注意事项:
ISADMIN 判断依赖服务端Admin权限配置,确保GM账号已正确写入管理列表;
部分旧版引擎使用 CHECKADMIN 替代 ISADMIN,需查阅对应文档;
变量名可自定义,但需全局统一;
定时器编号(如7200)应避免与其他功能冲突。
此方案结构清晰,权限隔离明确,适用于单机或内网版本,无需额外插件。

