暗影神殿为单人限时副本,玩家通过NPC进入副本地图,副本内定时刷新怪物,清理全部怪物判定通关,发放通关奖励,超时自动传送出地图,脚本仅适配HERO引擎,修改前备份Mir200内NPC脚本、QFunction-0.txt以及MapInfo地图配置文件,防止语法错误造成M2加载异常。
首先配置MapInfo.txt地图条目,新增暗影神殿地图,设置地图编号与地图文件,设置禁止随机传送、禁止回城,地图内关闭离线挂机。示例:
[暗影神殿0150]
MAPNAME=暗影神殿
NORECALL=1
NORANDOMMOVE=1
NOHERECALL=1
NOOFFLINE=1
NPC入口脚本,新建暗影神殿使者NPC,主对话包含副本介绍、进入副本、副本规则查询。副本限制单人进入,检测玩家是否已经在副本内,检测背包空位,检测等级、金币或门票道具,满足条件才可开启副本实例。
[@main]
#ACT
MESSAGE【暗影神殿】单人挑战副本
MESSAGE<$COLOR=250>1.进入暗影神殿【消耗暗影门票*1】</$COLOR>
MESSAGE<$COLOR=250>2.\(COLOR=250>2.副本规则说明</\)</$COLOR>
#SACT
#CHOOSE
1@EnterDarkTemple
2@ShowRule
[@ShowRule]
#ACT
MESSAGE暗影神殿规则:
MESSAGE1.单人副本,限时10分钟
MESSAGE2.击杀全部暗影怪物即可通关领取奖励
MESSAGE3.超时未通关将被自动传出地图
MESSAGE4.副本内无法使用回城、随机传送
BREAK
[@EnterDarkTemple]
#ACT
#IF
ISINMAP0150
#ACT
SENDMSG6你已经在暗影神殿副本中,请勿重复进入。
BREAK
#ELSEACT
CHECKHAVEITEM暗影门票1
#IF
CHECKBAGSPACE2
#ACT
TAKEHAVEITEM暗影门票1
MOVS0<$USERNAME>
MOVS10
;传送玩家进入暗影神殿地图
MAPMOVE01505050
SENDMSG6你已进入暗影神殿,限时10分钟,消灭所有暗影怪物完成挑战!
;注册副本倒计时定时器
SETTIMERDarkTempleTimer_<$USERNAME>0100
;调用怪物刷新标签
CALL@SpawnDarkMonster
#ELSEACT
SENDMSG6缺少暗影门票或背包空位不足。
BREAK
[@SpawnDarkMonster]
#ACT
;在副本坐标批量刷新暗影系列怪物
SPAWNMONSTER暗影卫士015045455
SPAWNMONSTER暗影法师015055453
SPAWNMONSTER暗影教主015050551
SENDMSG0#R暗影怪物已全部降临,尽快击杀!
BREAK
QFunction-0.txt配套副本核心逻辑,包含定时器超时踢出、怪物死亡检测、通关判断。
[@TimerDarkTempleTimer_<$\(USERNAME>]
#ACT
#IF
ISINMAP0150
#ACT
MAPMOVE<\)$USERNAME>3330330
SENDMSG6暗影神殿挑战超时,已传送返回安全区。
;清除定时器
CLEARTIMERDarkTempleTimer_<$\(USERNAME>
#ELSEACT
CLEARTIMERDarkTempleTimer_<\)$USERNAME>
BREAK
[@OnKillMon]
#ACT
#IF
ISINMAP0150
#ACT
GETMONSTERCOUNT0150<$\(STR(S0)>
#IF
<\)$STR(S0)><=0
#ACT
SENDMSG6暗影神殿所有怪物已清除,挑战通关!
;发放通关奖励
ADDITEM暗影宝箱1
ADDGOLD1000000
SENDMSG0#G玩家【<$USERNAME>\(USERNAME>】通关暗影神殿!
CLEARTIMERDarkTempleTimer_<\)
CLEARTIMERDarkTempleTimer_<$USERNAME>
;延时3秒后传出地图
SETTIMERDarkTempleExit_<$USERNAME>003
#ELSEACT
BREAK
[@TimerDarkTempleExit_<$\(USERNAME>]
#ACT
#IF
ISINMAP0150
#ACT
MAPMOVE<\)$USERNAME>3330330
SENDMSG6副本通关,即将离开暗影神殿。
CLEARTIMERDarkTempleExit_<$\(USERNAME>
#ELSEACT
CLEARTIMERDarkTempleExit_<\)$USERNAME>
BREAK
副本进出防护,增加玩家主动离开副本检测,[@OnLeaveMap]标签判断离开0150地图,清除对应副本定时器,防止定时器残留。
[@OnLeaveMap]
#ACT
#IF
<$\(MAPNAME>=暗影神殿
#ACT
CLEARTIMERDarkTempleTimer_<\)$USERNAME>
CLEARTIMERDarkTempleExit_<$USERNAME>
SENDMSG6你离开了暗影神殿副本,挑战终止。
BREAK
怪物与道具DB配置,StdItems.DB录入暗影门票、暗影宝箱,暗影门票Stdmode设置31支持NPC检测,暗影宝箱设置为可双击开启道具。Monsters.DB录入暗影卫士、暗影法师、暗影教主,配置血量、攻防、爆率,MonGen.txt不要配置暗影神殿怪物定时刷新,副本怪物由脚本SPAWNMONSTER动态创建,避免地图常驻怪物。
副本限制扩展,可增加每日进入次数限制,使用人物持久变量DarkTempleDayCount记录当日进入次数,每日零点定时器重置次数。进入副本前增加判断,次数达到上限禁止进入。也可增加等级限制,低于指定等级无法开启副本。
每日次数检测示例,追加到@EnterDarkTemple开头:
GETVARHUMANDarkTempleDayCount<$\(STR(S0)>
#IF
<\)$STR(S0)>>=3
#ACT
SENDMSG6今日暗影神殿进入次数已用完,明日再来。
BREAK
性能与异常处理,HERO引擎定时器以角色名作为定时器后缀,保证每个玩家副本计时独立,不会互相干扰。玩家掉线、小退,再次上线检测地图,如在副本内可继续挑战,也可增加上线踢出副本逻辑。大量玩家同时进入副本时,SPAWNMONSTER批量刷怪会短暂占用CPU,控制单次副本怪物数量。
常见故障排查,进入副本怪物不刷新,核对SPAWNMONSTER地图编号、坐标,怪物名称与Monsters.DB完全一致。怪物全部击杀无法通关,GETMONSTERCOUNT读取地图怪物数量,确认没有残留小怪,召唤物、英雄分身会计入怪物数量,需要过滤。超时没有传出玩家,检查定时器命名,HERO引擎角色名动态定时器语法,M2全局定时器事件需要开启。玩家多次刷副本,次数不重置,新增每日零点全局定时器,批量SETVARHUMANDarkTempleDayCount0重置次数。
安全控制,副本地图设置禁止召唤英雄、禁止组队,防止多人进入单人副本。在MapInfo关闭组队传送,脚本增加组队检测,队伍人数大于1禁止开启副本。
部署步骤,配置MapInfo地图信息,录入暗影门票、暗影宝箱、暗影系列怪物DB数据,添加NPC脚本,将QFunction片段粘贴到QFunction-0.txt,保存所有文件,重载M2脚本。单机测试,刷暗影门票进入副本,击杀怪物验证通关奖励,测试超时踢出、中途离开副本等场景,调试完成删除调试SENDMSG语句。
可选拓展,增加副本难度选择,普通、困难模式,不同难度怪物血量、奖励不同;增加副本内专属BUFF,进入地图自动附加攻击提升,离开地图移除BUFF;增加副本排行榜,记录通关耗时,存入名人堂脚本。
首先配置MapInfo.txt地图条目,新增暗影神殿地图,设置地图编号与地图文件,设置禁止随机传送、禁止回城,地图内关闭离线挂机。示例:
[暗影神殿0150]
MAPNAME=暗影神殿
NORECALL=1
NORANDOMMOVE=1
NOHERECALL=1
NOOFFLINE=1
NPC入口脚本,新建暗影神殿使者NPC,主对话包含副本介绍、进入副本、副本规则查询。副本限制单人进入,检测玩家是否已经在副本内,检测背包空位,检测等级、金币或门票道具,满足条件才可开启副本实例。
[@main]
#ACT
MESSAGE【暗影神殿】单人挑战副本
MESSAGE<$COLOR=250>1.进入暗影神殿【消耗暗影门票*1】</$COLOR>
MESSAGE<$COLOR=250>2.\(COLOR=250>2.副本规则说明</\)</$COLOR>
#SACT
#CHOOSE
1@EnterDarkTemple
2@ShowRule
[@ShowRule]
#ACT
MESSAGE暗影神殿规则:
MESSAGE1.单人副本,限时10分钟
MESSAGE2.击杀全部暗影怪物即可通关领取奖励
MESSAGE3.超时未通关将被自动传出地图
MESSAGE4.副本内无法使用回城、随机传送
BREAK
[@EnterDarkTemple]
#ACT
#IF
ISINMAP0150
#ACT
SENDMSG6你已经在暗影神殿副本中,请勿重复进入。
BREAK
#ELSEACT
CHECKHAVEITEM暗影门票1
#IF
CHECKBAGSPACE2
#ACT
TAKEHAVEITEM暗影门票1
MOVS0<$USERNAME>
MOVS10
;传送玩家进入暗影神殿地图
MAPMOVE01505050
SENDMSG6你已进入暗影神殿,限时10分钟,消灭所有暗影怪物完成挑战!
;注册副本倒计时定时器
SETTIMERDarkTempleTimer_<$USERNAME>0100
;调用怪物刷新标签
CALL@SpawnDarkMonster
#ELSEACT
SENDMSG6缺少暗影门票或背包空位不足。
BREAK
[@SpawnDarkMonster]
#ACT
;在副本坐标批量刷新暗影系列怪物
SPAWNMONSTER暗影卫士015045455
SPAWNMONSTER暗影法师015055453
SPAWNMONSTER暗影教主015050551
SENDMSG0#R暗影怪物已全部降临,尽快击杀!
BREAK
QFunction-0.txt配套副本核心逻辑,包含定时器超时踢出、怪物死亡检测、通关判断。
[@TimerDarkTempleTimer_<$\(USERNAME>]
#ACT
#IF
ISINMAP0150
#ACT
MAPMOVE<\)$USERNAME>3330330
SENDMSG6暗影神殿挑战超时,已传送返回安全区。
;清除定时器
CLEARTIMERDarkTempleTimer_<$\(USERNAME>
#ELSEACT
CLEARTIMERDarkTempleTimer_<\)$USERNAME>
BREAK
[@OnKillMon]
#ACT
#IF
ISINMAP0150
#ACT
GETMONSTERCOUNT0150<$\(STR(S0)>
#IF
<\)$STR(S0)><=0
#ACT
SENDMSG6暗影神殿所有怪物已清除,挑战通关!
;发放通关奖励
ADDITEM暗影宝箱1
ADDGOLD1000000
SENDMSG0#G玩家【<$USERNAME>\(USERNAME>】通关暗影神殿!
CLEARTIMERDarkTempleTimer_<\)
CLEARTIMERDarkTempleTimer_<$USERNAME>
;延时3秒后传出地图
SETTIMERDarkTempleExit_<$USERNAME>003
#ELSEACT
BREAK
[@TimerDarkTempleExit_<$\(USERNAME>]
#ACT
#IF
ISINMAP0150
#ACT
MAPMOVE<\)$USERNAME>3330330
SENDMSG6副本通关,即将离开暗影神殿。
CLEARTIMERDarkTempleExit_<$\(USERNAME>
#ELSEACT
CLEARTIMERDarkTempleExit_<\)$USERNAME>
BREAK
副本进出防护,增加玩家主动离开副本检测,[@OnLeaveMap]标签判断离开0150地图,清除对应副本定时器,防止定时器残留。
[@OnLeaveMap]
#ACT
#IF
<$\(MAPNAME>=暗影神殿
#ACT
CLEARTIMERDarkTempleTimer_<\)$USERNAME>
CLEARTIMERDarkTempleExit_<$USERNAME>
SENDMSG6你离开了暗影神殿副本,挑战终止。
BREAK
怪物与道具DB配置,StdItems.DB录入暗影门票、暗影宝箱,暗影门票Stdmode设置31支持NPC检测,暗影宝箱设置为可双击开启道具。Monsters.DB录入暗影卫士、暗影法师、暗影教主,配置血量、攻防、爆率,MonGen.txt不要配置暗影神殿怪物定时刷新,副本怪物由脚本SPAWNMONSTER动态创建,避免地图常驻怪物。
副本限制扩展,可增加每日进入次数限制,使用人物持久变量DarkTempleDayCount记录当日进入次数,每日零点定时器重置次数。进入副本前增加判断,次数达到上限禁止进入。也可增加等级限制,低于指定等级无法开启副本。
每日次数检测示例,追加到@EnterDarkTemple开头:
GETVARHUMANDarkTempleDayCount<$\(STR(S0)>
#IF
<\)$STR(S0)>>=3
#ACT
SENDMSG6今日暗影神殿进入次数已用完,明日再来。
BREAK
性能与异常处理,HERO引擎定时器以角色名作为定时器后缀,保证每个玩家副本计时独立,不会互相干扰。玩家掉线、小退,再次上线检测地图,如在副本内可继续挑战,也可增加上线踢出副本逻辑。大量玩家同时进入副本时,SPAWNMONSTER批量刷怪会短暂占用CPU,控制单次副本怪物数量。
常见故障排查,进入副本怪物不刷新,核对SPAWNMONSTER地图编号、坐标,怪物名称与Monsters.DB完全一致。怪物全部击杀无法通关,GETMONSTERCOUNT读取地图怪物数量,确认没有残留小怪,召唤物、英雄分身会计入怪物数量,需要过滤。超时没有传出玩家,检查定时器命名,HERO引擎角色名动态定时器语法,M2全局定时器事件需要开启。玩家多次刷副本,次数不重置,新增每日零点全局定时器,批量SETVARHUMANDarkTempleDayCount0重置次数。
安全控制,副本地图设置禁止召唤英雄、禁止组队,防止多人进入单人副本。在MapInfo关闭组队传送,脚本增加组队检测,队伍人数大于1禁止开启副本。
部署步骤,配置MapInfo地图信息,录入暗影门票、暗影宝箱、暗影系列怪物DB数据,添加NPC脚本,将QFunction片段粘贴到QFunction-0.txt,保存所有文件,重载M2脚本。单机测试,刷暗影门票进入副本,击杀怪物验证通关奖励,测试超时踢出、中途离开副本等场景,调试完成删除调试SENDMSG语句。
可选拓展,增加副本难度选择,普通、困难模式,不同难度怪物血量、奖励不同;增加副本内专属BUFF,进入地图自动附加攻击提升,离开地图移除BUFF;增加副本排行榜,记录通关耗时,存入名人堂脚本。

