剑侠引擎的地图连接设置分为静态和动态两种方式。静态连接写在MapInfo.txt中,引擎启动时加载,坐标写死后不能动态改动。动态连接通过AddRandomMapGate命令在脚本中实时创建和删除,适合做副本入口、活动传送门、限时通道这类需要按条件开启的连接点。两种方式可以混用,静态连接做基础通路,动态连接做活动逻辑。
## MapInfo.txt静态地图连接写法
打开 `Mir200\Envir\MapInfo.txt`,每一行对应一张地图的配置。地图定义格式为 `[地图编号 地图名称]` 加参数,连接点追加在同一行末尾,格式为 `起始坐标X,起始坐标Y -> 目标地图编号 目标坐标X,目标坐标Y`。
最基础的静态连接写法:
```
[0 比奇省] SAFE NORECONNECT(0) 330,330 -> 3 330,330
```
这行配置的含义是比奇省地图内坐标(330,330)位置是一个传送点,玩家走到这个坐标后自动传送到地图编号3的(330,330)位置。地图编号3通常是盟重省,两个主城之间通过这个传送点互通。
多个连接点可以在同一行中用空格分隔连续写:
```
[3 盟重省] SAFE NORECONNECT(3) 330,330 -> 0 330,330 139,85 -> D601 207,236
```
盟重省(330,330)传送到比奇省(330,330),盟重省(139,85)传送到D601地图(207,236)。连接点数量没有上限,写多少个都行,引擎会逐条解析。
地图名称后面的参数与连接点是并列关系,用空格隔开。参数控制地图的属性,连接点控制传送规则。常用参数中,SAFE表示安全区禁止PK,NORECONNECT(地图编号)控制掉线重连后的传送目标,NORANDOMMOVE禁止随机传送卷,NOPOSITIONMOVE禁止传送戒指的坐标移动指令,NODRUG禁止使用药物。
如果连接点不生效,先检查坐标前面是否有前导空格导致解析失败,再确认地图编号是否在MapInfo.txt中已经定义过,不存在的目标地图编号会导致整行配置被引擎忽略。
## 动态连接命令AddRandomMapGate
动态连接通过脚本中的AddRandomMapGate命令实现,格式为:
```
AddRandomMapGate 标识 起始地图 坐标X 坐标Y 目标地图 坐标X 坐标Y 有效时间 是否显示传送门
```
各参数含义:标识是连接点的名称,用于后续删除时指定;起始地图填地图编号,坐标X和坐标Y填起始坐标;目标地图填目标地图编号,坐标X和坐标Y填到达后的落点坐标;有效时间以分钟为单位,填0表示永久有效;是否显示传送门填1时在起始坐标位置显示一个可见的传送门特效,填0则不可见。
最基础的动态连接脚本写法:
```
#if
#act
AddRandomMapGate test 3 333 333 0 333 333 0 1
```
这行命令在盟重省(地图3)的(333,333)位置创建一个名为test的永久传送门,玩家走到该位置后传送到比奇省(地图0)的(333,333)。是否显示传送门填1,客户端会在这个位置渲染传送门光效。
## 动态连接的删除命令DelRandomMapGate
删除动态连接使用DelRandomMapGate命令,格式为:
```
DelRandomMapGate 标识 起始地图
```
标识必须与创建时使用的标识完全一致,起始地图填地图编号。删除上面创建的test连接:
```
#if
#act
DelRandomMapGate test 3
```
重要限制:只有当AddRandomMapGate的有效时间参数设置为0时,才能用DelRandomMapGate手动删除该连接。如果创建时有效时间填了非零值,比如填了30,表示30分钟后连接自动消失,这种情况下DelRandomMapGate命令不会生效。需要手动控制的连接,创建时有效时间必须填0。
## 杀怪触发动态传送门实战
动态连接最常见的用法是击杀指定怪物后开启传送门,玩家在一定时间内可以进入副本。完整脚本写在QFunction-0.txt的[@KillMonster]段落中:
```
[@KillMonster]
#IF
EQUAL <$KILLMONNAME> 雪域魔王
EQUAL <$MAP> XY3
#ACT
SENDMSG 0 <$USERNAME>杀死了<$KILLMONNAME>,开启了雪域圣殿传送门!
AddRandomMapGate 雪域入口 3 333 333 XY3 100 100 60 1
DELAYGOTO 3600 @关闭雪域入口
BREAK
[@关闭雪域入口]
#ACT
DelRandomMapGate 雪域入口 3
SENDMSG 0 雪域圣殿传送门已关闭。
```
EQUAL <$KILLMONNAME> 雪域魔王 判断被击杀的怪物名称是否为雪域魔王,EQUAL <$MAP> XY3 判断击杀发生的地图编号是否为XY3。两个条件同时成立时,在盟重省(地图3)的(333,333)位置创建雪域入口传送门,目标地图XY3的(100,100),有效时间60分钟。DELAYGOTO 3600 @关闭雪域入口 在3600秒(60分钟)后自动执行删除操作,与有效时间参数形成双保险。如果希望传送门一直存在直到手动关闭,有效时间参数改为0,DELAYGOTO命令可以去掉。
## 限时活动传送门配置
限时活动需要在指定时间段内开放传送入口,活动结束后自动关闭。结合机器人脚本的定时功能来实现:
在AutoRunRobot.txt中增加定时触发:
```
#AutoRun NPC RUNONDAY 20:00 @开启攻沙入口
#AutoRun NPC RUNONDAY 22:00 @关闭攻沙入口
```
在RobotManage.txt中编写对应的开启和关闭逻辑:
```
[@开启攻沙入口]
#ACT
AddRandomMapGate 攻沙入口 3 330 330 0150 50 50 120 1
SENDMSG 0 攻沙传送门已开启!20:00-22:00期间可进入沙巴克战场。
BREAK
[@关闭攻沙入口]
#ACT
DelRandomMapGate 攻沙入口 3
SENDMSG 0 攻沙传送门已关闭。
BREAK
```
每天晚上20:00自动在盟重省(330,330)创建攻沙入口,有效时间120分钟,同时全区公告提示。22:00准时删除连接,公告提示活动结束。有效时间120分钟与22:00的关闭时间对应,即使关闭命令因为某些原因没有执行,传送门也会在120分钟后自动消失。
## 条件判断后开启连接
不满足条件不允许进入的副本,在创建传送门之前先做条件检测:
```
[@开启副本]
#IF
CHECKLEVEL > 49
CHECKITEM 副本通行证 1
#ACT
TAKE 副本通行证 1
AddRandomMapGate 恶魔入口 3 330 330 D1001 50 50 0 1
SENDMSG 6 恶魔祭坛入口已开启,请尽快进入。
BREAK
#ELSESAY
你没有副本通行证,或者等级不足50级。
```
先检测等级和道具,两个条件同时成立才扣除通行证并创建传送门。有效时间填0表示永久存在,配合DelRandomMapGate在副本关闭时手动删除。这种做法的好处是每个玩家满足条件后都可以开启一次入口,多人共用同一个传送点。
## 互传模式与单向模式
AddRandomMapGate创建的是单向传送,玩家从起始地图走到坐标点后传送到目标地图,但目标地图没有返回的传送点。需要双向互通时,在目标地图位置再创建一条反向连接:
```
#if
#act
AddRandomMapGate 去程 3 333 333 0 333 333 0 1
AddRandomMapGate 回程 0 333 333 3 333 333 0 1
```
两条连接使用不同的标识名称,“去程”负责从盟重到比奇,“回程”负责从比奇回盟重。删除时需要分别删除两条连接。
HGE引擎支持在AddRandomMapGate命令中使用是否互传参数,格式为ADDRANDOMMAPGATE 连接点名 地图名称 坐标X 坐标Y 到达地图名称 坐标X 坐标Y 是否互传(0/1)。互传参数填1时引擎自动创建双向连接,不需要手动写两条命令。剑侠引擎使用AddRandomMapGate命令时不支持互传参数,需要手动创建反向连接。
## 动态连接与静态连接的配合
静态连接适合基础地图通路,比如主城之间的永久传送、练级地图的入口等。动态连接适合活动副本和限时内容。两者可以共存,同一个起始地图上可以同时有静态连接点和动态连接点,引擎会同时处理两套规则。
静态连接点在MapInfo.txt中配置,修改后需要重启引擎或重新加载地图配置文件才能生效。动态连接点在脚本中执行,创建和删除都是即时的,不需要重启引擎。排查连接问题时,先确认是静态还是动态类型,静态问题检查MapInfo.txt的格式和路径,动态问题检查脚本命令的参数和触发条件。
## 常见问题排查
动态连接创建后玩家走到坐标点没有传送,先检查起始坐标是否与地图上的障碍物或NPC位置重叠。如果坐标点被NPC或其他对象占用,玩家无法走到该坐标,自然触发不了传送。换一个空旷的坐标重新创建。
DelRandomMapGate删除不了连接,检查创建时AddRandomMapGate的有效时间参数是否填了非零值。填了非零值的连接由引擎自动管理生命周期,手动删除命令不会生效。需要手动控制的连接,创建时必须把有效时间填0。
传送门显示特效但走进后无反应,检查目标地图编号是否在MapInfo.txt中已定义。动态连接的目标地图必须是一张已经存在于服务端地图配置中的地图,如果目标地图编号不存在,传送逻辑找不到目标位置,连接会失效。
所有脚本文件必须保存为ANSI编码,UTF-8编码下中文字符串乱码,虽然英文命令本身不受影响,但脚本中的中文提示和地图名称如果包含中文会出现解析错误。修改脚本后重启M2Server,或在控制台执行@ReloadManage重新加载脚本文件。
剑侠传奇引擎自定义地图连接设置参考示例 静态传送点与AddRandomMapGate动态连接脚本
来源:
作者:
点击:

