《传奇》服务端指定地图怪物数量检测脚本

来源: 作者: 点击:
检测特定地图内指定怪物数量的功能,常用于触发事件、控制刷怪、开启BOSS关卡。脚本核心命令是MAPMOVE配合CHECKMAPMON或CLEARMAPMON的变种使用,但需通过脚本循环实现精准计数。不同引擎命令略有差异。

一、LEGEND/GEE/GOM引擎:使用CHECKMONMAP命令

这类引擎有专用命令CHECKMONMAP,可检测指定地图内特定怪物的数量。
[@检测魔龙教主]
#if
; 格式:CHECKMONMAP 地图编号 怪物名称 控制符(<、>、=) 数量
CHECKMONMAP D5151 魔龙教主 > 0
#act
SENDMSG 6 当前地图[魔龙血域]存在魔龙教主。
#elseact
SENDMSG 6 当前地图没有魔龙教主,可以开启刷新。

更复杂的计数与事件触发脚本:
在NPC中实现检测并触发全服事件。
[@Main]
检测[赤月恶魔]数量,若少于2只则全图刷新。\ \
<开始检测与刷新/@CheckBoss> \ \
<关闭/@exit>

[@CheckBoss]
#act
; 第一步:获取当前地图怪物数量,存入变量
GetMapMonCount D1001 赤月恶魔 <$STR(N1)>
; 第二步:判断数量
MOVR N2 2
#if
large N1 2
#act
SENDMSG 6 当前赤月巢穴已有 <$STR(N1)> 只赤月恶魔,无需刷新。
BREAK
#elseact
; 数量不足,执行刷新
PARAM1 D1001
PARAM2 330
PARAM3 330
MonGen 赤月恶魔 1 1
SENDMSG 0 【全服公告】赤月巢穴刷新了强大的赤月恶魔,勇士们前往挑战! 1


二、HERO/Blue引擎:通过循环遍历检测

老版HERO引擎无直接检测命令,需用循环脚本模拟检测。
[@CountMonster]
#act
; 初始化计数器
MOV N1 0
; 遍历地图所有怪物
#CALL [\系统功能\怪物列表.txt] @怪物循环检测
SENDMSG 6 当前地图[<$MAP>]中,白野猪的数量为:<$STR(N1)>只。

; 单独调用文件:\QuestDiary\系统功能\怪物列表.txt
[@怪物循环检测]
#IF
CHECKMAPMON <$MAP> 白野猪
#ACT
INC N1 1
; 此处可加入延时避免卡顿
DelayGoto 1 @怪物循环检测

优化方案:为防止无限循环卡死,可设置上限。
[@SafeCount]
#act
MOV N1 0
MOV S1 白野猪
GOTO @CountLoop

[@CountLoop]
#if
CHECKMAPMON <$MAP> <$STR(S1)>
#act
INC N1 1
GOTO @CountLoop
#elseact
; 检测结束,使用变量N1
SENDMSG 6 计数完成,<$STR(S1)>总数:<$STR(N1)>

此方法会遍历地图所有怪物,地图怪物过多时可能造成短暂延迟,建议在凌晨或人数少时运行。

三、检测跨地图怪物数量(如全服BOSS)

需要遍历多个地图时,通过固定坐标或地图代码循环。
[@CheckAllMapBoss]
#act
; 定义要检测的地图列表
MOV S1 D5151,D5152,D5153
; 定义要检测的怪物
MOV S2 暗之牛魔王
MOV N10 0 ;总数清零
GOTO @LoopMaps

[@LoopMaps]
#IF
; 分割地图代码
GetStringPos <$STR(S1)> , <$STR(P-99)>
#ACT
GetListString <$STR(S1)> <$STR(P-99)> S3
; 传送到该地图检测(隐身模式,不影响玩家)
MAPMOVE <$STR(S3)>
DelayCall 1000 @CheckThisMap
; 此处需根据地图数量控制循环
INC P-99 1
GOTO @LoopMaps

[@CheckThisMap]
#IF
CHECKMONMAP <$MAP> <$STR(S2)> > 0
#ACT
; 获取具体数量可在此扩展
INC N10 1
SendMsg 6 地图 <$MAP> 发现 <$STR(S2)>。

此脚本为简化框架,实际应用需完善循环跳出机制。

四、结合机器人脚本定时检测

在RobotManage.txt或Robot.txt中设置定时任务,自动检测并公告。
; 每小时检测一次祖玛教主数量
[@BossCheck]
#IF
HOUR 14:00
#ACT
GetMapMonCount D1001 祖玛教主 N1
#if
large N1 5
#act
SENDMSG 0 【BOSS预警】祖玛寺庙的祖玛教主数量过多,已达 <$STR(N1)> 只! 1


五、实用案例:控制副本怪物总量

开服常用脚本,控制某地图怪物总数不超过上限,超出则不再刷怪。
[@CheckMonTotal]
; 检测幻境十层所有怪物总数
#act
MOV N1 0
MOV S1 白野猪
MOV S2 祖玛教主
MOV S3 虹魔教主
GOTO @CountOne

[@CountOne]
#IF
CHECKMAPMON H201 <$STR(S1)>
#ACT
INC N1 1
GOTO @CountOne
#ELSEACT
GOTO @CountTwo

; ... 类似方法检测S2, S3
[@CheckResult]
#if
large N1 50
#act
; 怪物过多,发送预警
SENDMSG 6 幻境十层怪物已满,停止刷怪。
; 此处可加入停止刷怪的标志变量
MOV GLOBAL 幻境刷怪 0


六、调试与错误处理

1. 变量冲突:检测脚本使用的临时变量(如N1、S1)需确认未被其他脚本占用。
2. 地图代码:确保使用的地图标准代码与MapInfo.txt中一致。
3. 怪物名称:怪物名称必须与数据库Monster.DB中的名称完全一致,包括空格。
4. 性能注意:全图遍历检测不宜过于频繁,尤其在线人数多时,可能加重服务器负担。建议间隔时间不少于10分钟。

掌握地图怪物检测脚本,能实现更动态的游戏事件,如自动清理小怪、BOSS预警、副本动态平衡等,是高级开服的必备技能。