在传奇私人服务器里,想让玩家清完当前地图的所有怪物才能通过 NPC 进入下一张地图,关键是让脚本实时检测地图内的怪物数量。只要掌握 “判断怪物是否存在” 和 “触发地图传送” 两个核心逻辑,就能写出这样的脚本。下面就分步骤说明,最后附上完整示例。
如何让脚本判断地图内怪物是否清完?
首先要给目标地图设定 “怪物标签”,比如把沃玛寺庙一层的所有怪物(沃玛卫士、沃玛祭司等)都归为 “沃玛系怪物”。脚本里用 “CheckMonsterCount” 指令来检测这类怪物的数量,语法是 “CheckMonsterCount 地图号 怪物名称 数量”。
比如沃玛寺庙一层的地图号是 “3”,想检测是否还有沃玛系怪物,可以写:
#if
CheckMonsterCount 3 沃玛卫士 0 // 检查地图 3 中沃玛卫士的数量是否为 0
CheckMonsterCount 3 沃玛祭司 0 // 检查地图 3 中沃玛祭司的数量是否为 0
CheckMonsterCount 3 沃玛战士 0 // 检查地图 3 中沃玛战士的数量是否为 0
#ACT
// 所有怪物都清完后执行的操作
这里的 “0” 代表数量为 0,只有当这三个条件同时满足(三种怪物都被清完),脚本才会执行下一步。如果地图里还有其他怪物,需要继续添加 “CheckMonsterCount” 语句,确保不遗漏任何一种。
如果想简化检测(比如不区分怪物类型,只要地图内无任何怪物即可),可以用 “CheckMonsterCount 3 * 0”,其中 “*” 代表所有怪物。这种方法适合怪物种类多的地图,但要注意排除 NPC(比如药店老板),避免误判。
如何让 NPC 关联清怪条件并传送地图?
需要给传送 NPC 绑定对话脚本,当玩家点击 NPC 时,先触发清怪检测,满足条件才允许传送。以 “沃玛守卫” 这个 NPC 为例,他的对话脚本可以这样设计:
[@沃玛守卫]
#say
你清完这层的沃玛怪物了吗?清完才能去下一层。
< 是的,我已经清完了 /@CheckClear> // 玩家点击这个选项触发检测
[@CheckClear]
#if
CheckMonsterCount 3 * 0 // 检测地图 3(当前地图)是否无任何怪物
#ACT
MapMove 4 300 300 // 传送到地图 4(沃玛寺庙二层)的 300,300 坐标
SENDMSG 1 恭喜你清完所有怪物,进入沃玛寺庙二层!
#elseact
MESSAGEBOX 地图内还有怪物没清完,请先清理干净!
这里的 “@CheckClear” 是玩家点击选项后触发的检测标签,“MapMove” 是传送指令,后面的数字分别是目标地图号和坐标。如果清怪条件不满足,就弹出提示框让玩家继续清怪。
如何处理特殊情况(比如怪物刷新)?
如果地图会自动刷新怪物,需要在脚本里加 “禁止刷新” 的设置,避免玩家清完后又刷出新怪导致无法传送。在地图配置文件(比如 “MapInfo.txt”)里找到对应地图,添加 “RefreshMonster=0”(0 代表禁止刷新)。
如果想让玩家离开地图后重新进入时,怪物重新刷新,可以在 “MapInfo.txt” 里加 “ResetMonster=1”,意思是 “玩家离开后重置怪物状态”。这样玩家中途退出再进来,需要重新清怪才能触发传送。
另外,要防止玩家用 “随机传送卷” 跳过清怪,脚本里可以加 “CheckItem 随机传送卷 0”(检查玩家是否有随机卷),如果有就禁止对话:
#if
CheckItem 随机传送卷 > 0
#say
请先扔掉随机传送卷,才能和我对话!
#else
#say
你清完这层的沃玛怪物了吗?清完才能去下一层。
<是的,我已经清完了 /@CheckClear>
完整脚本示例:沃玛寺庙一层到二层的传送
假设沃玛寺庙一层(地图号 3)的传送 NPC 是 “沃玛守卫”,坐标 250,250,目标地图是沃玛寺庙二层(地图号 4),具体脚本如下:
// 文件名:沃玛守卫.txt(放在 Envir\QuestDiary\NPC 目录下)
[@Main]
#say
这层的沃玛怪物十分凶猛,不清理干净会威胁后面的探险者。
清完所有怪物后可以找我去下一层。
< 我已清完所有怪物 /@CheckMonster>
[@CheckMonster]
#if
CheckMonsterCount 3 沃玛卫士 0
CheckMonsterCount 3 沃玛祭司 0
CheckMonsterCount 3 沃玛战士 0
CheckMonsterCount 3 沃玛教主 0 // 包含 BOSS 在内的所有怪物
#ACT
MapMove 4 300 300
SENDMSG 1 沃玛守卫:不错,跟我来下一层吧!
#elseact
MESSAGEBOX 检测到地图内还有沃玛怪物,请继续清理!
// 同时在 MapInfo.txt 里添加(控制地图刷新)
[3 沃玛寺庙一层]
RefreshMonster=0 // 禁止自动刷新怪物
ResetMonster=1 // 玩家离开后重置怪物
这个脚本的流程是:玩家点击沃玛守卫→触发清怪检测→所有怪物数量为 0→传送至下一层;如果有怪物残留→提示继续清理。
设置这类脚本的关键,是准确列出当前地图的所有怪物名称,确保检测无遗漏。可以先在游戏里刷一遍地图,记下所有怪物的名字(包括小怪物和 BOSS),再对应写到 “CheckMonsterCount” 语句里。测试时可以故意留一只小怪,看是否会被脚本检测到;清完后再点击 NPC,确认能顺利传送。这样既能引导玩家按顺序探索地图,又能增加游戏的挑战性,让进入下一张地图更有成就感。

