在传奇服务端中,自动打怪功能并非由客户端挂机程序实现,而是通过服务端脚本控制角色行为。该机制依赖地图事件、怪物检测与移动指令组合,在GOM、HERO等引擎中可通过QFunction配合定时器完成。
一、核心逻辑组成
自动打怪脚本需包含三个要素:
怪物存在检测:判断当前地图是否有目标怪物
角色状态校验:确保角色未死亡、未封号、有足够蓝量
攻击与移动控制:触发攻击动作并靠近怪物
二、基础脚本结构(HERO引擎示例)
在QFunction.txt中定义循环检测标签:
[@AutoAttackLoop]
IF
CHECKMAPMON 幻境一层 1001
EQUAL HP 1
LARGE MP 10
ACT
MOVR 1001
ATTACKM 1001
DELAYCALL 2000 @AutoAttackLoop
BREAK
ELSEACT
DELAYCALL 5000 @AutoAttackLoop
命令说明:
CHECKMAPMON 地图名 怪物编号:检测指定地图是否存在该怪物
MOVR 怪物编号:向最近的该怪物移动
ATTACKM 怪物编号:对怪物发起攻击
DELAYCALL 毫秒数 @标签:延迟后重复执行,形成循环
三、启动与停止机制
玩家通过NPC开启自动打怪,并设置专属变量防止重复启动:
[@开启自动打怪]
IF
EXISTVAR HUMAN AutoAttack == FALSE
ACT
SET HUMAN AutoAttack 1
SENDMSG 7 自动打怪已启动。
GOTO @AutoAttackLoop
ELSEACT
SENDMSG 7 自动打怪已在运行。
停止逻辑:
[@关闭自动打怪]
ACT
SET HUMAN AutoAttack 0
SENDMSG 7 自动打怪已关闭。
四、多怪物类型处理
若需攻击多种怪物,使用多重检测:
IF
OR
CHECKMAPMON 幻境一层 1001
CHECKMAPMON 幻境一层 1002
CHECKMAPMON 幻境一层 1003
ACT
; 优先攻击1001,其次1002...
IF CHECKMAPMON 幻境一层 1001
MOVR 1001
ATTACKM 1001
ELSEIF CHECKMAPMON 幻境一层 1002
MOVR 1002
ATTACKM 1002
ENDIF
五、地图范围限制
避免角色跑出安全区,加入坐标边界判断:
IF
LARGE X 100
SMALL X 300
LARGE Y 100
SMALL Y 300
; 仅在(100,100)-(300,300)内运行
六、资源消耗控制
防止无限蓝耗,加入回城补给逻辑:
IF
SMALL MP 30
ACT
MAPMOVE 比奇城 300 300
DELAYCALL 10000 @BackToMap
七、完整流程示例
玩家点击NPC“自动打怪”选项
脚本校验背包是否有“自动卷轴”(可选)
设置HUMAN变量AutoAttack=1
跳转至@AutoAttackLoop开始循环
每2秒检测一次怪物并攻击
玩家死亡或手动关闭时终止
八、调试要点
使用LOGGING AutoAttack: MonsterFound记录检测结果
通过@mapmove命令将测试角色传送到怪物密集地图
检查StdMonsters.db确认怪物编号正确
避免DELAYCALL间隔过短(建议≥1000毫秒),防止服务器负载过高
九、引擎差异说明
GOM引擎:使用CHECKMON替代CHECKMAPMON,语法为CHECKMON 怪物名
996引擎:需通过[@Timer]事件配合全局计时器实现循环
自动打怪脚本本质是服务端驱动的角色行为模拟,依赖精准的怪物识别与动作调度。所有逻辑必须在QFunction中完成,不可依赖外部程序。通过合理设置检测频率与边界条件,可实现稳定持续的自动战斗功能。

