在传奇服务端中实现自动刷怪、塔防模式或无限补怪功能,核心在于灵活运用M2Server的脚本指令,特别是定时器(SetOnTimer)、变量计算(CALC)和怪物生成(MonsterSpawn)命令。无需修改引擎内核,仅通过标准脚本逻辑即可构建复杂的刷怪系统。以下分别针对“进地图自动波次刷怪”和“NPC触发动态补怪”两种需求提供完整代码方案与部署步骤。
第一种方案:进地图自动触发波次刷怪(塔防模式)。
此模式要求玩家进入特定地图后,系统自动开始计时,每隔固定时间刷新指定数量的怪物,直到完成所有波次。实现关键在于利用QFunction.txt中的[@EnterMap]段落检测玩家进入事件,并结合个人变量记录当前波次。
首先打开Mir200EnvirQFunction.txt,找到[@EnterMap]标签。在此处添加判断逻辑,检测玩家是否进入了目标地图(假设地图号为“3”即盟重省,或自定义地图号如“H001”)。代码如下:
[@EnterMap]
IF
EQUAL S2 H001
CHECKVAR H0 0
ACT
SETVAR H0 1
MOV H1 1
SENDMSG 6 欢迎来到塔防战场!第一波怪物即将来袭。
SETONTIMER 1 10
BREAK
S2代表进入的地图号,H001需替换为你实际使用的地图编号。H0变量用于标记该玩家是否已启动刷怪流程,防止重复触发。H1变量用于记录当前波次,初始设为1。SETONTIMER 1 10表示启动1号定时器,每10秒触发一次(时间单位视引擎而定,通常为秒)。
接下来在QFunction.txt中新建[@Timer1]标签,处理定时刷怪逻辑:
[@Timer1]
IF
CHECKVAR H1 波怪物已刷新!
ELSEACT
KILLTIMER 1
SENDMSG 6 恭喜通关!所有波次已完成。
BREAK
MONSTERSPAWN指令格式为“怪物名称 地图号 X坐标 Y坐标 数量”。此处设定每次刷新5只白野猪,坐标固定在(200,200),可根据地图大小调整。H1变量每次递增,当超过10波时停止定时器。若需每波怪物不同,可使用多重IF判断H1数值,执行不同的MONSTERSPAWN指令。
第二种方案:NPC触发无限刷怪与动态补怪。
此模式允许玩家点击NPC开启刷怪,系统维持场上怪物总数恒定。例如设定总数50只,若玩家击杀20只,系统立即补充30只,确保持续战斗。这需要结合[@KillMonster]事件和NPC脚本中的循环检测。
首先创建NPC脚本文件,如Mir200EnvirMarket_Def刷怪大师-0.txt。编写主菜单与启动逻辑:
[@main]
想要挑战无穷无尽的怪物吗?
[@start_infinite]
ACT
SETVAR H2 1
MOV H3 50
MONSTERSPAWN 虹魔教主 H001 150 150 50
SENDMSG 6 已刷新50只虹魔教主,击杀后会自动补充!
SETONTIMER 2 5
GOTO @main
H2变量标记刷怪状态,H3记录目标总数。启动时直接刷新50只怪物,并开启2号定时器,每5秒检测一次场上怪物数量。
[@stop_infinite]
ACT
SETVAR H2 0
KILLTIMER 2
SENDMSG 6 刷怪模式已停止。
GOTO @main
关键逻辑在于QFunction.txt中的[@Timer2]和[@KillMonster]配合。在QFunction.txt中添加:
[@KillMonster]
IF
EQUAL S2 H001
CHECKVAR H2 1
ACT
DELAYGOTO 2000 @CheckMobCount
BREAK
[@CheckMobCount]
IF
CHECKVAR H2 1
ACT
CALC H4 = 50 - MONCOUNT H001 虹魔教主
IF
CHECKVAR H4 > 0
ACT
MONSTERSPAWN 虹魔教主 H001 150 150 H4
SENDMSG 6 检测到怪物减少,自动补充只!
BREAK
此处逻辑为:玩家击杀怪物后,延迟2秒(给系统刷新时间)执行@CheckMobCount。在该标签下,使用CALC计算目标数50减去当前地图上“虹魔教主”的实际数量(MONCOUNT指令),结果存入H4。若H4大于0,说明有怪物死亡,立即执行MONSTERSPAWN补充相应数量。注意MONCOUNT指令需引擎支持,若不支持,可改用全局变量手动计数:在[@KillMonster]中DEC H3 1,在[@Timer2]中若H3小于50则补充(50-H3)只并重置H3。
若引擎不支持动态变量作为MONSTERSPAWN的数量参数,需采用循环写法或固定步长补充。例如每次检测到不足就固定刷10只,直到接近目标值。或者简化逻辑,不在击杀瞬间补充,而是依靠定时器每秒检测一次:
[@Timer2]
IF
CHECKVAR H2 1
ACT
CALC H4 = 50 - MONCOUNT H001 虹魔教主
IF
CHECKVAR H4 > 0
ACT
MONSTERSPAWN 虹魔教主 H001 150 150 H4
BREAK
这样每5秒自动扫描一次,无论玩家击杀速度如何,都能将怪物数量维持在50只左右,实现“无穷无尽”的效果。
部署时需注意:所有涉及变量的脚本必须确保变量号(如H0, H1)未被其他功能占用。地图号H001需替换为实际地图编号,且该地图需在MapList.txt中注册。怪物名称必须与Monster.db中完全一致。脚本文件保存为ANSI编码。若需多玩家同时体验,变量需改为个人变量(通常以H开头即为个人变量,具体视引擎定义),避免不同玩家之间数据干扰。对于单机版本,可直接使用全局变量简化逻辑。
测试阶段,建议先在GM模式下使用@MOB命令手动刷怪验证坐标与怪物名称是否正确,再启动NPC脚本观察定时器是否按预期工作。若发现怪物不刷新,检查M2Server控制台是否有“Monsterspawn failed”类报错,通常是因为地图边界限制或怪物数据库缺失。通过上述脚本组合,即可轻松实现自动波次塔防和动态补怪的单机刷怪玩法。

