当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

热度:
一、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适当加大。按上面模板改坐标和次数即可直接用。
[顶部]