单机传奇下线重登自动在安全区随机传送问题根源查找与参数脚本修复教程

来源: 作者: 点击:
角色下线保存位置异常,再次上线直接在安全区随机跳动,先区分两种情况,一种是上线固定回到安全区,另一种是上线之后持续不断随机移动,两者对应的配置和脚本问题不一样,先观察登录之后的表现再开始排查。首先打开M2引擎的功能设置,找到人物登录相关选项,查看登录回城、上线传送的开关,很多引擎内置了上线回城功能,开启之后角色每次登录都会强制传送至安全坐标,关闭这个选项之后再进行测试。部分引擎还有死亡回城、小退回城、大退回城的独立选项,大退回城开关打开,下线保存坐标失效,上线直接重置到安全区域。

接下来检查人物保存模式,引擎默认正常模式是下线保存当前地图坐标,还有一种模式是每次上线读取固定回城点,关闭强制回城才会读取下线坐标。核对回城地图编号和回城坐标配置,部分版本把回城点设置成安全区大范围随机坐标,而不是固定点位,就算关闭上线回城,其他脚本调用回城命令也会触发随机传送。打开M2的安全区设置,确认安全区的判定范围,不要把整个主城设置成大范围随机区域,安全区的随机参数会影响传送逻辑。

然后查看登录触发脚本,QM脚本是登录时优先执行的脚本文件,打开QM.txt,查找[@Login]登录段,这是最容易出现该问题的位置。[@Login]段里面如果写了RANDOMMOVE、MAPMOVE、RECALL、HOMEMAP这类传送指令,每次登录都会执行传送,出现上线随机飞的现象。还有条件判断语句,#if后面的条件没有加限制,只要登录就执行传送,不管角色是否正常下线。如果脚本里设置了特定标识,没有清除标识就会反复执行传送,需要把多余的传送命令注释或者删除,只保留需要的登录功能。

除了QM登录脚本,还要检查QFunction-0.txt里面的人物上线触发段,[@OnLogin]同样会在登录瞬间执行,很多人会把上线buff、上线检测写在这里,不小心附带传送指令,或者调用其他传送脚本。同时检查下线脚本[@Logout],下线脚本里面如果写了保存之前先回城的逻辑,角色下线的时候坐标就已经被改成安全区随机位置,再次上线自然落在安全区,看起来像是上线才随机飞,实际是下线阶段就修改了坐标。

检查行会、称号、定时任务、检测脚本,部分版本带有防挂机检测脚本,定时检测角色状态,判定离线重登之后触发回城随机。还有自动回收、自动拾取配套的检测脚本,里面带有坐标重置逻辑,这类脚本不一定在登录段,会在持续检测段触发,登录之后隔几秒才随机跳动,容易误以为是登录瞬间触发。打开M2日志,登录账号之后观察日志输出,日志会打印执行的脚本段、传送命令,从日志里面找到触发传送的脚本来源。

角色变量和标识问题也会造成循环传送,脚本设置了一个永久标识,角色身上带有这个标识,每次进入地图或者每隔一段时间就执行随机传送。需要添加清除标识的脚本,在正常登录成功之后清除对应的标记,或者修改#if判断条件,增加权限、地图、时间限制,避免无条件触发传送。测试的时候新建空白账号,新账号登录不会随机飞,老账号持续随机,说明是老账号身上携带了标记变量,需要使用命令清除人物变量,或者直接清空角色的标识数据。

数据库和人物存档相关问题,人物存档文件损坏,保存的地图坐标失效,引擎读取坐标失败的时候,会自动 fallback 到安全区随机位置。可以使用引擎自带的人物管理工具,查看角色保存的地图号和坐标,坐标数值为空或者超出地图范围,就会触发安全区传送。不要直接修改存档文件,优先用GM命令把角色传送到目标地图,再正常下线保存坐标,再重新登录测试。如果大量账号都出现这个问题,就不是单个存档损坏,是全局脚本或者引擎参数问题。

插件功能同样会带来这类效果,部分附加插件自带上线保护、回城保护、防卡地图功能,插件配置里面开启了上线脱离危险地图,插件会无视引擎本身的坐标保存,登录之后强制传送。打开插件配置文件,查看登录保护、卡图检测的开关,关闭自动回城、随机脱困的选项,重载插件之后再测试。插件日志里面会记录传送动作,用来区分是引擎脚本还是插件发起的传送。

地图参数也要核对,打开地图配置文件MapInfo.txt,查看角色经常停留的地图,有没有设置NoSave或者强制回城参数,带有NoSave标记的地图,角色在该地图下线不会保存坐标,下次上线直接回到回城点。很多地图用来做活动地图,默认开启不保存坐标,忘记修改标记,就会出现下线重登回到安全区随机飞。把不需要限制的地图去掉NoSave标记,保存文件,重载地图配置。

还有一种情况,上线之后不是直接传送,而是持续不停随机移动,这个大多是中毒、buff脚本或者状态脚本,每几秒触发一次随机移动,和登录脚本无关。查找QFunction-0里面的状态触发、buff生效段,找到带有随机移动的执行命令,调整触发条件或者删除。区分一次性传送和循环随机,两者处理方式完全不同。

全部调整完成之后,清理角色身上多余标识,在想要停留的地图正常下线,退出引擎重新启动,再登录账号验证。测试时不要带任何称号、buff、行会加成,排除附加状态干扰,多次重复上下线,确认坐标可以稳定保存,不再触发随机传送。如果修改之后依旧异常,逐条注释脚本分段测试,先注释QM,再注释QFunction,依次定位是哪一段脚本触发传送,找到之后再针对性修改逻辑。