传奇Hero引擎寻宝天堂特色地图文件配置与脚本实现

来源: 作者: 点击:
寻宝天堂是Hero引擎下的一种多层递进型活动地图,玩家从入口NPC进入第一层,逐层清怪推进,每层怪物配置和爆率各不相同,最后一层设有终极BOSS。整个系统由地图文件、MapInfo参数、NPC入口脚本、分层传送脚本、MonGen刷怪配置和怪物爆率文件六个模块组成。

##地图文件存放与注册

地图文件存放在MirServer\Mir200\Map文件夹下,格式为.map文件。寻宝天堂如果使用自定义地图,需要将制作好的.map文件放入该目录,文件名称与地图标识一致。客户端也需要在Data\Map目录下放置相同的.map文件,否则玩家进入后会出现黑屏。

在Mir200\Envir\MapInfo.txt中注册寻宝天堂的每一层地图。Hero引擎的MapInfo格式为“[地图标识地图显示名]参数”,每行配置代表一张地图。寻宝天堂七层地图的注册示例如下:

```
[yb001寻宝天堂一层]NOPOSITIONMOVENORECONNECT
[yb002寻宝天堂二层]NOPOSITIONMOVENORECONNECT
[yb003寻宝天堂三层]NOPOSITIONMOVENORECONNECT
[yb004寻宝天堂四层]NOPOSITIONMOVENORECONNECT
[yb005寻宝天堂五层]NOPOSITIONMOVENORECONNECT
[yb006寻宝天堂六层]NOPOSITIONMOVENORECONNECT
[yb007寻宝天堂七层]NOPOSITIONMOVENORECONNECT
```

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
MOVRN38150
MOVRN39150
MOVN400
INCN40<$STR(N38)>
INCN40<$STR(N39)>
MAPMOVEyb0015050
SENDMSG0玩家[%s]进入寻宝天堂一层,终极不再遥远!
#ELSESAY
等级不足或元宝不够50万,无法进入寻宝天堂。
```

CHECKLEVELEX检测等级,CHECKGAMEGOLD检测元宝数量。MOVRN38150表示在1到50之间随机取一个整数存入N38,MOVRN39150同理。MOVN400将N40初始化为0,然后通过两条INC命令将N38和N39的值累加到N40中。这套变量操作在后续的分层传送脚本中会用来判断玩家所在层数。

MAPMOVE命令将玩家传送到指定地图和坐标,格式为“MAPMOVE地图标识X坐标Y坐标”。SENDMSG0向全服广播消息,%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
CHECKMAPMOBCOUNTyb001寻宝一层怪>0
#ACT
BREAK
#IF
CHECKMAPMOBCOUNTyb001寻宝一层怪=0
#ACT
MAPMOVEyb0025050
SENDMSG6恭喜通过第一层,进入寻宝天堂第二层!
SENDMSG0玩家[%s]通过了寻宝天堂第一层!
BREAK
```

CHECKMAPMOBCOUNT检测指定地图上指定怪物的剩余数量。第一段检测判断怪物是否还有存活,有则直接BREAK结束;第二段判断怪物全部清空时执行传送。这个双重检测是必要的,MapQuest的死亡触发在每只怪物死亡时都会执行一次,如果不加数量检测,击杀第一只怪物就会触发传送。

各层通关脚本的结构一致,只需要修改地图标识、怪物名称和跳转目标。最后一层的通关脚本改为发放奖励并传回盟重土城:

```
[@寻宝七层通关]
#IF
CHECKMAPMOBCOUNTyb007寻宝七层BOSS>0
#ACT
BREAK
#IF
CHECKMAPMOBCOUNTyb007寻宝七层BOSS=0
#ACT
GIVE寻宝证明1
GIVE金刚石50
GAMEGOLD+10000
SENDMSG0玩家[%s]成功通关寻宝天堂七层,获得了终极奖励!
MAPMOVE3330330
BREAK
```

##MonGen刷怪配置

寻宝天堂每层的怪物刷新在Mir200\Envir\MonGen.txt中配置。Hero引擎的MonGen格式为“地图标识坐标X坐标Y怪物名称范围数量间隔”,间隔单位为分钟。

```
yb0015050寻宝一层怪304010
yb0025050寻宝二层怪304010
yb0035050寻宝三层怪304010
yb0045050寻宝四层怪304010
yb0055050寻宝五层怪304010
yb0065050寻宝六层怪304010
yb0075050寻宝七层BOSS10160
```

前六层怪物每10分钟刷新40只,范围30格。第七层BOSS每60分钟刷新1只,范围10格。如果希望BOSS在服务器启动时立即刷出,可以在地图标识前加一个“*”号,表示该怪物不受智能刷怪模式控制。

MonGen还支持在行末添加@触发标签,怪物刷新时自动执行QFunction.txt中的对应脚本段。寻宝天堂的BOSS刷新可以利用这个功能发送全服公告:

```
yb0075050寻宝七层BOSS10160@寻宝BOSS刷新
```

在QFunction.txt中添加触发处理:

```
[@寻宝BOSS刷新]
#ACT
SENDMOVEMSG02510501{〖寻宝天堂〗:/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
CALCVARUSER寻宝次数+1
SAVEVARUSER寻宝次数..\QuestDiary\数据文件\寻宝次数.txt
MAPMOVEyb0015050
```

CALCVAR命令对变量执行加减操作,SAVEVAR命令将变量值写入指定文件路径。Hero引擎的自定义变量通过M2控制台的“查看列表信息”中的变量编辑功能进行管理,变量文件建议统一放在QuestDiary\数据文件\目录下。

##NPC坐标配置与加载

完成脚本编写后,在Mir200\Envir\Merchant.txt中注册寻宝天堂NPC的坐标信息,格式为“地图号坐标X坐标YNPC名称脚本文件名”。NPC建议放置在盟重土城安全区附近,方便玩家找到。Merchant.txt中的地图号使用数字编号,盟重试应地图号3。

脚本文件放入Market_Def目录后,在M2控制台执行“重新加载所有NPC”,使脚本生效。测试时用一个3级以上、元宝超过50万的账号与NPC对话,依次验证以下环节:元宝不足时是否正确拦截、进入后是否扣减元宝并传送到第一层、击杀第一层全部怪物后是否自动传送到第二层、各层BOSS是否按配置时间刷新、最终层通关后是否正确发放奖励并传回土城。如果某层怪物清空后不触发传送,检查MapQuest.txt中的触发编号和QFunction-0.txt中的标签名是否一一对应,Hero引擎对触发编号的方括号格式较为严格,多一个空格都会导致触发失效。
[顶部]