传奇单机刷怪NPC脚本实现自动波次与数量补足机制

来源: 作者: 点击:
在传奇单机服务端中添加具备自动刷怪功能的NPC,需通过QFunction-0.txt、Npc_def目录下的自定义脚本及定时器指令配合完成。核心逻辑围绕[@OnTimer]事件、怪物计数判断、坐标生成及循环调用展开,适用于GOM、GEE等主流引擎。

首先在MapQuest_def文件夹中创建新NPC配置文件,例如AutoMonster.txt,内容如下:
[@main]
AUTOCHECKMONSTER 50 10000
刷新设置: \
<手动触发/@ManualSpawn> \
<自动波次模式/@WaveMode> \
<数量补足模式/@FillMode>

其中#AUTOCHECKMONEMON为自定义标签,用于后续脚本识别该NPC功能类型。

实现“打完一波后延迟刷新下一波”需启用定时器。在QFunction-0.txt中添加:
[@WaveMode]
IF
CHECKMAPNAME 3
ACT
MOV S0 3
MOV S1 0
MOV N0 1
CALL [AutoWaveSpawn]
SENDMSG 7 激活波次刷怪,地图3每60秒刷新50只怪物。

配套子程序[AUTO_WAVE_SPAWN]内容为:
[@AutoWaveSpawn]
IF
EQUAL N0 1
ACT
CLEARMONEXPR 3
CREATEMONSTER 狂暴骷髅 3 330 330 50
TIMERECALL [CheckWaveClear] 60000

[@CheckWaveClear]负责检测地图3是否无怪:
[@CheckWaveClear]
IF
CHECKMONCOUNT 3 狂暴骷髅 == 0
ACT
CALL [AutoWaveSpawn]

此逻辑确保前一波清空后才启动下一轮60秒倒计时。

若需“始终维持50只怪物,死亡即补”,则采用数量监控模式。在[@FillMode]中启动持续检测:
[@FillMode]
IF
CHECKMAPNAME 3
ACT
MOV S0 3
MOV S1 狂暴骷髅
MOV N0 50
TIMERECALL [MaintainMonsterCount] 5000
SENDMSG 7 启动数量维持模式,每5秒检查并补足至50只。

[@MaintainMonsterCount]脚本执行实际补怪:
[@MaintainMonsterCount]
IF
CHECKMONCOUNT S0 S1 < N0
ACT
CALC N1 N0 - HUM(MONCOUNT)
CREATEMONSTER S1 S0 330 330 N1
TIMERECALL [MaintainMonsterCount] 5000

此处HUM(MONCOUNT)为引擎内置变量,返回当前地图指定怪物数量。部分旧版引擎需改用GETMONCOUNT命令配合临时变量存储。

坐标生成可扩展为随机区域。将固定坐标330 330替换为:
RANDOMXY 320 340 320 340 M0 M1
CREATEMONSTER S1 S0 M0 M1 N1

RANDOMXY指令在矩形区域内生成有效坐标,避免怪物卡墙。

所有刷怪逻辑必须限定地图编号,防止跨图干扰。在脚本开头加入CHECKMAPNAME验证,确保仅在目标地图(如比奇废矿3号图)生效。怪物名称需与MonItems.txt中定义完全一致,包括空格与特殊符号。

定时器最小间隔通常为1000毫秒,低于此值可能导致M2Server脚本队列阻塞。测试时先用10秒间隔验证逻辑,再调整至实际需求值。清除怪物使用CLEARMONEXPR而非KILLMON,前者彻底移除实体,后者可能触发死亡事件导致脚本循环异常。

最终NPC需在D:MirServerMir200EnvirMarket_def中注册,并于地图适当位置放置坐标点。玩家对话选择对应模式后,服务端将持续在后台执行刷怪任务,直至角色离线或手动关闭定时器。