寻宝天堂是Hero引擎下的一种多层递进型活动地图,玩家从入口NPC进入第一层,逐层清怪推进,每层怪物配置和爆率各不相同,最后一层设有终极BOSS。整个系统由地图文件、MapInfo参数、NPC入口脚本、分层传送脚本、MonGen刷怪配置和怪物爆率文件六个模块组成。
## 地图文件存放与注册
地图文件存放在MirServer\Mir200\Map文件夹下,格式为.map文件。寻宝天堂如果使用自定义地图,需要将制作好的.map文件放入该目录,文件名称与地图标识一致。客户端也需要在Data\Map目录下放置相同的.map文件,否则玩家进入后会出现黑屏。
在Mir200\Envir\MapInfo.txt中注册寻宝天堂的每一层地图。Hero引擎的MapInfo格式为“[地图标识 地图显示名] 参数”,每行配置代表一张地图。寻宝天堂七层地图的注册示例如下:
```
[yb001 寻宝天堂一层] NOPOSITIONMOVE NORECONNECT
[yb002 寻宝天堂二层] NOPOSITIONMOVE NORECONNECT
[yb003 寻宝天堂三层] NOPOSITIONMOVE NORECONNECT
[yb004 寻宝天堂四层] NOPOSITIONMOVE NORECONNECT
[yb005 寻宝天堂五层] NOPOSITIONMOVE NORECONNECT
[yb006 寻宝天堂六层] NOPOSITIONMOVE NORECONNECT
[yb007 寻宝天堂七层] NOPOSITIONMOVE NORECONNECT
```
NOPOSITIONMOVE参数禁止在该地图内使用坐标移动和瞬息移动,防止玩家绕过逐层推进的机制。NORECONNECT参数表示在本地图下线后再次上线时自动传送到其他地图,避免玩家利用下线重置怪物状态。如果需要设置经验倍数,可以在参数中加入EXPRATE,格式为“EXPRATE(200)”,200代表2倍经验,引擎会自动除以100计算实际倍数。
## 入口NPC脚本编写
在Mir200\Envir\Market_Def目录下新建NPC脚本文件,写入入口对话和进入检测逻辑。Hero引擎的NPC脚本使用#IF、#ACT、#ELSESAY三段式结构:
```
[@main]
寻宝天堂一共七层,每层怪物都不同,爆率也不一样。
每层每60分钟刷新一个BOSS,最后一层爆终极装备。
<进入寻宝天堂/@进入> <离开/@exit>
[@进入]
#IF
CHECKLEVELEX > 2
CHECKGAMEGOLD > 499999
#ACT
GAMEGOLD - 500000
MOVR N38 1 50
MOVR N39 1 50
MOV N40 0
INC N40 <$STR(N38)>
INC N40 <$STR(N39)>
MAPMOVE yb001 50 50
SENDMSG 0 玩家[%s]进入寻宝天堂一层,终极不再遥远!
#ELSESAY
等级不足或元宝不够50万,无法进入寻宝天堂。
```
CHECKLEVELEX检测等级,CHECKGAMEGOLD检测元宝数量。MOVR N38 1 50表示在1到50之间随机取一个整数存入N38,MOVR N39 1 50同理。MOV N40 0将N40初始化为0,然后通过两条INC命令将N38和N39的值累加到N40中。这套变量操作在后续的分层传送脚本中会用来判断玩家所在层数。
MAPMOVE命令将玩家传送到指定地图和坐标,格式为“MAPMOVE 地图标识 X坐标 Y坐标”。SENDMSG 0向全服广播消息,%s会被引擎自动替换为触发脚本的玩家角色名。
## 分层传送与怪物清空检测
寻宝天堂的逐层推进机制依赖MapQuest.txt的怪物死亡触发。在Mir200\Envir\MapQuest.txt中为每层地图配置触发规则:
```
yb001 [001] 0 寻宝一层怪 * 1:@寻宝一层通关
yb002 [002] 0 寻宝二层怪 * 1:@寻宝二层通关
yb003 [003] 0 寻宝三层怪 * 1:@寻宝三层通关
yb004 [004] 0 寻宝四层怪 * 1:@寻宝四层通关
yb005 [005] 0 寻宝五层怪 * 1:@寻宝五层通关
yb006 [006] 0 寻宝六层怪 * 1:@寻宝六层通关
```
MapQuest.txt的格式依次为:地图标识、触发编号、条件、怪物名称、是否广播、跳转标签。最后一段“1:@寻宝一层通关”表示怪物被击杀后跳转到QFunction-0.txt中的对应标签执行脚本。
在QFunction-0.txt中添加各层的通关处理逻辑:
```
[@寻宝一层通关]
#IF
CHECKMAPMOBCOUNT yb001 寻宝一层怪 > 0
#ACT
BREAK
#IF
CHECKMAPMOBCOUNT yb001 寻宝一层怪 = 0
#ACT
MAPMOVE yb002 50 50
SENDMSG 6 恭喜通过第一层,进入寻宝天堂第二层!
SENDMSG 0 玩家[%s]通过了寻宝天堂第一层!
BREAK
```
CHECKMAPMOBCOUNT检测指定地图上指定怪物的剩余数量。第一段检测判断怪物是否还有存活,有则直接BREAK结束;第二段判断怪物全部清空时执行传送。这个双重检测是必要的,MapQuest的死亡触发在每只怪物死亡时都会执行一次,如果不加数量检测,击杀第一只怪物就会触发传送。
各层通关脚本的结构一致,只需要修改地图标识、怪物名称和跳转目标。最后一层的通关脚本改为发放奖励并传回盟重土城:
```
[@寻宝七层通关]
#IF
CHECKMAPMOBCOUNT yb007 寻宝七层BOSS > 0
#ACT
BREAK
#IF
CHECKMAPMOBCOUNT yb007 寻宝七层BOSS = 0
#ACT
GIVE 寻宝证明 1
GIVE 金刚石 50
GAMEGOLD + 10000
SENDMSG 0 玩家[%s]成功通关寻宝天堂七层,获得了终极奖励!
MAPMOVE 3 330 330
BREAK
```
## MonGen刷怪配置
寻宝天堂每层的怪物刷新在Mir200\Envir\MonGen.txt中配置。Hero引擎的MonGen格式为“地图标识 坐标X 坐标Y 怪物名称 范围 数量 间隔”,间隔单位为分钟。
```
yb001 50 50 寻宝一层怪 30 40 10
yb002 50 50 寻宝二层怪 30 40 10
yb003 50 50 寻宝三层怪 30 40 10
yb004 50 50 寻宝四层怪 30 40 10
yb005 50 50 寻宝五层怪 30 40 10
yb006 50 50 寻宝六层怪 30 40 10
yb007 50 50 寻宝七层BOSS 10 1 60
```
前六层怪物每10分钟刷新40只,范围30格。第七层BOSS每60分钟刷新1只,范围10格。如果希望BOSS在服务器启动时立即刷出,可以在地图标识前加一个“*”号,表示该怪物不受智能刷怪模式控制。
MonGen还支持在行末添加@触发标签,怪物刷新时自动执行QFunction.txt中的对应脚本段。寻宝天堂的BOSS刷新可以利用这个功能发送全服公告:
```
yb007 50 50 寻宝七层BOSS 10 1 60 @寻宝BOSS刷新
```
在QFunction.txt中添加触发处理:
```
[@寻宝BOSS刷新]
#ACT
SENDMOVEMSG 0 251 0 50 1 {〖寻宝天堂〗:/SCOLOR=70}{『<$RegMonName>』/SCOLOR=250}已刷新,位于<$RegMonMapDesc>,坐标<$RegMonX>:<$RegMonY>,赶紧抢!
BREAK
```
<$RegMonName>、<$RegMonMapDesc>、<$RegMonX>、<$RegMonY>是MonGen触发脚本中的专用变量,分别代表当前怪物名称、地图名称、刷怪X坐标和刷怪Y坐标。
## 怪物爆率文件配置
在Mir200\Envir\MonItems目录下为每层怪物创建爆率文件,文件名必须与MonGen.txt中配置的怪物名称完全一致,包括大小写,否则引擎无法加载。寻宝天堂前六层怪物的爆率文件内容:
```
1/1 金币 2000
1/10 元宝 100
1/100 金刚石 5
1/500 寻宝碎片 1
1/2000 屠龙 1
```
第七层BOSS的爆率文件相应提高掉落品质:
```
1/1 金币 100000
1/2 元宝 5000
1/3 金刚石 200
1/20 寻宝碎片 10
1/100 终极屠龙 1
1/200 终极天魔神甲 1
```
爆率格式中斜杠左侧为分母,右侧为掉落数量。1/100表示100次击杀掉落1件。如果怪物不爆物品,优先检查怪物名称和爆率txt文件名是否一致,并确认怪物数据库RACE字段的值是否为81。
## 变量与持久化存储
寻宝天堂的进入次数统计和通关记录需要通过Hero引擎的自定义变量系统持久化。在Mir200\Envir\UserData目录下的变量配置文件中声明变量:
```
#USERVAR 寻宝次数=0
#GLOBALVAR 寻宝BOSS状态=0
```
#USERVAR前缀声明用户变量,#GLOBALVAR前缀声明全局变量。变量名只能包含字母、数字和下划线,不能使用中文符号或空格。在M2控制台的变量设置中需要勾选“启用用户自定义变量”和“启用全局自定义变量”才能生效。
在NPC脚本中修改和保存变量:
```
[@进入]
#IF
CHECKLEVELEX > 2
CHECKGAMEGOLD > 499999
#ACT
GAMEGOLD - 500000
CALCVAR USER 寻宝次数 + 1
SAVEVAR USER 寻宝次数 ..\QuestDiary\数据文件\寻宝次数.txt
MAPMOVE yb001 50 50
```
CALCVAR命令对变量执行加减操作,SAVEVAR命令将变量值写入指定文件路径。Hero引擎的自定义变量通过M2控制台的“查看列表信息”中的变量编辑功能进行管理,变量文件建议统一放在QuestDiary\数据文件\目录下。
## NPC坐标配置与加载
完成脚本编写后,在Mir200\Envir\Merchant.txt中注册寻宝天堂NPC的坐标信息,格式为“地图号 坐标X 坐标Y NPC名称 脚本文件名”。NPC建议放置在盟重土城安全区附近,方便玩家找到。Merchant.txt中的地图号使用数字编号,盟重省对应地图号3。
脚本文件放入Market_Def目录后,在M2控制台执行“重新加载所有NPC”,使脚本生效。测试时用一个3级以上、元宝超过50万的账号与NPC对话,依次验证以下环节:元宝不足时是否正确拦截、进入后是否扣减元宝并传送到第一层、击杀第一层全部怪物后是否自动传送到第二层、各层BOSS是否按配置时间刷新、最终层通关后是否正确发放奖励并传回土城。如果某层怪物清空后不触发传送,检查MapQuest.txt中的触发编号和QFunction-0.txt中的标签名是否一一对应,Hero引擎对触发编号的方括号格式较为严格,多一个空格都会导致触发失效。
传奇Hero引擎寻宝天堂特色地图文件配置与脚本实现
来源:
作者:
点击:

