传奇单机中出现 “下线后上线在安全区随机飞”,核心原因是 “角色下线时坐标未正确保存” 或 “上线时强制读取随机坐标”,按以下步骤逐一排查,多数问题能 20 分钟内解决,适配 GOM、HERO 等主流单机引擎。
一、先查核心配置:角色坐标是否开启 “下线保存”(最常见原因)
单机服务端默认需开启 “角色下线保存坐标” 功能,若配置关闭或参数错误,上线时会因读取不到历史坐标,默认在安全区随机 spawn(生成),先从 2 个关键配置文件入手:
1. 检查 M2Server 引擎设置(可视化操作,优先查)
启动服务端,打开 M2Server.exe(引擎主程序),在顶部菜单栏找到 “选项”→“参数设置”→“角色设置”;
找到 “角色下线保存” 相关选项,确保以下参数勾选正确:
勾选 “下线保存角色当前坐标”(核心选项,未勾选则下线不存坐标,上线随机);
取消勾选 “上线强制传送至安全区”(部分引擎有此选项,勾选后无论是否存坐标,上线都强制到安全区);
确认 “坐标保存延迟” 设为 “0”(即时保存,避免延迟导致数据未写入);
点击 “确定”,重启 M2Server(改引擎设置后必须重启,否则不生效),测试下线再上线 —— 若坐标正常保存,说明问题解决。
2. 检查登录服务配置文件(LoginSrv.ini,引擎隐藏配置)
若 M2 设置无异常,查服务端 “Login” 文件夹下的 “LoginSrv.ini”(部分单机引擎坐标保存由该文件控制):
用记事本打开 “LoginSrv.ini”,搜索关键词 “SaveRolePos”(角色坐标保存);
找到参数 “SaveRolePos=1”(1 = 开启保存,0 = 关闭保存),若为 0 则改为 1;
同时检查 “SpawnAtSafeArea” 参数(上线是否强制安全区):
若有 “SpawnAtSafeArea=1”,改为 “SpawnAtSafeArea=0”(0 = 不强制,按保存坐标上线);
保存文件,重启 LoginSrv.exe 和 M2Server,再次测试上线坐标。
二、再查数据库:角色表坐标字段是否正常存储
若配置已开启保存,仍随机飞,需排查 “角色下线时坐标未写入数据库”,核心看 MySQL 角色表的坐标字段是否更新:
1. 定位角色表与坐标字段
打开 Navicat,连接单机服务端数据库(如 “legend_single”),展开 “表” 目录;
找到角色表(不同引擎表名类似,常见:character、chars、role_data),双击打开表数据;
找到坐标相关字段(固定对应 3 个核心字段,引擎差异仅字段名,按关键词匹配):
字段功能
GOM 引擎常见字段名
HERO 引擎常见字段名
含义(示例值)
地图 ID
MapID
Map
角色所在地图编号(如 3)
X 轴坐标
MapX
X
横向坐标(如 320)
Y 轴坐标
MapY
Y
纵向坐标(如 280)
2. 验证坐标是否实时更新
登录游戏,控制角色移动到非安全区(如土城野外,避免在安全区测试),记住当前坐标(按 F11 或游戏内 “坐标显示” 功能查看,如 MapID=3,MapX=320,MapY=280);
正常下线(在游戏内点 “退出游戏”,别直接关客户端或服务端);
回到 Navicat 角色表,找到该角色行,查看坐标字段值:
若字段值与游戏内记录一致(如 MapX=320,MapY=280):说明坐标保存正常,下一步查地图设置;
若字段值不变(如仍为初始安全区坐标 MapX=300,MapY=300):说明下线时坐标未更新,需修复数据库写入问题。
3. 修复数据库坐标写入异常
若坐标未更新,按以下步骤处理:
检查角色表是否有 “更新权限”:右键角色表→“设计表”,确认 MapX、MapY、MapID 字段为 “可写”(字段类型一般为 int,无 “只读” 限制);
重启 DBServer.exe(数据库服务进程):关闭任务管理器中的 DBServer.exe,重新双击启动,再测试下线保存;
若仍不更新,替换数据库脚本:从服务端 “DB” 文件夹找到角色表对应的 SQL 脚本(如 “character.sql”),重新导入数据库(右键数据库→“运行 SQL 文件”),恢复表结构(避免表字段损坏导致写入失败)。
三、最后查地图设置:是否强制上线随机(安全区配置)
若坐标保存正常,上线仍随机飞,需排查 “当前地图强制设置上线随机”,核心查 Envir 文件夹的地图安全区配置:
1. 找到地图配置文件(MapInfo.txt)
进入服务端 “Mir200\Envir” 文件夹(GOM/HERO 引擎通用路径),找到 “MapInfo.txt”(控制所有地图的安全区、上线规则);
用记事本打开该文件,按 “地图 ID” 查找你测试的地图(如之前的 MapID=3,对应 “3 = 蜈蚣洞” 等,文件内格式一般为 “MapID = 地图名,其他参数”)。
2. 检查地图上线随机参数
在对应地图的配置行中,查找是否有 “RandomSpawn=1” 参数(1 = 开启上线随机,0 = 关闭);
示例:若配置行为 “3 = 蜈蚣洞,SafeMap=1,RandomSpawn=1”,其中 “RandomSpawn=1” 就是导致上线随机的原因;
将 “RandomSpawn=1” 改为 “RandomSpawn=0”,若没有该参数则直接添加 “RandomSpawn=0”;
同时确认 “SafeMap” 参数(是否为安全区):
若仅安全区随机,非安全区正常,可保留 “SafeMap=1”(安全区标识),但必须关闭 “RandomSpawn=1”;
保存 MapInfo.txt,重启 M2Server,测试在该地图下线再上线 —— 若坐标正常,说明问题解决。
四、补充:2 个易忽略的 “隐性问题” 排查
若上述步骤做完仍随机飞,查以下 2 点:
1. 服务端是否 “非正常关闭”(数据未写入)
原因:直接关闭 M2Server.exe 或断电,导致角色下线时数据未实时写入数据库,坐标停留在上一次保存状态;
解决:每次下线必须 “先在游戏内点退出”,再关闭服务端(顺序:先关 M2Server→再关 DBServer→最后关 LoginSrv);测试时,下线后先在 Navicat 确认坐标已更新,再重新上线。
2. 单机引擎 “版本 bug”(替换核心文件)
原因:部分精简版单机引擎存在 “坐标保存 bug”,即使配置正确也无法正常存储;
解决:从可靠渠道下载 “完整版单机引擎”(如 GOM 3.0、HERO 1.80 纯净版),替换服务端 “Mir200”“Login” 文件夹下的核心文件(保留原 Config 文件夹的个性化配置,避免重新改倍率等),再按步骤 1 重新配置坐标保存。
五、总结:3 步快速解决流程
优先查 M2 引擎 “角色下线保存坐标” 选项和 LoginSrv.ini 的 “SaveRolePos=1”,重启服务端测试;
若无效,用 Navicat 查角色表坐标字段,确认下线后是否更新,不更新则修复数据库或重启 DBServer;
最后查 Envir/MapInfo.txt,关闭对应地图的 “RandomSpawn=1”,确保上线不强制随机。
按这个顺序操作,90% 的单机随机飞问题都能解决,测试时建议固定在一个非安全区地图(如土城野外)反复验证,避免安全区与非安全区切换导致的误判。

