传奇端游来回跑动巡逻脚本写法 GOM GEE HERO引擎两点多点循环示例与脚本死循环GOTO无

来源: 作者: 点击:
一、GOM/GEE引擎两点来回跑脚本标准写法

用按键精灵或传奇自带QFunction触发的人物跑点脚本,最常用是两点往复,关键必须加延迟和终止判断防止引擎判定死循环。

QFunction-0.txt(人物登录或触发命令调用)中写法示例:

[@StartRun]
#IF
#ACT
MOV S0 0 ;S0记录跑动次数
MOV S1 330 ;点A X
MOV S2 330 ;点A Y
MOV S3 400 ;点B X
MOV S4 400 ;点B Y
SETONLINEFLAG RUNNING
GOTO @RunLoop

[@RunLoop]
#IF
CHECKONLINEFLAG RUNNING
SMALL S0 200 ;最多跑200次,防止真死循环
#ACT
INC S0 1
MOVETO S1 S2 ;跑向A点
DELAYGOTO 3000 @WaitA

[@WaitA]
#IF
CHECKONLINEFLAG RUNNING
SMALL S0 200
#ACT
MOVETO S3 S4 ;跑向B点
DELAYGOTO 3000 @RunLoop

;停止命令(绑快捷键或NPC对话触发)
[@StopRun]
#IF
#ACT
DELONLINEFLAG RUNNING
SENDMSG 6 已停止巡逻


要点说明:
• 用DELAYGOTO代替裸GOTO,给引擎处理时间,避免瞬间万次跳转触发死循环报警。

• SMALL S0 200是硬终止条件,跑够次数自动停,也可以换成检测背包空格/HP变化/按F12停止。

- MOVETO X Y是人物走路,如需瞬移用MAPMOVE 地图号 X Y。

二、多点循环巡逻写法(三点以上)


[@Patrol]
#IF
EQUAL N1 0
#ACT MOVETO 100 100 DELAYGOTO 2500 @P1
#IF
EQUAL N1 1
#ACT MOVETO 150 120 DELAYGOTO 2500 @P2
#IF
EQUAL N1 2
#ACT MOVETO 80 150 DELAYGOTO 2500 @P0

[@P0]#ACT MOV N1 0 GOTO @Patrol
[@P1]#ACT MOV N1 1 GOTO @Patrol
[@P2]#ACT MOV N1 2 GOTO @Patrol

N1是巡逻阶段计数器,范围0~2循环往复,同样加DELAYGOTO和总次数上限防死循环。

三、怪物/NPC假人自动巡逻脚本(服务端MonGen/QuestDiye)

部分版本支持在Envir\QuestDiary\地图巡逻.txt给怪物设自动路径点,或在MonGen.txt刷怪时指定巡逻半径。纯脚本控制假人巡逻用DUMMYMOVETO配合Robot脚本:

[@DummyPatrol]
#IF
#ACT
DUMMYMOVETO 3 330 330 ;假人跑到A
Delay 3000
DUMMYMOVETO 3 400 400 ;假人跑到B
Delay 3000
GOTO @DummyPatrol

Robot脚本中同样要加计数器限制,如INC D0 1配合LARGE D0 500 BREAK。

四、脚本死循环常见原因与修复

① GOTO直接跳回自身或形成闭环无出口
错误写法:[@A] #ACT GOTO @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固定时间而不是立即判断成功,或检测当前坐标是否变化(GETCURPOS X Y存旧坐标比对新坐标,三次不变则跳备用点/BREAK)。

④ 变量没初始化或继承上次值导致条件永真
循环用的人参变量(N/D/H/S系列)在上次脚本执行后未清零,进入新会话仍满足条件造成无限进入循环。
修复:进入循环标签先用MOV Nx 0初始化,回收时用DELONLINEFLAG或清变量。

⑤ 用WHILE但缺EndWhile或条件不更新
GEE新版支持While/EndWhile,错误示例While true无变更。正确写法:

MOV N1 0
While N1 < 100
;执行动作
INC N1 1
EndWhile

条件变量必须在循环体内自增,否则必死循环。

五、调试技巧

M2开启脚本调试(部分版@ScriptDebug),点触发NPC看控制台输出最后一次执行标签定位死循环位置。死循环导致M2卡死先强制关M2,注释掉可疑GOTO段再启动,逐步放开。修改!Setup.txt后务必重启M2使ScriptGotoCountLimit生效。

来回跑脚本核心记住三条:用DELAYGOTO替裸GOTO、每个循环加计数上限或终止标志、引擎ScriptGotoCountLimit适当加大。按上面模板改坐标和次数即可直接用。