独家闯关地图脚本教程: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第一层]SAFEDAYNORECALLNODEALNORECONNECT(N)NOTALLOWUSEITEMS(回城卷|随机传送卷)INCGAMEPOINT(0/1)TIMELIMIT(30)NEEDHOLE
[TDG002第二层]SAFEDAYNORECALLNODEALNORECONNECT(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
检查玩家是否已在闯关系统中

CHECKVARHUMANIsInTDG=1
ACT

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

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

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

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

SETHUMANTDGLevel=<$STR(P0)>
SETHUMANIsInTDG=1
记录进入时间(单位:秒)

SETHUMANTDGEnterTime=<$DATETIME>
传送玩家到对应层

MAPMOVETDG0<$STR(P0)>
发送提示

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

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

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

SETP00
循环检查1-10层状态

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

CHECKVARGLOBALTDG_Status_<$STR(P1)>=0
SETP0<$STR(P1)>;找到空闲层,赋值给P0

将该层状态标记为占用

SETGLOBALTDG_Status_<$STR(P1)>=1
跳出循环

BREAK
}

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

RETURNP0

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

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

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

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

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

CHECKVARGLOBALTDG1_BOSS_Alive=0;0=死亡
ACT
清除当前层变量

SETHUMANTDGLevel=0
关闭计时器

DELTIMERTDGTimer
设置玩家进入下一层状态

SETHUMANIsInTDG=1
SETHUMANTDGLevel=2;进入第2层
SETHUMANTDGEnterTime=<$DATETIME>;重置计时
标记本层为空闲状态

SETGLOBALTDG_Status_1=0
传送至下一层

MAPMOVETDG002
提示

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

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

[@Exit]
IF

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

Gmexecute退出闯关

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

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

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

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

GetUserVarHumanTDGLevelP0
立即刷出本层BOSS

PARAM1TDG0<$STR(P0)>;地图名
PARAM2本层BOSS名称;替换为真实BOSS名
PARAM350;X坐标
PARAM450;Y坐标
PARAM41;范围
PARAM51;数量
MONGEN;关键刷怪命令
标记本层BOSS为存活状态(层号变量)

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

SETONTIMER11TDGTimer
=关键限时与监控计时器=

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

ISONMAPTDG0
ACT
计算停留时间(秒)

GetUserVarHumanTDGEnterTimeP0
CALCULATION_TIME_PASSED:SETP1=<DATETIME>-<STR(P0)>
检查是否超时(30*60=1800秒)

if

LARGEP11799
ACT
超时处理!踢回安全区

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

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

GetUserVarHumanTDGLevelP0
如果层号有效(1-10),重置状态

if

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

SETHUMANIsInTDG=0
SETHUMANTDGLevel=0
DELTIMERTDGTimer;关闭计时器
标记本层为空闲

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

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

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

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

BREAK

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

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

#IF

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

SETGLOBALTDG1_BOSS_Alive=0;注意修改对应层号
SENDMSG6[全服]第1层守关BOSS已被勇士击败!

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

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

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

实时测试:

//强制进入第1层(测试用)
#ACT
SETHUMANTDGLevel=1
SETHUMANIsInTDG=1
MAPMOVETDG001

常见错误排查:

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次以上!建议用测试账号模拟多人并发抢占资源池情况。
[顶部]