独家闯关地图脚本教程:1人1层+限时30分钟+智能刷怪(附全套脚本)

来源: 作者: 点击:
玩家点击入口NPC → 检查是否有空闲层 → 分配最低空闲层 → 传送进图 + 启动计时器
进入后立即刷BOSS → 玩家杀怪 → 点击NPC进入下一层

离开当前层时:清除玩家变量 → 重置层状态为"空闲" → 准备迎接下一位玩家

新玩家进入 → 系统检测空闲层 → 自动刷新对应层BOSS

一、 文件部署位置(以GEE引擎为例)
NPC脚本: MirServer\Mir200\Envir\Market_Def\盟重省-闯关使者.txt (入口NPC)

地图触发脚本: MirServer\Mir200\Envir\MapQuest_Def\QManage.txt (全局管理定时器)

层地图参数: MirServer\Mir200\Envir\MapInfo.txt (设置地图限制参数)

刷怪文件: MirServer\Mir200\Envir\MonGen.txt (常规刷怪,但本方案主要用脚本刷)

二、 超详细脚本实现(GEE引擎语法)

📍 步骤1:定义闯关地图信息(MapInfo.txt)

[TDG001 第一层] SAFE DAY NORECALL NODEAL NORECONNECT(N) NOTALLOWUSEITEMS(回城卷|随机传送卷) INCGAMEPOINT(0/1) TIMELIMIT(30) NEEDHOLE
[TDG002 第二层] SAFE DAY NORECALL NODEAL NORECONNECT(N) ... TIMELIMIT(30) NEEDHOLE
... 同样格式定义第3层到第10层 TDG003-TDG010

关键参数解释:

NOTALLOWUSEITEMS(回城卷|随机传送卷):禁止使用逃跑道具

TIMELIMIT(30):限制本图最多停留30分钟

NEEDHOLE:必须通过洞口/NPC传送进出(配合脚本控制)

NORECONNECT(N):掉线重连不回地图(防止利用漏洞)

📍 步骤2:入口NPC脚本 (盟重省-闯关使者.txt)

[@Main]
if

act
显示闯关信息

SAY

<闯关使者/SCOLOR=249>:想挑战十重天关?\ \
每层仅限一人,限时30分钟!\ \
成功通关可获极品奖励!\ \
<我要挑战! / @EnterChallange >\ \
<排行榜 / @ShowRank>\

[@EnterChallange]
IF
检查玩家是否已在闯关系统中

CHECKVAR HUMAN IsInTDG = 1
ACT

MESSAGEBOX [失败] 您正在挑战中!请先完成当前层挑战!
BREAK

IF
尝试为玩家分配一个空闲层

GetAvailTDGLevel
ACT
分配成功(返回值在P0)

SETTING:
SETTING:
设置玩家所在层变量

SET HUMAN TDGLevel = <$STR(P0)>
SET HUMAN IsInTDG = 1
记录进入时间(单位:秒)

SET HUMAN TDGEnterTime = <$DATETIME>
传送玩家到对应层

MAPMOVE TDG0<$STR(P0)>
发送提示

SENDMSG 6 [系统] 你已进入第[<$STR(P0)>]层,限时30分钟!
ELSEACT
所有层都满了

MESSAGEBOX [失败] 所有关卡已满员!请稍后再试!
BREAK

;--- 查找最低空闲层函数 ---
[@GetAvailTDGLevel()]
ACT
初始化层号 P0 = 0 (未找到)

SET P0 0
循环检查1-10层状态

LoopSet P1 1 10 1
; 检测全局变量G101-G110(1-10层状态 0=空闲 1=占用)

CHECKVAR GLOBAL TDG_Status_<$STR(P1)> = 0
SET P0 <$STR(P1)> ; 找到空闲层,赋值给P0

将该层状态标记为占用

SET GLOBAL TDG_Status_<$STR(P1)> = 1
跳出循环

BREAK
}

返回P0(0表示无空闲,1-10表示层号)

RETURN P0

📍 步骤3:每层通关NPC (放在每层地图里,例如 TDG001-NPC.txt)

[@Main]
IF
检查玩家是否在本层(防止跨层点)

CHECKVAR HUMAN TDGLevel = 1 ; 注意:第2层就改成2,以此类推
SAY

<守关天将/SCOLOR=250>:击败本层BOSS方可前往下一关!\ \
<BOSS刷新状态:>{目前存活|/SCOLOR=254}\ \
<离开挑战/@Exit> | <下一关/@NextLevel>\

[@NextLevel]
IF
检查本层BOSS是否死亡(根据引擎不同,可以用变量控制)

CHECKVAR GLOBAL TDG1_BOSS_Alive = 0 ; 0=死亡
ACT
清除当前层变量

SET HUMAN TDGLevel = 0
关闭计时器

DELTIMER TDGTimer
设置玩家进入下一层状态

SET HUMAN IsInTDG = 1
SET HUMAN TDGLevel = 2 ; 进入第2层
SET HUMAN TDGEnterTime = <$DATETIME> ; 重置计时
标记本层为空闲状态

SET GLOBAL TDG_Status_1 = 0
传送至下一层

MAPMOVE TDG002
提示

SENDMSG 6 [系统] 你已进入第2层,限时重新计算!
ELSEACT

MESSAGEBOX [失败] BOSS尚未击败!
BREAK

[@Exit]
IF

ACT
调用公共退出函数(在QManage.txt里实现)

Gmexecute 退出闯关

📍 步骤4:全局管理触发(QManage.txt)

= 玩家进入任何闯关地图时触发刷怪 =

[@EnterMap]
IF
检查是否进入闯关地图(格式:TDG001 - TDG010)

ISONMAP TDG0
ACT
获取玩家所在层号(如1)

GetUserVar Human TDGLevel P0
立即刷出本层BOSS

PARAM1 TDG0<$STR(P0)> ; 地图名
PARAM2 本层BOSS名称 ; 替换为真实BOSS名
PARAM3 50 ; X坐标
PARAM4 50 ; Y坐标
PARAM4 1 ; 范围
PARAM5 1 ; 数量
MONGEN ; 关键刷怪命令
标记本层BOSS为存活状态(层号变量)

SET GLOBAL TDG<$STR(P0)>_BOSS_Alive = 1
启动玩家专属计时器

SETONTIMER 1 1 TDGTimer
= 关键限时与监控计时器 =

[@OnTimerTDGTimer]
if
检查玩家是否还在闯关地图中

ISONMAP TDG0
ACT
计算停留时间(秒)

GetUserVar Human TDGEnterTime P0
CALCULATION_TIME_PASSED: SET P1 = <DATETIME> - <STR(P0)>
检查是否超时(30*60=1800秒)

if

LARGE P1 1799
ACT
超时处理!踢回安全区

MESSAGEBOX [超时] 停留时间已到30分钟!
Gmexecute 退出闯关
BREAK
endif
= 统一退出闯关函数(重要!) =

[@Exit_Challenge]
ACT
获取玩家当前层

GetUserVar Human TDGLevel P0
如果层号有效(1-10),重置状态

if

RANGE <$STR(P0)> 1 10
ACT
清除玩家闯关标记

SET HUMAN IsInTDG = 0
SET HUMAN TDGLevel = 0
DELTIMER TDGTimer ; 关闭计时器
标记本层为空闲

SET GLOBAL TDG_Status_<$STR(P0)> = 0
传送回土城安全区

MAPMOVE 3 330 330
SENDMSG 6 [系统] 你已被传送回安全区!
特殊:如果玩家是正常通关下一层,此函数会被覆盖变量

此处仅处理异常退出(超时/主动离开)

ELSEACT
非闯关状态调用此函数则忽略

BREAK

📍 步骤5:BOSS死亡触发(MonItems目录下的BOSS配置)

路径:Mir200\Envir\MonItems\本层BOSS名称.txt

#IF

#ACT
重要!标记本层BOSS死亡

SET GLOBAL TDG1_BOSS_Alive = 0 ; 注意修改对应层号
SENDMSG 6 [全服] 第1层守关BOSS已被勇士击败!

三、 核心机制总结表
功能 实现方式 关键变量/命令

单层人数控制 全局变量G标记层状态(G101-G110) TDG_Status_X (X=层号)
限时30分钟 玩家变量记录进入时间 + OnTimer每秒检查 HUMAN TDGEnterTime + <$DATETIME>
动态刷怪 玩家进入地图事件 + MONGEN命令 @EnterMap + MONGEN
层状态重置 通关或退出时清除玩家层变量,重置G标记 SET GLOBAL TDG_Status_X=0
防作弊 地图参数禁用卷轴 + 掉线不回图 + NPC校验玩家所在层 NOTALLOWUSEITEMS + NORECONNECT(N)
BOSS状态跟踪 全局变量记录存活状态,死亡时更新 TDGX_BOSS_Alive

四、 脚本调试技巧
变量查看: 游戏中输入 @ViewGVar 查看全局变量,@ViewSVar 查看个人变量

实时测试:

// 强制进入第1层(测试用)
#ACT
SET HUMAN TDGLevel = 1
SET HUMAN IsInTDG = 1
MAPMOVE TDG001

常见错误排查:

BOSS不刷新: 检查@EnterMap是否触发,坐标是否有效

超时无效: 确认QManage.txt加载,<$DATETIME>是否正常返回秒数

层状态混乱: 用@ViewGVar查看G101-G110的值是否正常重置

NPC不响应: 检查NPC文件名是否与MapInfo.txt中地图名匹配

五、 最终效果模拟

玩家A点击入口NPC:
系统扫描G101-G110,发现G101=0(空闲)

传送A到第1层,同时:

设置 G101 = 1(占用)

刷新第1层BOSS

启动30分钟倒计时
A击败BOSS后点NPC进入第2层:

重置G101=0

刷新第2层BOSS(A专用)

重置A的计时器

此时玩家B点击NPC:
系统扫描发现G101=0(空闲)

传送B到第1层,立即刷新专属BOSS

两人独立闯关,互不干扰

投入运营前务必全流程测试10次以上!建议用测试账号模拟多人并发抢占资源池情况。