检测特定地图内指定怪物数量的功能,常用于触发事件、控制刷怪、开启BOSS关卡。脚本核心命令是MAPMOVE配合CHECKMAPMON或CLEARMAPMON的变种使用,但需通过脚本循环实现精准计数。不同引擎命令略有差异。
一、LEGEND/GEE/GOM引擎:使用CHECKMONMAP命令
这类引擎有专用命令CHECKMONMAP,可检测指定地图内特定怪物的数量。
[@检测魔龙教主]
#if
;格式:CHECKMONMAP地图编号怪物名称控制符(<、>、=)数量
CHECKMONMAPD5151魔龙教主>0
#act
SENDMSG6当前地图[魔龙血域]存在魔龙教主。
#elseact
SENDMSG6当前地图没有魔龙教主,可以开启刷新。
更复杂的计数与事件触发脚本:
在NPC中实现检测并触发全服事件。
[@Main]
检测[赤月恶魔]数量,若少于2只则全图刷新。\\
<开始检测与刷新/@CheckBoss>\\
<关闭/@exit>
[@CheckBoss]
#act
;第一步:获取当前地图怪物数量,存入变量
GetMapMonCountD1001赤月恶魔<$STR(N1)>
;第二步:判断数量
MOVRN22
#if
largeN12
#act
SENDMSG6当前赤月巢穴已有<$STR(N1)>只赤月恶魔,无需刷新。
BREAK
#elseact
;数量不足,执行刷新
PARAM1D1001
PARAM2330
PARAM3330
MonGen赤月恶魔11
SENDMSG0【全服公告】赤月巢穴刷新了强大的赤月恶魔,勇士们前往挑战!1
二、HERO/Blue引擎:通过循环遍历检测
老版HERO引擎无直接检测命令,需用循环脚本模拟检测。
[@CountMonster]
#act
;初始化计数器
MOVN10
;遍历地图所有怪物
#CALL[\系统功能\怪物列表.txt]@怪物循环检测
SENDMSG6当前地图[<$MAP>]中,白野猪的数量为:<$STR(N1)>只。
;单独调用文件:\QuestDiary\系统功能\怪物列表.txt
[@怪物循环检测]
#IF
CHECKMAPMON<$MAP>白野猪
#ACT
INCN11
;此处可加入延时避免卡顿
DelayGoto1@怪物循环检测
优化方案:为防止无限循环卡死,可设置上限。
[@SafeCount]
#act
MOVN10
MOVS1白野猪
GOTO@CountLoop
[@CountLoop]
#if
CHECKMAPMON<$MAP><$STR(S1)>
#act
INCN11
GOTO@CountLoop
#elseact
;检测结束,使用变量N1
SENDMSG6计数完成,<$STR(S1)>总数:<$STR(N1)>
此方法会遍历地图所有怪物,地图怪物过多时可能造成短暂延迟,建议在凌晨或人数少时运行。
三、检测跨地图怪物数量(如全服BOSS)
需要遍历多个地图时,通过固定坐标或地图代码循环。
[@CheckAllMapBoss]
#act
;定义要检测的地图列表
MOVS1D5151D5152D5153
;定义要检测的怪物
MOVS2暗之牛魔王
MOVN100;总数清零
GOTO@LoopMaps
[@LoopMaps]
#IF
;分割地图代码
GetStringPos<$STR(S1)><$STR(P-99)>
#ACT
GetListString<$STR(S1)><$STR(P-99)>S3
;传送到该地图检测(隐身模式,不影响玩家)
MAPMOVE<$STR(S3)>
DelayCall1000@CheckThisMap
;此处需根据地图数量控制循环
INCP-991
GOTO@LoopMaps
[@CheckThisMap]
#IF
CHECKMONMAP<$MAP><$STR(S2)>>0
#ACT
;获取具体数量可在此扩展
INCN101
SendMsg6地图<$MAP>发现<$STR(S2)>。
此脚本为简化框架,实际应用需完善循环跳出机制。
四、结合机器人脚本定时检测
在RobotManage.txt或Robot.txt中设置定时任务,自动检测并公告。
;每小时检测一次祖玛教主数量
[@BossCheck]
#IF
HOUR14:00
#ACT
GetMapMonCountD1001祖玛教主N1
#if
largeN15
#act
SENDMSG0【BOSS预警】祖玛寺庙的祖玛教主数量过多,已达<$STR(N1)>只!1
五、实用案例:控制副本怪物总量
开服常用脚本,控制某地图怪物总数不超过上限,超出则不再刷怪。
[@CheckMonTotal]
;检测幻境十层所有怪物总数
#act
MOVN10
MOVS1白野猪
MOVS2祖玛教主
MOVS3虹魔教主
GOTO@CountOne
[@CountOne]
#IF
CHECKMAPMONH201<$STR(S1)>
#ACT
INCN11
GOTO@CountOne
#ELSEACT
GOTO@CountTwo
;...类似方法检测S2S3
[@CheckResult]
#if
largeN150
#act
;怪物过多,发送预警
SENDMSG6幻境十层怪物已满,停止刷怪。
;此处可加入停止刷怪的标志变量
MOVGLOBAL幻境刷怪0
六、调试与错误处理
1.变量冲突:检测脚本使用的临时变量(如N1、S1)需确认未被其他脚本占用。
2.地图代码:确保使用的地图标准代码与MapInfo.txt中一致。
3.怪物名称:怪物名称必须与数据库Monster.DB中的名称完全一致,包括空格。
4.性能注意:全图遍历检测不宜过于频繁,尤其在线人数多时,可能加重服务器负担。建议间隔时间不少于10分钟。
掌握地图怪物检测脚本,能实现更动态的游戏事件,如自动清理小怪、BOSS预警、副本动态平衡等,是高级开服的必备技能。
一、LEGEND/GEE/GOM引擎:使用CHECKMONMAP命令
这类引擎有专用命令CHECKMONMAP,可检测指定地图内特定怪物的数量。
[@检测魔龙教主]
#if
;格式:CHECKMONMAP地图编号怪物名称控制符(<、>、=)数量
CHECKMONMAPD5151魔龙教主>0
#act
SENDMSG6当前地图[魔龙血域]存在魔龙教主。
#elseact
SENDMSG6当前地图没有魔龙教主,可以开启刷新。
更复杂的计数与事件触发脚本:
在NPC中实现检测并触发全服事件。
[@Main]
检测[赤月恶魔]数量,若少于2只则全图刷新。\\
<开始检测与刷新/@CheckBoss>\\
<关闭/@exit>
[@CheckBoss]
#act
;第一步:获取当前地图怪物数量,存入变量
GetMapMonCountD1001赤月恶魔<$STR(N1)>
;第二步:判断数量
MOVRN22
#if
largeN12
#act
SENDMSG6当前赤月巢穴已有<$STR(N1)>只赤月恶魔,无需刷新。
BREAK
#elseact
;数量不足,执行刷新
PARAM1D1001
PARAM2330
PARAM3330
MonGen赤月恶魔11
SENDMSG0【全服公告】赤月巢穴刷新了强大的赤月恶魔,勇士们前往挑战!1
二、HERO/Blue引擎:通过循环遍历检测
老版HERO引擎无直接检测命令,需用循环脚本模拟检测。
[@CountMonster]
#act
;初始化计数器
MOVN10
;遍历地图所有怪物
#CALL[\系统功能\怪物列表.txt]@怪物循环检测
SENDMSG6当前地图[<$MAP>]中,白野猪的数量为:<$STR(N1)>只。
;单独调用文件:\QuestDiary\系统功能\怪物列表.txt
[@怪物循环检测]
#IF
CHECKMAPMON<$MAP>白野猪
#ACT
INCN11
;此处可加入延时避免卡顿
DelayGoto1@怪物循环检测
优化方案:为防止无限循环卡死,可设置上限。
[@SafeCount]
#act
MOVN10
MOVS1白野猪
GOTO@CountLoop
[@CountLoop]
#if
CHECKMAPMON<$MAP><$STR(S1)>
#act
INCN11
GOTO@CountLoop
#elseact
;检测结束,使用变量N1
SENDMSG6计数完成,<$STR(S1)>总数:<$STR(N1)>
此方法会遍历地图所有怪物,地图怪物过多时可能造成短暂延迟,建议在凌晨或人数少时运行。
三、检测跨地图怪物数量(如全服BOSS)
需要遍历多个地图时,通过固定坐标或地图代码循环。
[@CheckAllMapBoss]
#act
;定义要检测的地图列表
MOVS1D5151D5152D5153
;定义要检测的怪物
MOVS2暗之牛魔王
MOVN100;总数清零
GOTO@LoopMaps
[@LoopMaps]
#IF
;分割地图代码
GetStringPos<$STR(S1)><$STR(P-99)>
#ACT
GetListString<$STR(S1)><$STR(P-99)>S3
;传送到该地图检测(隐身模式,不影响玩家)
MAPMOVE<$STR(S3)>
DelayCall1000@CheckThisMap
;此处需根据地图数量控制循环
INCP-991
GOTO@LoopMaps
[@CheckThisMap]
#IF
CHECKMONMAP<$MAP><$STR(S2)>>0
#ACT
;获取具体数量可在此扩展
INCN101
SendMsg6地图<$MAP>发现<$STR(S2)>。
此脚本为简化框架,实际应用需完善循环跳出机制。
四、结合机器人脚本定时检测
在RobotManage.txt或Robot.txt中设置定时任务,自动检测并公告。
;每小时检测一次祖玛教主数量
[@BossCheck]
#IF
HOUR14:00
#ACT
GetMapMonCountD1001祖玛教主N1
#if
largeN15
#act
SENDMSG0【BOSS预警】祖玛寺庙的祖玛教主数量过多,已达<$STR(N1)>只!1
五、实用案例:控制副本怪物总量
开服常用脚本,控制某地图怪物总数不超过上限,超出则不再刷怪。
[@CheckMonTotal]
;检测幻境十层所有怪物总数
#act
MOVN10
MOVS1白野猪
MOVS2祖玛教主
MOVS3虹魔教主
GOTO@CountOne
[@CountOne]
#IF
CHECKMAPMONH201<$STR(S1)>
#ACT
INCN11
GOTO@CountOne
#ELSEACT
GOTO@CountTwo
;...类似方法检测S2S3
[@CheckResult]
#if
largeN150
#act
;怪物过多,发送预警
SENDMSG6幻境十层怪物已满,停止刷怪。
;此处可加入停止刷怪的标志变量
MOVGLOBAL幻境刷怪0
六、调试与错误处理
1.变量冲突:检测脚本使用的临时变量(如N1、S1)需确认未被其他脚本占用。
2.地图代码:确保使用的地图标准代码与MapInfo.txt中一致。
3.怪物名称:怪物名称必须与数据库Monster.DB中的名称完全一致,包括空格。
4.性能注意:全图遍历检测不宜过于频繁,尤其在线人数多时,可能加重服务器负担。建议间隔时间不少于10分钟。
掌握地图怪物检测脚本,能实现更动态的游戏事件,如自动清理小怪、BOSS预警、副本动态平衡等,是高级开服的必备技能。

