一、GOM/GEE引擎两点来回跑脚本标准写法
用按键精灵或传奇自带QFunction触发的人物跑点脚本,最常用是两点往复,关键必须加延迟和终止判断防止引擎判定死循环。
QFunction-0.txt(人物登录或触发命令调用)中写法示例:
[@StartRun]
#IF
#ACT
MOVS00;S0记录跑动次数
MOVS1330;点AX
MOVS2330;点AY
MOVS3400;点BX
MOVS4400;点BY
SETONLINEFLAGRUNNING
GOTO@RunLoop
[@RunLoop]
#IF
CHECKONLINEFLAGRUNNING
SMALLS0200;最多跑200次,防止真死循环
#ACT
INCS01
MOVETOS1S2;跑向A点
DELAYGOTO3000@WaitA
[@WaitA]
#IF
CHECKONLINEFLAGRUNNING
SMALLS0200
#ACT
MOVETOS3S4;跑向B点
DELAYGOTO3000@RunLoop
;停止命令(绑快捷键或NPC对话触发)
[@StopRun]
#IF
#ACT
DELONLINEFLAGRUNNING
SENDMSG6已停止巡逻
要点说明:
•用DELAYGOTO代替裸GOTO,给引擎处理时间,避免瞬间万次跳转触发死循环报警。
•SMALLS0200是硬终止条件,跑够次数自动停,也可以换成检测背包空格/HP变化/按F12停止。
-MOVETOXY是人物走路,如需瞬移用MAPMOVE地图号XY。
二、多点循环巡逻写法(三点以上)
[@Patrol]
#IF
EQUALN10
#ACTMOVETO100100DELAYGOTO2500@P1
#IF
EQUALN11
#ACTMOVETO150120DELAYGOTO2500@P2
#IF
EQUALN12
#ACTMOVETO80150DELAYGOTO2500@P0
[@P0]#ACTMOVN10GOTO@Patrol
[@P1]#ACTMOVN11GOTO@Patrol
[@P2]#ACTMOVN12GOTO@Patrol
N1是巡逻阶段计数器,范围0~2循环往复,同样加DELAYGOTO和总次数上限防死循环。
三、怪物/NPC假人自动巡逻脚本(服务端MonGen/QuestDiye)
部分版本支持在Envir\QuestDiary\地图巡逻.txt给怪物设自动路径点,或在MonGen.txt刷怪时指定巡逻半径。纯脚本控制假人巡逻用DUMMYMOVETO配合Robot脚本:
[@DummyPatrol]
#IF
#ACT
DUMMYMOVETO3330330;假人跑到A
Delay3000
DUMMYMOVETO3400400;假人跑到B
Delay3000
GOTO@DummyPatrol
Robot脚本中同样要加计数器限制,如INCD01配合LARGED0500BREAK。
四、脚本死循环常见原因与修复
①GOTO直接跳回自身或形成闭环无出口
错误写法:[@A]#ACTGOTO@A或@A→@B→@C→@A没有任何#IF条件阻断。
修复:每个循环入口加条件判断(变量计数/Small/Large),不满足则BREAK或跳转退出;一个#ACT段只写一个GOTO。
②引擎报"(脚本死循环)NPC:XXX"
GOM引擎默认ScriptGotoCountLimit值偏小(常默认10或100),频繁GOTO触发超限。
打开Mir200\!Setup.txt找到ScriptGotoCountLimit=10改为ScriptGotoCountLimit=5000(一般5000内够用,别设无限大以免真死循环卡M2),保存重启M2。
GEE引擎在M2→选项→功能设置→其它控制→脚本循环次数改大(如5000)。
③卡在障碍点反复尝试MOVE形成逻辑死循环
人物跑向坐标被墙/NPC挡住,MOVETO永远返回未完成,脚本不断重试。
修复:每个MOVETO后DELAYGOTO固定时间而不是立即判断成功,或检测当前坐标是否变化(GETCURPOSXY存旧坐标比对新坐标,三次不变则跳备用点/BREAK)。
④变量没初始化或继承上次值导致条件永真
循环用的人参变量(N/D/H/S系列)在上次脚本执行后未清零,进入新会话仍满足条件造成无限进入循环。
修复:进入循环标签先用MOVNx0初始化,回收时用DELONLINEFLAG或清变量。
⑤用WHILE但缺EndWhile或条件不更新
GEE新版支持While/EndWhile,错误示例Whiletrue无变更。正确写法:
MOVN10
WhileN1<100
;执行动作
INCN11
EndWhile
条件变量必须在循环体内自增,否则必死循环。
五、调试技巧
M2开启脚本调试(部分版@ScriptDebug),点触发NPC看控制台输出最后一次执行标签定位死循环位置。死循环导致M2卡死先强制关M2,注释掉可疑GOTO段再启动,逐步放开。修改!Setup.txt后务必重启M2使ScriptGotoCountLimit生效。
来回跑脚本核心记住三条:用DELAYGOTO替裸GOTO、每个循环加计数上限或终止标志、引擎ScriptGotoCountLimit适当加大。按上面模板改坐标和次数即可直接用。
用按键精灵或传奇自带QFunction触发的人物跑点脚本,最常用是两点往复,关键必须加延迟和终止判断防止引擎判定死循环。
QFunction-0.txt(人物登录或触发命令调用)中写法示例:
[@StartRun]
#IF
#ACT
MOVS00;S0记录跑动次数
MOVS1330;点AX
MOVS2330;点AY
MOVS3400;点BX
MOVS4400;点BY
SETONLINEFLAGRUNNING
GOTO@RunLoop
[@RunLoop]
#IF
CHECKONLINEFLAGRUNNING
SMALLS0200;最多跑200次,防止真死循环
#ACT
INCS01
MOVETOS1S2;跑向A点
DELAYGOTO3000@WaitA
[@WaitA]
#IF
CHECKONLINEFLAGRUNNING
SMALLS0200
#ACT
MOVETOS3S4;跑向B点
DELAYGOTO3000@RunLoop
;停止命令(绑快捷键或NPC对话触发)
[@StopRun]
#IF
#ACT
DELONLINEFLAGRUNNING
SENDMSG6已停止巡逻
要点说明:
•用DELAYGOTO代替裸GOTO,给引擎处理时间,避免瞬间万次跳转触发死循环报警。
•SMALLS0200是硬终止条件,跑够次数自动停,也可以换成检测背包空格/HP变化/按F12停止。
-MOVETOXY是人物走路,如需瞬移用MAPMOVE地图号XY。
二、多点循环巡逻写法(三点以上)
[@Patrol]
#IF
EQUALN10
#ACTMOVETO100100DELAYGOTO2500@P1
#IF
EQUALN11
#ACTMOVETO150120DELAYGOTO2500@P2
#IF
EQUALN12
#ACTMOVETO80150DELAYGOTO2500@P0
[@P0]#ACTMOVN10GOTO@Patrol
[@P1]#ACTMOVN11GOTO@Patrol
[@P2]#ACTMOVN12GOTO@Patrol
N1是巡逻阶段计数器,范围0~2循环往复,同样加DELAYGOTO和总次数上限防死循环。
三、怪物/NPC假人自动巡逻脚本(服务端MonGen/QuestDiye)
部分版本支持在Envir\QuestDiary\地图巡逻.txt给怪物设自动路径点,或在MonGen.txt刷怪时指定巡逻半径。纯脚本控制假人巡逻用DUMMYMOVETO配合Robot脚本:
[@DummyPatrol]
#IF
#ACT
DUMMYMOVETO3330330;假人跑到A
Delay3000
DUMMYMOVETO3400400;假人跑到B
Delay3000
GOTO@DummyPatrol
Robot脚本中同样要加计数器限制,如INCD01配合LARGED0500BREAK。
四、脚本死循环常见原因与修复
①GOTO直接跳回自身或形成闭环无出口
错误写法:[@A]#ACTGOTO@A或@A→@B→@C→@A没有任何#IF条件阻断。
修复:每个循环入口加条件判断(变量计数/Small/Large),不满足则BREAK或跳转退出;一个#ACT段只写一个GOTO。
②引擎报"(脚本死循环)NPC:XXX"
GOM引擎默认ScriptGotoCountLimit值偏小(常默认10或100),频繁GOTO触发超限。
打开Mir200\!Setup.txt找到ScriptGotoCountLimit=10改为ScriptGotoCountLimit=5000(一般5000内够用,别设无限大以免真死循环卡M2),保存重启M2。
GEE引擎在M2→选项→功能设置→其它控制→脚本循环次数改大(如5000)。
③卡在障碍点反复尝试MOVE形成逻辑死循环
人物跑向坐标被墙/NPC挡住,MOVETO永远返回未完成,脚本不断重试。
修复:每个MOVETO后DELAYGOTO固定时间而不是立即判断成功,或检测当前坐标是否变化(GETCURPOSXY存旧坐标比对新坐标,三次不变则跳备用点/BREAK)。
④变量没初始化或继承上次值导致条件永真
循环用的人参变量(N/D/H/S系列)在上次脚本执行后未清零,进入新会话仍满足条件造成无限进入循环。
修复:进入循环标签先用MOVNx0初始化,回收时用DELONLINEFLAG或清变量。
⑤用WHILE但缺EndWhile或条件不更新
GEE新版支持While/EndWhile,错误示例Whiletrue无变更。正确写法:
MOVN10
WhileN1<100
;执行动作
INCN11
EndWhile
条件变量必须在循环体内自增,否则必死循环。
五、调试技巧
M2开启脚本调试(部分版@ScriptDebug),点触发NPC看控制台输出最后一次执行标签定位死循环位置。死循环导致M2卡死先强制关M2,注释掉可疑GOTO段再启动,逐步放开。修改!Setup.txt后务必重启M2使ScriptGotoCountLimit生效。
来回跑脚本核心记住三条:用DELAYGOTO替裸GOTO、每个循环加计数上限或终止标志、引擎ScriptGotoCountLimit适当加大。按上面模板改坐标和次数即可直接用。

