传奇HERO引擎暗影神殿副本完整脚本 地图准入、怪物刷新、通关判定与奖励发放实现方案

来源: 作者: 点击:
暗影神殿为单人限时副本,玩家通过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 暗影神殿规则:
MESSAGE 1.单人副本,限时10分钟
MESSAGE 2.击杀全部暗影怪物即可通关领取奖励
MESSAGE 3.超时未通关将被自动传出地图
MESSAGE 4.副本内无法使用回城、随机传送
BREAK

[@EnterDarkTemple]
#ACT
#IF
ISINMAP 0150
#ACT
SENDMSG 6 你已经在暗影神殿副本中,请勿重复进入。
BREAK
#ELSEACT
CHECKHAVEITEM 暗影门票 1
#IF
CHECKBAGSPACE 2
#ACT
TAKEHAVEITEM 暗影门票 1
MOV S0 <$USERNAME>
MOV S1 0
;传送玩家进入暗影神殿地图
MAPMOVE 0150 50 50
SENDMSG 6 你已进入暗影神殿,限时10分钟,消灭所有暗影怪物完成挑战!
;注册副本倒计时定时器
SETTIMER DarkTempleTimer_<$USERNAME> 0 10 0
;调用怪物刷新标签
CALL @SpawnDarkMonster
#ELSEACT
SENDMSG 6 缺少暗影门票或背包空位不足。
BREAK

[@SpawnDarkMonster]
#ACT
;在副本坐标批量刷新暗影系列怪物
SPAWNMONSTER 暗影卫士 0150 45 45 5
SPAWNMONSTER 暗影法师 0150 55 45 3
SPAWNMONSTER 暗影教主 0150 50 55 1
SENDMSG 0 #R暗影怪物已全部降临,尽快击杀!
BREAK

QFunction-0.txt配套副本核心逻辑,包含定时器超时踢出、怪物死亡检测、通关判断。
[@TimerDarkTempleTimer_<$\(USERNAME>]
#ACT
#IF
ISINMAP 0150
#ACT
MAPMOVE <\)$USERNAME> 3 330 330
SENDMSG 6 暗影神殿挑战超时,已传送返回安全区。
;清除定时器
CLEARTIMER DarkTempleTimer_<$\(USERNAME>
#ELSEACT
CLEARTIMER DarkTempleTimer_<\)$USERNAME>
BREAK

[@OnKillMon]
#ACT
#IF
ISINMAP 0150
#ACT
GETMONSTERCOUNT 0150 <$\(STR(S0)>
#IF
<\)$STR(S0)> <= 0
#ACT
SENDMSG 6 暗影神殿所有怪物已清除,挑战通关!
;发放通关奖励
ADDITEM 暗影宝箱 1
ADDGOLD 1000000
SENDMSG 0 #G玩家【<$USERNAME>\(USERNAME>】通关暗影神殿!
CLEARTIMER DarkTempleTimer_<\)
CLEARTIMER DarkTempleTimer_<$USERNAME>
;延时3秒后传出地图
SETTIMER DarkTempleExit_<$USERNAME> 0 0 3
#ELSEACT
BREAK

[@TimerDarkTempleExit_<$\(USERNAME>]
#ACT
#IF
ISINMAP 0150
#ACT
MAPMOVE <\)$USERNAME> 3 330 330
SENDMSG 6 副本通关,即将离开暗影神殿。
CLEARTIMER DarkTempleExit_<$\(USERNAME>
#ELSEACT
CLEARTIMER DarkTempleExit_<\)$USERNAME>
BREAK

副本进出防护,增加玩家主动离开副本检测,[@OnLeaveMap]标签判断离开0150地图,清除对应副本定时器,防止定时器残留。
[@OnLeaveMap]
#ACT
#IF
<$\(MAPNAME> = 暗影神殿
#ACT
CLEARTIMER DarkTempleTimer_<\)$USERNAME>
CLEARTIMER DarkTempleExit_<$USERNAME>
SENDMSG 6 你离开了暗影神殿副本,挑战终止。
BREAK

怪物与道具DB配置,StdItems.DB录入暗影门票、暗影宝箱,暗影门票Stdmode设置31支持NPC检测,暗影宝箱设置为可双击开启道具。Monsters.DB录入暗影卫士、暗影法师、暗影教主,配置血量、攻防、爆率,MonGen.txt不要配置暗影神殿怪物定时刷新,副本怪物由脚本SPAWNMONSTER动态创建,避免地图常驻怪物。

副本限制扩展,可增加每日进入次数限制,使用人物持久变量DarkTempleDayCount记录当日进入次数,每日零点定时器重置次数。进入副本前增加判断,次数达到上限禁止进入。也可增加等级限制,低于指定等级无法开启副本。
每日次数检测示例,追加到@EnterDarkTemple开头:
GETVAR HUMAN DarkTempleDayCount <$\(STR(S0)>
#IF
<\)$STR(S0)> >= 3
#ACT
SENDMSG 6 今日暗影神殿进入次数已用完,明日再来。
BREAK

性能与异常处理,HERO引擎定时器以角色名作为定时器后缀,保证每个玩家副本计时独立,不会互相干扰。玩家掉线、小退,再次上线检测地图,如在副本内可继续挑战,也可增加上线踢出副本逻辑。大量玩家同时进入副本时,SPAWNMONSTER批量刷怪会短暂占用CPU,控制单次副本怪物数量。

常见故障排查,进入副本怪物不刷新,核对SPAWNMONSTER地图编号、坐标,怪物名称与Monsters.DB完全一致。怪物全部击杀无法通关,GETMONSTERCOUNT读取地图怪物数量,确认没有残留小怪,召唤物、英雄分身会计入怪物数量,需要过滤。超时没有传出玩家,检查定时器命名,HERO引擎角色名动态定时器语法,M2全局定时器事件需要开启。玩家多次刷副本,次数不重置,新增每日零点全局定时器,批量SETVAR HUMAN DarkTempleDayCount 0重置次数。

安全控制,副本地图设置禁止召唤英雄、禁止组队,防止多人进入单人副本。在MapInfo关闭组队传送,脚本增加组队检测,队伍人数大于1禁止开启副本。

部署步骤,配置MapInfo地图信息,录入暗影门票、暗影宝箱、暗影系列怪物DB数据,添加NPC脚本,将QFunction片段粘贴到QFunction-0.txt,保存所有文件,重载M2脚本。单机测试,刷暗影门票进入副本,击杀怪物验证通关奖励,测试超时踢出、中途离开副本等场景,调试完成删除调试SENDMSG语句。

可选拓展,增加副本难度选择,普通、困难模式,不同难度怪物血量、奖励不同;增加副本内专属BUFF,进入地图自动附加攻击提升,离开地图移除BUFF;增加副本排行榜,记录通关耗时,存入名人堂脚本。