一、核心需求与准备工具
需求明确:10层闯关地图,每层仅限1人,共支持10人同时闯关;每层停留≤30分钟,超时返土城;玩家进入任意层自动刷对应BOSS。准备工具:DBC数据库(查地图/怪物ID)、脚本编辑器(HeroM2/GOM通用)、服务端目录下“MapInfo.txt”(确认10层地图ID,如101-110)。
二、全局控制脚本(核心触发)
先在全局脚本中设置触发规则,所有闯关相关逻辑均通过此入口关联,文件路径:Mir200\Envir\QManage.txt(全局NPC管理脚本)。添加以下代码,作用是检测玩家进入闯关地图的动作并触发后续规则:
#if
CheckMapID101-110//替换为你的10层闯关地图ID,用减号连接
#act
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@EnterCheck//调用专属控制脚本
#say
正在检测进入条件,请稍候...
三、分层脚本设置(按功能拆分)
在服务端新建专属脚本目录:Mir200\Envir\MapQuest\LevelMap,新建“LevelControl.txt”文件,写入以下三大模块脚本。
模块1:每层1人限制脚本(@EnterCheck触发)
核心逻辑:判断玩家当前进入的地图层,检测该层实时人数,超1人则拒绝进入,符合条件则放行并记录状态。
[@EnterCheck]
#IF
CheckMapUserCount<$CURRENTMAPID>>1//检测当前地图(玩家进入的层)人数
#ACT
MoveMap3333333//人数超限,返回土城(3为土城地图ID,333333为坐标,可改)
#SAY
当前层已有玩家闯关,请稍候再试!
#ELSEACT
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@TimeLimit//人数合规,触发时间限制
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@AutoSpawn//触发自动刷怪
#SAY
进入成功!每层限时30分钟,击败BOSS后找NPC进入下一层。
模块2:30分钟时间限制脚本(@TimeLimit触发)
作用:玩家进入地图后立即启动计时,30分钟到自动传回土城,同时清除该层占用状态。
[@TimeLimit]
#ACT
MapTimeLimit<$CURRENTMAPID>30//设置当前地图停留时限30分钟
BindMapEvent<$CURRENTMAPID>@TimeOut//绑定超时事件
#SAVEVARIntegerMapUser_<$CURRENTMAPID><$USERNAME>//记录当前层玩家,便于释放
[@TimeOut]
#ACT
MoveMap3333333//超时返回土城
ClearVarMapUser_<$CURRENTMAPID>//清除该层玩家记录,允许新玩家进入
#SAY
30分钟时间已到,自动为您返回安全区!
模块3:玩家进入自动刷怪脚本(@AutoSpawn触发)
根据玩家进入的地图层,自动刷对应BOSS,确保每个玩家进入时都有怪可打。需提前用DBC数据库查好10层BOSS的怪物ID(如1001-1010对应1-10层BOSS)。
[@AutoSpawn]
#IF
CheckMapID101//第一层地图ID
#ACT
MonGen10011100120//刷1只ID1001的BOSS,坐标100120(可改)
#SAY
第一层BOSS已刷新,击败后找NPC进入下一层!
#IF
CheckMapID102//第二层地图ID
#ACT
MonGen10021110130
#SAY
第二层BOSS已刷新,加油!
//以此类推,复制上述结构,将MapID改为103-110,怪物ID改为1003-1010,坐标按需调整
//第十层示例:
#IF
CheckMapID110//第十层地图ID
#ACT
MonGen10101150180
#SAY
最终BOSS已刷新,击败即可通关!
模块4:NPC进入下一层脚本(每层NPC通用)
每层NPC脚本控制玩家进入下一层,需判断玩家是否击败当前层BOSS。NPC脚本文件路径:Mir200\Envir\NPCGen.txt,找到对应层NPC(如“闯关指引官”),添加代码:
[@main]
#IF
CheckMonsterDie1001//检测当前层BOSS是否被击败(对应怪物ID)
CheckMapUserCount<$NEXTMAPID><=1//检测下一层人数($NEXTMAPID替换为下一层ID,如102)
#ACT
MoveMap<$NEXTMAPID>100120//传送至下一层
ClearVarMapUser_<$CURRENTMAPID>//释放当前层名额
#SAY
恭喜!即将进入下一层闯关。
#ELSEACT
#SAY
当前层BOSS未击败,或下一层已有玩家,请稍候!
四、脚本存放与生效步骤
1.全局触发脚本:直接写入Mir200\Envir\QManage.txt末尾,无需新建文件。
2.专属控制脚本:在Mir200\Envir\MapQuest下新建“LevelMap”文件夹,将“LevelControl.txt”放入其中。
3.NPC脚本:修改Mir200\Envir\NPCGen.txt中对应NPC的脚本内容,确保NPC已放置在各层地图中。
4.生效方式:保存所有脚本文件,关闭服务端后重新启动,进入游戏即可测试。
五、关键提醒
1.地图ID和怪物ID需从“MapInfo.txt”和DBC数据库的“Monster.DB”中查询,确保与脚本内ID一致,否则脚本失效。
2.坐标参数(如100120)需参考对应地图的安全区域,避免玩家传送后卡在障碍物中。
3.测试时先在单独的测试服操作,提前备份原始脚本文件,防止修改失误影响现有游戏数据。
需求明确:10层闯关地图,每层仅限1人,共支持10人同时闯关;每层停留≤30分钟,超时返土城;玩家进入任意层自动刷对应BOSS。准备工具:DBC数据库(查地图/怪物ID)、脚本编辑器(HeroM2/GOM通用)、服务端目录下“MapInfo.txt”(确认10层地图ID,如101-110)。
二、全局控制脚本(核心触发)
先在全局脚本中设置触发规则,所有闯关相关逻辑均通过此入口关联,文件路径:Mir200\Envir\QManage.txt(全局NPC管理脚本)。添加以下代码,作用是检测玩家进入闯关地图的动作并触发后续规则:
#if
CheckMapID101-110//替换为你的10层闯关地图ID,用减号连接
#act
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@EnterCheck//调用专属控制脚本
#say
正在检测进入条件,请稍候...
三、分层脚本设置(按功能拆分)
在服务端新建专属脚本目录:Mir200\Envir\MapQuest\LevelMap,新建“LevelControl.txt”文件,写入以下三大模块脚本。
模块1:每层1人限制脚本(@EnterCheck触发)
核心逻辑:判断玩家当前进入的地图层,检测该层实时人数,超1人则拒绝进入,符合条件则放行并记录状态。
[@EnterCheck]
#IF
CheckMapUserCount<$CURRENTMAPID>>1//检测当前地图(玩家进入的层)人数
#ACT
MoveMap3333333//人数超限,返回土城(3为土城地图ID,333333为坐标,可改)
#SAY
当前层已有玩家闯关,请稍候再试!
#ELSEACT
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@TimeLimit//人数合规,触发时间限制
CallFunction..\Envir\MapQuest\LevelMap\LevelControl.txt@AutoSpawn//触发自动刷怪
#SAY
进入成功!每层限时30分钟,击败BOSS后找NPC进入下一层。
模块2:30分钟时间限制脚本(@TimeLimit触发)
作用:玩家进入地图后立即启动计时,30分钟到自动传回土城,同时清除该层占用状态。
[@TimeLimit]
#ACT
MapTimeLimit<$CURRENTMAPID>30//设置当前地图停留时限30分钟
BindMapEvent<$CURRENTMAPID>@TimeOut//绑定超时事件
#SAVEVARIntegerMapUser_<$CURRENTMAPID><$USERNAME>//记录当前层玩家,便于释放
[@TimeOut]
#ACT
MoveMap3333333//超时返回土城
ClearVarMapUser_<$CURRENTMAPID>//清除该层玩家记录,允许新玩家进入
#SAY
30分钟时间已到,自动为您返回安全区!
模块3:玩家进入自动刷怪脚本(@AutoSpawn触发)
根据玩家进入的地图层,自动刷对应BOSS,确保每个玩家进入时都有怪可打。需提前用DBC数据库查好10层BOSS的怪物ID(如1001-1010对应1-10层BOSS)。
[@AutoSpawn]
#IF
CheckMapID101//第一层地图ID
#ACT
MonGen10011100120//刷1只ID1001的BOSS,坐标100120(可改)
#SAY
第一层BOSS已刷新,击败后找NPC进入下一层!
#IF
CheckMapID102//第二层地图ID
#ACT
MonGen10021110130
#SAY
第二层BOSS已刷新,加油!
//以此类推,复制上述结构,将MapID改为103-110,怪物ID改为1003-1010,坐标按需调整
//第十层示例:
#IF
CheckMapID110//第十层地图ID
#ACT
MonGen10101150180
#SAY
最终BOSS已刷新,击败即可通关!
模块4:NPC进入下一层脚本(每层NPC通用)
每层NPC脚本控制玩家进入下一层,需判断玩家是否击败当前层BOSS。NPC脚本文件路径:Mir200\Envir\NPCGen.txt,找到对应层NPC(如“闯关指引官”),添加代码:
[@main]
#IF
CheckMonsterDie1001//检测当前层BOSS是否被击败(对应怪物ID)
CheckMapUserCount<$NEXTMAPID><=1//检测下一层人数($NEXTMAPID替换为下一层ID,如102)
#ACT
MoveMap<$NEXTMAPID>100120//传送至下一层
ClearVarMapUser_<$CURRENTMAPID>//释放当前层名额
#SAY
恭喜!即将进入下一层闯关。
#ELSEACT
#SAY
当前层BOSS未击败,或下一层已有玩家,请稍候!
四、脚本存放与生效步骤
1.全局触发脚本:直接写入Mir200\Envir\QManage.txt末尾,无需新建文件。
2.专属控制脚本:在Mir200\Envir\MapQuest下新建“LevelMap”文件夹,将“LevelControl.txt”放入其中。
3.NPC脚本:修改Mir200\Envir\NPCGen.txt中对应NPC的脚本内容,确保NPC已放置在各层地图中。
4.生效方式:保存所有脚本文件,关闭服务端后重新启动,进入游戏即可测试。
五、关键提醒
1.地图ID和怪物ID需从“MapInfo.txt”和DBC数据库的“Monster.DB”中查询,确保与脚本内ID一致,否则脚本失效。
2.坐标参数(如100120)需参考对应地图的安全区域,避免玩家传送后卡在障碍物中。
3.测试时先在单独的测试服操作,提前备份原始脚本文件,防止修改失误影响现有游戏数据。

