第一个问题:激活登陆对话框只在首次出现,循环里再执行就报“所选内容不存在”。
根因不是你命令写错,是脱机脚本把“界面元素”当成固定流程走了。天骥这类挂的对话框、按钮、菜单项,本质是“当前界面存在才可选”,不存在时还发 SelectOption/ClickItem 就会抛异常,脚本引擎默认遇到界面对象丢失就中断。
解决办法就一条:别让这条命令无条件执行,改成“先判断对话框在不在,再点”。
天骥脚本里一般用:
#if
DialogExist '激活登陆'
#act
SelectOption '激活登陆'
#endif
或者用 CheckDlg / HasWindow / WaitDlg 这类挂端提供的判断符(V1185 免费版不同打包者改过命令名,有的是 IfWin、CheckUI、WaitText)。核心是:有这个界面才点,没有就跳过,不碰那条选择命令。
如果挂端没现成界面判断命令,就用“超时跳过”写法:
SelectOption '激活登陆' 1500
表示最多等 1.5 秒,界面没出来就不点;但有些免费版 SelectOption 不带超时参数,那就包一层:
#loop
#if
DlgTextLike '*激活登陆*'
#act
SelectOption '激活登陆'
break
#else
delay 500
goto loop
再配最大循环次数,超了也 break。这样首次登陆点了,后面循环里 DlgTextLike 不匹配,自然不走选择命令,就不会报“所选内容不存在”。
千万别写:
SelectOption '激活登陆'
delay 1000
SelectOption '激活登陆'
第二次没对话框,第二条直接炸。
还有个细节:天骥免费版“登陆流程”和“主循环”要拆开。
正确结构是:
1. 登录前脚本:等角色选择→进游戏→等主界面→如果看到激活登陆就点→进入主循环。
2. 主循环:打怪/捡物/回城/特修,里面完全不包含 SelectOption '激活登陆'。
很多人把“首次登陆处理”写进主循环顶部,就会每次都试一次,免费版引擎又不忽略失效界面,就卡死。用子程序/标签分开:
@goto LoginOnce
@label MainLoop
...
@label LoginOnce
if 激活登陆存在 then 点
return
LoginOnce 只在启动时跑一次,主循环永不调它。
第二个问题:特修写 @002 再 @S_REPAIR,语句“那么特修[衣服]”提示 NPC 不支持,但超时后又修好了。
这是天骥免费版和 M2 脚本对“自定义命令 / 功能命令”解析顺序的冲突。
你基本设置里填:
特修前执行:@002
特修命令:@S_REPAIR
挂端会把“那么特修[衣服]”翻译成:
先给 NPC 发 @002,再发“特修 衣服”或 @S_REPAIR 参数。
但 M2 端 NPC 脚本里,@002 可能是个触发标记(比如设置变量、打开子窗口、切换修理模式),并不是“马上修”;紧接着挂端发“特修[衣服]”这种人类语句,M2 不认,回你“该NPC不支持这条命令”。等语句超时,挂端又按兜底逻辑重发了一遍标准 @S_REPAIR 衣服/部位,这时候 NPC 已经处在“@002 之后的上下文”里,就能修了。
现象翻译:
• 第一次发:@002 + 那么特修[衣服] → M2 不认“那么特修[衣服]”这句话 → 报错
• 超时重发:@002 状态还在 → 发标准 S_REPAIR 协议/命令 → NPC 修好
修法有三档:
1)别在挂端写“那么特修[衣服]”这种中文指令
天骥里特修不要用自然语言语句,用挂端原生命令:
RepairItem 衣服
或
S_REPAIR 衣服
基本设置里“特修前执行 @002”可以留着,但主脚本里别写“那么特修[衣服]”,让挂端自己按“前执命令+原生修理命令”拼包。
2)确认 @002 是不是必须
很多服 @002 是“进入特殊修理界面”的触发,有的 M2 其实只要发:
@S_REPAIR
就能全修/按部位修。你先手动在游戏里点 NPC,看聊天框回的其实是:
@002
@S_REPAIR 衣服
还是只发 @S_REPAIR。如果手动点衣服特修,M2 日志里根本没有 @002,那你基本设置里填 @002 就是画蛇添足,删掉就不报“不支持”。
3)用延迟拆开两条命令
免费版常把“前执行”和“主命令”发得太快,NPC 脚本还没把 @002 的变量写完,主命令就来了。改成:
SendLine @002
delay 300
RepairItem 衣服
delay 300
别用“那么特修[衣服]”这种挂端翻译句。delay 300~600 看服,火龙/合击/英雄版 NPC 脚本重一点就 500。
还有特修部位名要对:
衣服、武器、头盔、项链、左手镯、右手镯、左戒指、右戒指、腰带、鞋子、宝石——有的 M2 认“衣服”,有的认“身着”“盔甲”;天骥内部名可能是 Armor / Dress。你手动特修衣服成功一次,开 M2 的 NPC 日志或挂端“通讯监视”,看实际发出来的是:
#EXECUTE S_REPAIR Armor
还是
#EXECUTE 那么特修[衣服]
前者能修,后者被 M2 当脏字符串。
顺带把“超时却又修了”的机制说清:
天骥免费版有“命令失败重试/超时兜底”。首次发错→M2 回错→挂端记失败→等超时→按内部默认修理协议再发一次→这次不发中文“那么特修[衣服]”,发的是底层 S_REPAIR→修好。所以你看到“先报错再修好”,不是 NPC 抽风,是挂端第一次翻译烂、第二次用底裤命令救场。
顺手给个能用的特修段(伪天骥语法,按你挂端命令名改):
#if
需要修理(衣服)
#act
OpenNpc 土城武器店老板
delay 400
SendLine @002
delay 500
RepairItem 衣服
delay 500
SendLine @S_REPAIR
delay 400
CloseNpc
#endif
别写“那么特修[衣服]”,别把中文指令当 M2 命令。
两个问题的共同本质:
天骥 V1185 免费版脚本引擎“不自动忽略失效界面、不自动翻译中文修理指令”。你得当它笨:界面在才点,界面不在跳过;NPC 只吃 M2 认的 @命令/原生修理命令,不吃挂端自己拼出来的“那么xxx[yyy]”人话。
登陆激活框用“存在才执行”解决;
特修用“前执行@002 + 原生Repair/S_REPAIR + 延时”解决,别碰“那么特修[部位]”这种挂端文言。
多开情况下还要注意:免费版有时全局变量和角色变量混用,LoginOnce 标记要用角色名做键,比如 LoginDone[<角色名>],不然 A 号登过激活框,B 号也被脚本认为“已经点过了”,结果新号不点激活直接卡主界面。特修也是,当前 NPC 名要用 <NpcName> 变量拼,别写死“土城武器店老板”,跑去做衣服特修却对着杂货铺发 @002,一样报不支持。
如果挂端支持 #try/#catch 或 IgnoreError,把可疑命令包起来:
#try
SelectOption '激活登陆'
#catch
delay 200
#try
那么特修[衣服]
#catch
RepairItem 衣服
但免费版很多没真异常捕获,写了也当注释。这种就别依赖捕获,老老实实先判断再执行。
最后提醒一句:V1185 免费版不同发布者改过命令集,有人把 SelectOption 叫 ClickMenu,把 RepairItem 叫 FixEquip,把 DlgTextLike 叫 CheckDlgText。你对着自己这份挂端里的“命令帮助/脚本例子”对一遍名字,比网上抄通用天骥语法管用。命令名不对,逻辑再对也白跑。
登陆循环卡死、特修假报错,基本都出在“把一次性界面当常驻界面、把挂端文言当 M2 命令”这两件事上。改完这两处,脚本就能从“登进来跑五分钟停”变成“挂一晚上不用人看”。

