传奇服务端动态新增与移除地图全教程:MapInfo热加载镜像地图临时活动图增删及黑屏回

来源: 作者: 点击:
动态增加地图分两种。一种是在Mir200\Envir\MapInfo.txt写死新地图编号、名称、参数和.map文件,重启或重载后永久生效,适合长期新场景、新BOSS图、新安全区。另一种是运行时用脚本命令临时开图,例如镜像地图、动态副本、活动图,到时间自动回收,适合攻城演练、限时BOSS、单人副本。删除也分永久删除配置和临时关闭/回收,临时关图不要直接删MapInfo行,避免在线玩家掉线或回城异常。

一、MapInfo永久加图标准做法

路径Mir200\Envir\MapInfo.txt,常规行格式因引擎不同会有差异,常见文本类写法:

[地图号 地图名] 参数1 参数2 …

方括号不是所有版本都强制,有些Hero、Legend、Blue变体直接写“地图号 地图名 参数”。新增前先确认地图号未被占用,打开MapInfo搜索目标编号,避免和比奇、盟重、沙巴克、活动图重复。

示例新增一张战斗图:

[6001 新试炼场] FIGHT
[6001 新试炼场] 0 0 0 出生X 出生Y

不同版本字段含义不同,有的按“地图号 名 客户端map前缀 允许PK 允许随机 允许回城 允许骑马”排列,有的按方括号加独立入口行写传送点。稳妥做法是复制版本里一张同类型老图整行,改编号、改名、改坐标,不自己造字段顺序。

地图文件放Mir200\Map\6001.map;若客户端另用补丁资源,按补丁说明放Data或Map目录对应前缀。取消map文件只读,避免引擎读不到。小地图在Mir200\Envir\MiniMap.txt加“6001 小地图序号”,否则大图能进、右上角小图错或空。

入口可从老图连过来,MapInfo同文件下方写老图到新图的传点,或NPC用MapMove/Move/MapJump跳6001。GM测试用@MapMove 6001或@Goto 6001 X Y,具体命令名按M2帮助,部分版本叫MapMove、部分叫MoveMap。

改完后在M2地图管理重新加载地图信息;不支持热加载的版本重启M2Server。Hero类部分改文本后重载即可,GOM/GEE可在地图管理导入,Legend/Blue按所用控制器重载或重启。不要同时改十张图再重启,一次加一张验证最省事。

二、动态临时加图:镜像与副本

部分GOM、GEE、翎风类支持镜像地图,原图不动,运行时复制成临时新编号,到时间自动回收并把人传回指定图。通用脚本命令名常为AddMirrorMap,参数顺序示例:

AddMirrorMap 原图号 新图号 新图名 存在秒数 到期返回图 到期返回X 到期返回Y 小地图号 变量 是否常显剩余 返回坐标

简化写法常看到:

AddMirrorMap EM006 BOSS6001 BOSS临时图 600 0 0 0 0 0 D99 1 0

含义:以EM006为模板,开BOSS6001临时图,存在600秒,时间到把图上所有人传回0号图出生点;D99类变量接收创建结果,成功写1失败写0。不同引擎变量名、返回坐标参数位数会变,按M2命令列表核对。

适用场景:

限时世界BOSS:原BOSS图做模板,活动开始AddMirrorMap开新实例,刷独立怪,时间到回收。
单人/小队副本:用角色名或队伍ID生成独立新图号,避免多队互相抢怪。
攻城演练:复制沙巴克外城和皇宫做临时城,打完回收,不污染正式沙数据。

镜像图优点是不改MapInfo永久行、不重启、不担心ID越加越多;缺点是原图模板必须已存在且客户端补丁完整,否则临时图同样黑屏。镜像图里刷怪用MonGenEx或脚本按新图号刷,不要直接改原图MonGen,否则会影响模板。

三、动态加传送点而不加新图

只想把两张已有图临时连通,用动态地图路由。部分M2/铁血类命令:

AddMapRoute 源图 源X 源Y 目标图 目标X 目标Y 秒数

例:

AddMapRoute 6001 100 100 0 330 330 0

6001的100,100踩点传0号图330,330;最后秒数写0或省略常作永久,写具体值作限时。删除动态点用DELRANDOMMAPGATE或引擎对应删除路由命令,参数回写源图、坐标、源图名。

这种做法不新增.map,只新增连接,适合活动期间临时开捷径、迷宫、跨图巡逻。若只是NPC对话跳转,不需要AddMapRoute,直接MapMove目标图即可,减少动态点堆积。

四、动态删除与临时关闭

1. 永久删除

确定以后不再用某图,做四步:

备份MapInfo.txt,删目标地图号整行;
若下方有老图到该图的入口行,一并删除,否则玩家踩点报地图不存在;
Map目录可保留6001.map备用,也可移走;客户端补丁若仅该图使用可剥离,但共用贴图别误删;
M2重载地图或重启。机器人、NPC、MonGen、QuestDiary里引用6001的全部改掉,避免脚本红字。

只删MapInfo不清理NPC,结果就是点NPC报地图不存在、GM传送报错。

2. 临时关闭不让进

不删配置,用脚本或M2地图管理设禁止进入。文本类可在MapInfo给该图加NOENTER类参数,或通过进入条件脚本判断变量、等级、活动时间拒绝MapMove。活动结束去掉参数或改回允许。在线已经在图里的人不强制踢,除非你用MapMove全图传回安全区再关。

3. 镜像/临时图自动回收

AddMirrorMap设了存在秒数,到期引擎自动回收并把人送返回图。回收前若想提前关,用DelMirrorMap 新图名或引擎删除镜像命令;不同版本命令名可能不同,先在GM命令行试一次再写进活动脚本。删除前先把图上玩家传走,避免个别引擎回收瞬间掉线。

4. 动态路由删除

活动结束执行删除路由命令,去掉临时传送点;不删也不影响永久地图,但长期堆积会让同坐标多点跳转,排错麻烦。

五、机器人自动开图关图

Envir\Robot_def\AutoRunRobot.txt按时间跑:

AutoRun NPC RUNONDAY 20:00:00 @OpenTrialMap

AutoRun NPC RUNONDAY 22:00:00 @CloseTrialMap

RobotManage.txt:

[@OpenTrialMap]
if

act

AddMirrorMap 6001 6101 试炼临时 7200 0 330 330 0 0 D99 1 0
SENDMSG 1 试炼临时图已开启,6101可通过GM传送或NPC进入。

[@CloseTrialMap]
if

act

DelMirrorMap 6101
SENDMSG 1 试炼临时图已关闭,未退出玩家将传送回安全区。

若引擎不支持DelMirrorMap,用存在秒数自动回收,机器人只负责开不负责删。纯永久图不用机器人,直接MapInfo加好,机器人只发公告和刷怪。

六、NPC动态开图示例思路

Market_Def建进入NPC:

[@main]
活动副本<申请进入>/smaprun

[@smaprun]
if

check[某些条件,如等级、门票、活动时间]
act

AddMirrorMap 6001 6201 活动副本 1800 0 330 330 0 0 D0 1 0
MapMove 6201 出生X 出生Y
elseact

say 当前不满足进入条件或活动未开启。

D0类变量仅作示例,实际按引擎接收创建结果变量名替换。创建失败不要硬MapMove,否则进不存在图会报错;先判断变量再传送。

七、热加载与重启边界

改MapInfo文本后是否不重启生效,看引擎。资料里有的说MapInfo实时生效,但实际M2多数需要地图管理重载,镜像类靠命令运行时建。稳妥顺序:

先备份MapInfo、MiniMap、NPC、MonGen相关文件;
加一张图,M2地图管理重新加载;不支持就重启M2;
GM传新图,看是否黑屏、是否回城、小图是否显示;
没问题再加入口NPC和刷怪;
动态镜像单独用GM命令行测试AddMirrorMap,成功再写机器人。

不要一边改MapInfo、一边改NPC、一边换客户端补丁,出黑屏时分不清是哪一层。

八、黑屏与回城排错

进图黑屏但能走动:服务端有6001.map、MapInfo也写了,但客户端缺贴图。微端/GOM补丁检查Data或Pak/Wil路径;老客户端把服务端对应.map和补丁按说明放客户端Map/Data;删除客户端MapInfo缓存、WDbVer类缓存后重进。自编辑新图还要放地形贴图库,只放.map不放素材会黑。

进图直接回主城或报地图不存在:MapInfo无该编号、编号写错、方括号/空格格式错、M2未重载。@Goto 6001若回原图,先查MapInfo是否存在6001,再查Map目录6001.map是否只读或损坏。

进图坐标错、卡墙、踩点回老图:MapInfo入口行XY反了或写了障碍点;用地图编辑器看6001出生点可走,再改MapInfo出生坐标。

小地图不显示:MiniMap.txt没加6001对应序号,或客户端Minimap/Mmap素材没有该序号。

镜像图黑屏:原模板图本身补丁不全,先直连原图测试;原图正常再开镜像,避免把模板问题带进临时图。

动态路由踩点没反应:AddMapRoute源图坐标不对、目标图未加载、命令参数顺序与所用M2不一致;先用GM传目标图确认目标图正常,再建路由。

九、安全区、刷怪、任务联动

新图要安全区,Hero看SafePoint.txt,GOM/GEE可在M2地图配置勾安全区,Blue看SafeZone.txt并在MapInfo关联;坐标范围X2>X1、Y2>Y1,属性按禁止PK配置。纯战斗图不加安全区,但出生点周围别直接放怪围杀。

刷怪在Mir200\Envir\MonGen.txt按6001写行,或镜像图用脚本MonGenEx指定新图号、坐标、怪物名、数量、间隔。怪物名必须和Monster.txt/数据库一致,否则不刷或报加载错误。

任务图在MapInfo加CHECKQUEST(Q001)类参数,进入执行QuestDiary对应Q001;活动图用NEEDSET_ON/NEEDSET_OFF做进入标志,关闭活动后改标志即可禁入。

十、地图号规划与长期维护

新图号按区间分配,例如6000-6099常规新场景、6100-6199镜像临时、6200-6299活动副本、6300以上跨服或特殊。MapInfo顶部写注释容易因引擎解析差异出错,不如单独用Excel或文本台账记编号、用途、是否永久、补丁包名。每次增删后导出MapInfo备份,机器人动态图不写进MapInfo,但要备份机器人脚本和模板图编号。

多引擎注意:Hero/Legend/Blue偏文本MapInfo加重载;GOM/GEE镜像命令较完整;部分轻量M2只有AddMapRoute没有镜像,临时图要用“预建空白图+机器人清怪+时间到踢人”代替。不要把一个引擎的AddMirrorMap硬搬到不支持的M2,会直接命令未知。

十一、完整新增永久图最简流程

准备6001.map放Mir200\Map,取消只读;
MapInfo末尾加[6001 新试炼场]及对应参数、出生点;
MiniMap.txt加6001小图序号;
老图MapInfo加入口到6001,或NPC用MapMove 6001;
MonGen加6001刷怪行;
M2重载地图,GM@MapMove 6001测试;
黑屏补客户端贴图,回城查编号和重载,小图缺查MiniMap;
稳定后加安全区、任务、活动NPC。

十二、完整动态临时图最简流程

确认模板图6001已永久可用、客户端不黑;
GM命令行测试AddMirrorMap 6001 6101 临时图 600 0 330 330 0 0 D99 1 0;
查看D99或对应变量是否返回成功;
成功写NPC/机器人,在活动开始创建6101、刷独立怪、公告坐标;
到期依靠600秒自动回收,或写DelMirrorMap 6101提前关;
关图前先把6101在线人MapMove回0号安全区,再执行删除,避免回收瞬断。

按上面分永久加图、镜像临时加图、路由加连接、永久删配置、临时关图、镜像自动回收六类处理,基本覆盖传奇动态增删地图。排错始终先分三层:服务端MapInfo/map文件、M2重载、客户端补丁;动态命令再单独看引擎是否支持、变量是否接收、模板图是否本身完整。