HEROM2传奇自助刷怪脚本添加怪物判断检查:CHECKMONMAP、GetMonsterCount与防卡怪循环

来源: 作者: 点击:
HEROM2引擎里做自助刷怪,不能只写传送和刷怪命令,必须加入怪物判断检查,否则玩家容易卡在无怪地图,或者反复刷怪导致怪物堆积。怪物判断通常分三类:检测当前地图怪物数量、检测指定地图怪物数量、检测目标怪物是否已清空。下面按HEROM2常用写法给出可直接参考的脚本示例。

NPC主入口

[@main]
IF
SAY
\
选择地图后将自动检测怪物数量。\
怪物不足时会重新刷新。\
\
\
\
\
<关闭/@exit>

进入地图前先检测怪物数量

[@go1]
IF
CHECKMONMAP 3 10
ACT
MAPMOVE 蜈蚣洞 150 150
SENDMSG 6 地图内怪物充足,已进入刷怪点。
ELSEACT
CALL [@RefMon1]

这里CHECKMONMAP 3 10表示检测地图3内怪物数量是否达到10只以上。地图编号需要按实际版本替换,不能直接照搬。

怪物不足时补刷

[@RefMon1]
IF
ACT
MonGen 蜈蚣 20 1
MonGen 蝎子 15 1
SENDMSG 6 地图怪物不足,已补充刷新。
DELAYGOTO 2000 @GoMap1

[@GoMap1]
IF
ACT
MAPMOVE 蜈蚣洞 150 150

MonGen用于临时补充怪物,格式通常为“怪物名称 数量 刷新时间”。如果版本使用MonGen.txt固定刷怪,也可以不写MonGen,只提示玩家等待自然刷新。

指定地图怪物判断

如果玩家不在目标地图,就不能用当前地图检测,需要改用指定地图检测。

[@status]
IF
CHECKMONMAP 3 0
ACT
SENDMSG 6 蜈蚣洞当前无怪物。
ELSEACT
SENDMSG 6 蜈蚣洞仍有怪物存在。

CHECKMONMAP 3 0表示地图3内怪物数量为0。这个判断适合放在NPC里,让玩家进入前查看地图状态。

清空地图后触发变量

如果刷怪活动要求“清空地图后发奖励”,可以用怪物死亡事件配合数量检测。HEROM2里可参考GetMonsterCount判断指定地图剩余怪物数量。

[@MonsterDie]
IF
MapEqual 3
GetMonsterCount 3 0
ACT
SET [100] 1
SENDMSG 6 地图怪物已全部清空。
BREAK

MapEqual 3表示当前事件发生在地图3。GetMonsterCount 3 0表示检测地图3内所有怪物数量为0。这里需要确认当前HEROM2版本是否在QFunction或事件脚本中支持[@MonsterDie],不支持时要改用定时器轮询。

定时器轮询检测

如果引擎不支持怪物死亡事件,可以用定时器定时检测。

[@OnTimer]
IF
ISONMAP 3
GetMonsterCount 3 0
ACT
SET [100] 1
SENDMSG 6 地图怪物已清空。
BREAK

定时器检测要注意间隔,避免频繁执行影响性能。检测完成后应关闭或重置定时器,防止重复触发。

防卡怪循环

自助刷怪脚本常见问题是玩家进入地图后没有怪物。可以加入循环检测。

[@CheckMonLoop]
IF
CHECKMONMAP 3 5
ACT
SENDMSG 6 当前地图怪物充足。
BREAK
ELSEACT
MonGen 蜈蚣 10 1
DELAYGOTO 3000 @CheckMonLoop

这里每3秒检测一次,如果怪物不足5只就补充刷新。实际使用时要限制循环次数,避免无限刷怪。

[@CheckMonLoop]
IF
SMALL P0 10
ACT
INC P0 1
CHECKMONMAP 3 5
CALL [@MonOK]
ELSEACT
SENDMSG 6 多次刷新后仍无怪物,请稍后再试。
BREAK

[@MonOK]
IF
CHECKMONMAP 3 5
ACT
SENDMSG 6 怪物已刷新完成。
ELSEACT
MonGen 蜈蚣 10 1
DELAYGOTO 3000 @CheckMonLoop

P0用于记录循环次数,防止无限执行。

多地图判断示例

如果有多个刷怪地图,可以分别检测。

[@go2]
IF
CHECKMONMAP 5 8
ACT
MAPMOVE 祖玛寺庙 200 200
SENDMSG 6 祖玛寺庙怪物充足。
ELSEACT
MonGen 祖玛卫士 10 1
MonGen 祖玛弓箭手 10 1
DELAYGOTO 2000 @GoMap2

[@GoMap2]
IF
ACT
MAPMOVE 祖玛寺庙 200 200

不同地图要使用不同地图编号和不同怪物组合,不能共用同一组MonGen。

背包与等级限制

自助刷怪通常需要加入进入条件。

[@go1]
IF
CHECKLEVEL 30
CHECKBAGSPACE 1
CHECKMONMAP 3 10
ACT
MAPMOVE 蜈蚣洞 150 150
SENDMSG 6 已进入刷怪地图。
ELSESAY

变量规划

P0:循环检测次数。
[100]:地图清空标记。
地图编号:按实际版本从M2地图管理中查询。

CHECKMONMAP适合快速判断指定地图怪物数量。GetMonsterCount适合事件触发时精确判断剩余怪物。MonGen适合临时补刷,但不建议长期替代MonGen.txt固定刷怪配置。

常见问题排查

进入地图后没有怪物,先确认地图编号是否正确。CHECKMONMAP始终判断为有怪,检查数量阈值是否过低。GetMonsterCount不触发,确认事件标签是否被当前引擎支持。MonGen不生效,检查怪物名称是否与数据库一致。循环刷怪过多,必须加入次数限制和延迟。