在传奇服务端中,使角色保持在线并持续执行挂机行为,需通过服务端脚本控制角色状态与行为循环。该机制不依赖客户端操作,由服务器主动维持角色活跃。
一、核心原理
角色掉线通常因长时间无操作触发超时机制。要实现“永久挂机”,需定期向服务器发送有效操作信号。服务端脚本可通过以下方式模拟操作:
定时移动:每间隔一段时间改变角色坐标
自动攻击:持续检测并攻击周围怪物
心跳包模拟:通过变量更新或消息发送维持连接
二、基础脚本结构(HERO引擎)
在QFunction.txt中设置循环标签:
[@KeepOnlineLoop]
IF
EQUAL HP 1
ACT
; 随机小范围移动防止卡点
CALC S0 X + RANDOM(3)
CALC S1 Y + RANDOM(3)
MOVE S0 S1
; 检测并攻击怪物
CHECKMON 1001
MOVR 1001
ATTACKM 1001
; 每60秒执行一次
DELAYCALL 60000 @KeepOnlineLoop
三、启动挂机流程
通过NPC激活挂机状态,并设置专属标记:
[@激活挂机]
IF
EXISTVAR HUMAN AutoHang == FALSE
ACT
SET HUMAN AutoHang 1
SENDMSG 7 挂机模式已启动。
GOTO @KeepOnlineLoop
ELSEACT
SENDMSG 7 挂机已在运行。
四、防掉线关键措施
操作频率控制
DELAYCALL间隔建议设为30000~60000毫秒(30~60秒),过短增加服务器负担,过长可能触发超时。
坐标边界限制
避免角色移出地图导致异常:
#IF
LARGE X 50
SMALL X 450
LARGE Y 50
SMALL Y 450
状态持续校验
每次循环检查角色是否存活:
#IF
EQUAL HP 1
; 继续挂机
#ELSEACT
; 死亡则停止
SET HUMAN AutoHang 0
BREAK
五、GOM引擎适配写法
GOM使用不同命令集:
[@KeepOnlineLoop]
IF
CHECKMAPMON 当前地图 1001
ACT
MOVR 1001
ATTACK 1001
DELAYCALL 60000 @KeepOnlineLoop
六、资源消耗管理
蓝量监控:加入LARGE $MP 10条件,避免空蓝卡死
背包清理:定期检测物品数量,超限时自动回城:
CHECKBAGITEMCOUNT > 40
MAPMOVE 比奇城 300 300
七、调试与验证
使用@mapmove将角色传至怪物区测试
查看MirServerLog日志确认DELAYCALL正常触发
断开客户端后观察角色是否继续移动/攻击
八、注意事项
服务端必须开启“允许脚本控制角色移动”选项
部分引擎需在!Setup.txt中设置AutoGetOffLineTime=0关闭自动下线
挂机期间禁止玩家手动操作,否则可能中断脚本循环
通过上述脚本,角色可在服务端持续执行移动与攻击动作,有效维持在线状态。所有逻辑基于文本指令实现,无需外部程序介入,符合标准传奇服务端运行规范。

