当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

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

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

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

配套子程序[AUTO_WAVE_SPAWN]内容为:
[@AutoWaveSpawn]
IF
EQUALN01
ACT
CLEARMONEXPR3
CREATEMONSTER狂暴骷髅333033050
TIMERECALL[CheckWaveClear]60000

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

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

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

[@MaintainMonsterCount]脚本执行实际补怪:
[@MaintainMonsterCount]
IF
CHECKMONCOUNTS0S1<N0
ACT
CALCN1N0-HUM(MONCOUNT)
CREATEMONSTERS1S0330330N1
TIMERECALL[MaintainMonsterCount]5000

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

坐标生成可扩展为随机区域。将固定坐标330330替换为:
RANDOMXY320340320340M0M1
CREATEMONSTERS1S0M0M1N1

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

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

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

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