死循环根源:GetExp触发与经验写入互斥
报错“1秒1次”的直接原因是脚本逻辑闭环冲突。[@GetExp]是引擎底层事件,只要人物获得经验就会立即触发。你在[@宗派经验]段中使用了AddTextList写入文件,该操作被引擎判定为“获得经验”行为,导致再次触发[@GetExp],形成“获得经验→写文件→触发获得经验”的无限递归。M2引擎检测到GOTO跳转频率过高,故报脚本死循环。
逻辑重构:拆分触发与执行链路
必须切断“经验写入”与“GetExp触发”之间的互锁。严禁在[@GetExp]内直接使用GOTO @宗派经验。正确做法是将宗派经验计算与GetExp事件解耦。
方案一:Robot定时器轮询(推荐)
在RobotManage.txt中设置定时器,每分钟执行一次宗派经验结算,彻底避开GetExp触发点。
; RobotManage.txt 添加
[@OnTimer30]
#if
CHECKNAMELIST ..\QuestDiary\宗师系统\宗主名单.txt
#ACT
; 读取经验变量并累加
break
方案二:杀怪后触发(替代方案)
将经验累加逻辑移至[@KillMon](杀怪触发)或[@OnKillMob]事件中,避免直接挂钩GetExp。
语法修正:GOTO跳转与BREAK失效
原脚本存在致命语法错误。在[@GetExp]段中,第一个GOTO @宗派经验执行后,其后代码(GOTO @烽火001、GOTO @冲级赛、BREAK)永远不会执行。GOTO是绝对跳转,执行后立即离开当前段,后续命令被引擎忽略。若需多段并行执行,应改用#CALL调用或使用#IF条件判断分别执行,而非连续GOTO。
紧急修复:临时屏蔽与参数调整
若需临时解决报错,可进行以下操作:
1. 屏蔽触发:在[@GetExp]段首加//注释整个段,或删除GOTO @宗派经验行。
2. 调整引擎参数:在!Setup.txt中找到ScriptGotoCountLimit=,将数值从默认的20改为1000,并重启M2。此操作仅缓解报错频率,无法解决逻辑错误。
变量优化:文件读写与内存变量
[@宗派经验]段存在性能瓶颈。你当前使用GetRandomName读取文件,再DelTextList删除,最后AddTextList写入,高频文件IO操作极易导致数据错乱。建议改用内存变量存储经验值:
- 使用VAR(个人变量)或GLOBAL(全局变量)存储经验值。
• 仅在玩家下线或定时器触发时,将内存变量一次性写入文件。
- 减少文件读写次数,可大幅降低脚本冲突概率。
传奇QFunction脚本死循环报错修复与逻辑重构
来源:
作者:
点击:

