传奇闯关地图脚本写法(人数+时间限制+分层刷怪)

来源: 作者: 点击:
一、核心逻辑与文件定位

本次闯关地图脚本核心需实现三大功能:每层单人限制(10层可10人同时闯关,分层独占)、单图层30分钟限时、玩家进入自动刷BOSS。适配Hero、GOM、GEE主流引擎,所有脚本均依托服务端Envir文件夹实现,无需额外插件,文件路径与基础语法统一。

核心文件及用途:1. 服务端\Mirserver\Mir200\Envir\Merchant.txt(配置闯关入口NPC及分层传送NPC位置);2. Envir\Market_def(存放所有NPC交互脚本,含入口验证、分层传送逻辑);3. Envir\QuestDiary(存放人数检测、时间计时、刷怪触发核心脚本);4. Envir\MapInfo.txt(辅助标记闯关地图属性,可选)。

基础语法:以#if(条件判断)、#act(执行动作)、#timer(定时器)、#var(变量控制)为核心,通过全局变量标记每层占用状态,计时器控制停留时间,玩家进入事件触发刷怪。

二、前期准备:地图与NPC基础配置

先完成地图编号规划、NPC位置配置,为后续脚本绑定打下基础,此步骤是脚本生效的前提。

1. 闯关地图编号规划

假设10层闯关地图代码依次为101(第一层)、102(第二层)……110(第十层),土城安全区地图代码为0。记录各层地图的出生坐标(建议每层统一设为300,300,便于脚本编写),后续传送脚本将沿用此坐标。

2. NPC配置(Merchant.txt文件)

打开Merchant.txt,添加两类NPC:闯关入口NPC(土城)、分层传送NPC(每层1个),格式如下,参数依次为“NPC名称 地图代码 X坐标 Y坐标 刷新范围 形象代码 刷新时间(0为永久)”:

(1)闯关入口NPC(土城):闯关使者 0 330 330 0 15 0

(2)分层传送NPC(每层1个,以1-3层为例,其余层按格式复制修改):

层传送使-1 101 300 305 0 16 0(第一层,对应地图101)

层传送使-2 102 300 305 0 16 0(第二层,对应地图102)

层传送使-3 103 300 305 0 16 0(第三层,对应地图103)

配置后保存文件,NPC将在对应地图永久刷新,后续脚本将分别绑定这些NPC。

三、核心脚本一:分层人数限制(每层单人独占)

通过全局变量标记每层占用状态(0=空闲,1=占用),玩家进入前检测变量状态,进入后设为占用,离开后重置为空闲,实现分层单人限制。

1. 闯关入口脚本(Market_def文件夹)

在Market_def文件夹新建文本文件,命名为“闯关使者-0”(名称与Merchant.txt入口NPC一致,后缀为土城地图代码0),编写入口验证与第一层传送逻辑:

(@main)
#say
欢迎挑战闯关地图,共10层,每层仅限1人!\“
进入第一层闯关/@enter1
退出/@exit

(@exit)
#say
祝你闯关顺利,如需挑战随时找我!

(@enter1)
#if
checkvar global map101_status 0 (检测第一层是否空闲,global为全局变量)
checklevel 30 (可添加等级门槛,按需调整)
#act
setvar global map101_status 1 (标记第一层为占用)
mapmove 101 300 300 (传送至第一层出生点)
setvar human challenge_map 101 (记录玩家当前闯关层数)
say 已进入第一层,限时30分钟,击杀BOSS后找传送使进下一层!
timer 1800 1 @timeout (设置30分钟=1800秒定时器,1为仅执行一次)
#elsesay
第一层已有人闯关,请等待对方离开或通关后再尝试!

文件存放路径:Envir\Market_def\闯关使者-0.txt

2. 分层传送脚本(Market_def文件夹)

为每层传送使新建脚本,以第一层传送使为例,新建“层传送使-1-101”(名称+层数+地图代码),编写击杀BOSS验证与下一层传送逻辑,同时重置当前层状态:

(@main)
#say
击杀本层BOSS后可进入下一层!\“
进入第二层/@enter2
放弃闯关/返回土城/@back

(@enter2)
#if
checkmonster 101 层1BOSS 0 0 (检测第一层BOSS是否已死亡,checkmonster为怪物检测命令)
checkvar global map102_status 0 (检测第二层是否空闲)
#act
setvar global map101_status 0 (重置第一层为空闲,允许其他玩家进入)
setvar global map102_status 1 (标记第二层为占用)
mapmove 102 300 300 (传送至第二层)
setvar human challenge_map 102 (更新玩家当前层数)
cleartimer @timeout (清除上一层定时器)
timer 1800 1 @timeout (重置30分钟定时器)
say 已进入第二层,继续加油!
#elsesay
请先击杀本层BOSS,再尝试进入下一层!

(@back)
#act
setvar global map101_status 0 (重置第一层为空闲)
mapmove 0 330 330 (传送回土城入口)
setvar human challenge_map 0 (清空当前闯关层数)
cleartimer @timeout (清除定时器)
say 已放弃闯关,返回土城!

其余层传送使脚本按此格式复制修改,仅需调整地图代码(102-110)、变量名称(map102_status-map110_status)、BOSS名称、传送目标即可。例如第二层传送使脚本命名为“层传送使-2-102.txt”,存放路径均为Envir\Market_def\。

第十层传送使脚本需修改终点逻辑,通关后重置所有变量,示例:

(@clear)
#act
setvar global map110_status 0
mapmove 0 330 330
addexp 1000000 (发放通关经验奖励)
give 高级装备 1 (发放通关物品奖励,替换为对应道具名称)
say 恭喜你通关10层!这是你的奖励!

四、核心脚本二:30分钟限时自动返回

通过定时器脚本检测玩家停留时间,超时后自动传送回土城,同时重置对应层数占用状态,避免层数长期锁定。

限时超时脚本(QuestDiary文件夹)

在Envir\QuestDiary文件夹新建“ChallengeTimeout.txt”,编写超时处理逻辑:

(@timeout)
#if
checkvar human challenge_map > 0 (检测玩家是否在闯关地图)
#act
setvar global map{$HUMAN(challenge_map)}_status 0 (重置当前层为空闲)
mapmove 0 330 330 (自动返回土城)
sendmsg 6 超时提醒:停留时间已超过30分钟,自动返回土城!(屏幕提示)
setvar human challenge_map 0 (清空闯关层数记录)
#elsesay
超时逻辑执行异常,请联系管理员!

文件存放路径:Envir\QuestDiary\ChallengeTimeout.txt

绑定脚本:Hero引擎需在QManage.txt中添加“@Include ChallengeTimeout.txt”;GOM/GEE引擎直接放入QuestDiary文件夹即可自动加载。

五、核心脚本三:玩家进入自动刷BOSS(击杀补刷)

实现“玩家进入层自动刷BOSS,上一玩家通关后,新玩家进入自动补刷”,通过玩家进入事件触发刷怪,BOSS死亡后不自动刷新,仅新玩家进入时刷新。

分层刷怪脚本(QuestDiary文件夹)

在QuestDiary文件夹新建“ChallengeSpawn.txt”,编写刷怪触发逻辑,按层数分别设置刷怪命令:

(@spawn1)
#if
checkmap 101 (检测当前地图为第一层)
checkmoncount 101 0 (检测地图内无怪物,避免重复刷怪)
#act
spawnmon 层1BOSS 1 300 310 101 (刷新1只层1BOSS,坐标在出生点附近,101为地图代码)
sendmsg 6 BOSS已刷新,请准备战斗!

(@spawn2)
#if
checkmap 102
checkmoncount 102 0
#act
spawnmon 层2BOSS 1 300 310 102
sendmsg 6 BOSS已刷新,请准备战斗!

文件存放路径:Envir\QuestDiary\ChallengeSpawn.txt

刷怪触发绑定

1. 入口触发:在闯关入口脚本(@enter1)的#act段落末尾添加“@spawn1”,玩家进入第一层时自动触发刷怪:

addfunc @spawn1 (添加刷怪函数调用)

2. 分层传送触发:在每层传送脚本(@enter2、@enter3……)的#act段落末尾,添加对应刷怪函数,例如第二层添加“addfunc @spawn2”,以此类推,确保玩家进入新层后自动刷对应BOSS。

六、脚本绑定与生效设置

1. 脚本绑定

(1)QuestDiary脚本绑定:Hero引擎打开Envir\QManage.txt,添加两行代码“@Include ChallengeTimeout.txt”“@Include ChallengeSpawn.txt”;GOM/GEE引擎无需手动绑定,将脚本放入QuestDiary文件夹即可自动加载。

(2)NPC脚本绑定:所有Market_def文件夹下的NPC脚本,无需额外绑定,保存后重载即可生效。

2. 重载生效

保存所有脚本文件后,在游戏内输入GM命令“@reloadnpc all”(重载NPC脚本)、“@reloadquest all”(重载QuestDiary脚本),无需重启服务端即可生效。

七、测试与异常排查

1. 测试流程

(1)人数限制测试:两个账号分别尝试进入第一层,验证第二个账号是否提示“已有人闯关”;第一个账号进入第二层后,第二个账号是否可正常进入第一层。

(2)时间限制测试:进入第一层后等待30分钟,验证是否自动返回土城,且第一层状态重置为空闲。

(3)刷怪测试:进入第一层验证BOSS是否自动刷新;击杀BOSS进入第二层后,新账号进入第一层,验证是否自动补刷BOSS。

2. 常见问题排查

(1)层数无法重置:检查脚本中“放弃闯关”“超时”“通关”逻辑是否都添加了“setvar global mapXXX_status 0”,确保所有离开场景都能重置状态。

(2)不自动刷怪:核实spawnmon命令中怪物名称与服务端MonItems.txt一致,地图代码、坐标正确;检查刷怪函数是否正确绑定到进入指令。

(3)超时不生效:确认定时器时间是否设为1800秒,cleartimer命令是否正确清除上一层定时器,避免多重定时器冲突。

八、通用补充技巧

1. BOSS名称统一:建议每层BOSS名称按“层XBOSS”命名,便于脚本编写与维护,确保checkmonster命令能精准检测。

2. 奖励调整:可在每层传送脚本、通关脚本中添加“give”(物品奖励)、“addexp”(经验奖励)命令,设置分层奖励与通关大奖。

3. 引擎适配:不同引擎命令略有差异,GEE引擎刷新怪物用“SPAWN”替代“spawnmon”,检测怪物用“GETMONCOUNT”替代“checkmoncount”,可查阅对应引擎手册调整。

4. 备份原则:所有脚本编写前,备份原Envir文件夹下的Merchant.txt、Market_def、QuestDiary文件,避免配置错误导致地图异常。