你看到的“下线自动上线乱飞”现象,本质是服务端离线挂机功能配合定时随机移动脚本实现的。这种效果无法通过客户端外挂直接模拟,必须修改服务端脚本(如QFunction-0.txt、QManage.txt)。以下是基于GOM/GEE引擎的标准实现逻辑。
一、核心原理:假下线与真挂机
该功能并非真正下线,而是触发引擎的离线挂机机制。当玩家点击小退/大退时,脚本拦截退出指令,将角色状态设置为“离线挂机”,人物依然在线并执行预设动作。
关键触发标签(写入 QFunction-0.txt)
[@OnLogout_SoftClosing] ; 小退触发
[@OnLogout_OffLinePlaying] ; 大退触发(需开启离线挂机功能)
在这两个标签下,脚本会执行“传送至土城”并“开启移动定时器”,而非真正断开连接。
二、脚本实现步骤(服务端架设方视角)
要实现“下线→土城→随机飞”,需在服务端的QFunction-0.txt(功能脚本)和QManage.txt(登录脚本)中写入以下逻辑:
1. 拦截退出并传送至土城
当玩家退出时,先强制将其传送至土城安全区(地图编号通常为 3),并开启离线挂机标志。
[@OnLogout_SoftClosing]
#ACT
SETOFFLINEPLAY ON ; 开启离线挂机状态
MAP 3 330 330 ; 传送至土城安全区中心坐标
SetScTimer 0 10 ; 开启0号定时器,10秒后触发第一次移动
SENDMSG 0 玩家【%s】已进入离线挂机状态
BREAK
2. 定时随机移动逻辑(写入 QManage.txt)
在QManage.txt中编写定时器触发段,利用RANDOMMOVE命令实现随机飞行。
[@OnTimer0] ; 0号定时器触发段
#IF
ISDUMMY ; 检测是否为假人/离线挂机状态(部分引擎支持)
CHECKMAP 3 ; 检测是否在土城地图
#ACT
RANDOMMOVE ; 执行随机移动(在当前地图随机坐标飞行)
SetScTimer 0 30 ; 每隔30秒再次触发此定时器,实现循环乱飞
#ELSEACT
KillScTimer 0 ; 若不在土城,则关闭定时器
BREAK
注:RANDOMMOVE是引擎内置命令,无需坐标参数,会自动在当前地图随机传送。
三、客户端视角的误解澄清
如果你是一名普通玩家(非GM),你无法直接编写这种脚本。你所见的“自动上线乱飞”是服务器端设置好的功能:
- 服务端控制:所有逻辑由服务器脚本(.txt)控制,客户端只是接收移动指令的显示端。
- 外挂局限性:普通外挂(如简单挂、B版)只能模拟按键或内存调用,无法修改服务器的“退出触发逻辑”。外挂能做到的顶多是“检测到下线后自动启动登录器”,但无法实现“服务器侧的自动挂机乱飞”。
四、常见问题排查
若你正在架设服务端并尝试实现此功能却失败,检查以下几点:
1. 引擎支持:确认GOM/GEE引擎的“离线挂机”功能已开启(M2Server→参数设置→游戏选项)。
2. 定时器冲突:确保使用的定时器ID(如0)未被其他系统(如泡点、活动)占用。
3. 地图限制:RANDOMMOVE命令在某些安全区可能被限制,需检查MapInfo.txt中土城地图的SAFE标识。
总结:此效果属于服务端脚本功能,依赖于OnLogout触发和SetScTimer定时器。普通玩家看到的“诡异行为”实则是GM为了营造“人气火爆”假象而设置的机器人脚本。

