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

传奇脚本老是停止运行:语法死循环编码资源全有关

热度:
脚本“停止运行”不是单一原因,是语法、逻辑、编码、引擎版本、资源引用、插件依赖、服务器资源这几块里至少有一块出问题。M2报红字、NPC点开没反应、任务跑到一半断掉、机器人脚本不执行、QFunction卡死,根因都在这几类里。

一、语法和标点问题
传奇脚本只认英文半角。中文逗号、中文句号、中文括号、全角空格混进去,引擎按空格分词就会把命令拆坏。
常见写法:
•GIVE金币1000,末尾中文逗号

•MAPMOVE 0155050中间是全角空格

-[@main]标签后面带空格,跳转对不上
•#IF下面写GIVE,#ACT下面写CHECKGOLD

•标签名@领取奖励和GOTO@领仍不上

-[@xxx]少写方括号,或者[@@InputInteger1]回调标签不存在

Notepad++开“显示所有字符”能直接看到全角空格和制表符。

二、死循环和无条件跳转
这是“停止运行/脚本死循环/CPU100%”的头号原因。
-[@Main]里#ACTGOTO@Main
•[@A]跳[@B],[@B]又跳回[@A]

•回收脚本GOTO@Recycle但没先CHECKITEM判断背包还有没有东西

•[@KillMon]里CALL的段又触发杀怪事件,形成递归

•机器人脚本Robot.txt间隔1秒,执行内容还嵌套循环

引擎有ScriptGotoCountLimit一类保护,超过跳转次数就强行终止这段脚本;表现就是“点一下NPC没反应”“功能突然不跑了”“M2刷脚本死循环”。

修法不是无脑调大限制,而是给循环加退出:

[@Recycle]
#IF
CHECKITEM垃圾装备1
#ACT
TAKE垃圾装备1
GIVE金币100
INCN$循环次数1
#IF
LARGEN$循环次数200
#ACT
MOVN$循环次数0
BREAK
#ELSEACT
GOTO@Recycle
BREAK


三、文件编码
传奇主流引擎脚本要ANSI。用系统记事本另存成UTF-8或UTF-8BOM,引擎读出来是乱码,命令全不认,表现就是NPC乱码、点不动、加载失败。
正确做法:Notepad++打开→编码→转为ANSI→保存。从网页复制来的脚本常带不可见字符,要重打一遍空格和换行。

四、变量类型和溢出
•把字符串赋给数字变量

•INCN11但N1根本没初始化

•荣誉点/声望/元宝类变量老引擎是短整型,一次加几百万直接溢出

•G系列全局变量和N系列私有变量混用,别的NPC改了同一个号

•HERO里系统变量大小写敏感,写错就当没这个变量

五、跳转标签/CALL文件找不到
GOTO@领取奖励但文件里没有[@领取奖励];
#CALL[\QuestDiary\活动\转盘.txt]@Draw但路径、文件名、标签名有一个不对;
Merchant.txt里写的脚本文件名和磁盘文件差一个字母,NPC直接加载失败。

六、引擎版本不兼容
HERO、GOM、GEE、BLUE、LEGEND命令集不是完全互通。
•GEE的CHECKTEXTLIST塞进HERO直接未知命令

-HERO的N$变量老GOM不认
•新版引擎的OpenShopEx、HeroSkillCast老引擎没有

跨引擎抄脚本,M2启动或点NPC就报“未知命令/脚本错误”。

七、资源引用丢失
脚本里调的东西不存在也会中断:
•MAPMOVE9995050但MapInfo里没999

•GIVE屠龙1但StdItems.DB里没这物品

•MOB祖玛教主5但Monster.DB没这怪

•爆率文件MonItems\XXX.txt里1/100不存在的物品名

资源找不到时,触发到那一行就停。

八、插件/DLL依赖没了
自动拾取、光柱、会员系统、合击扩展、脚本加密插件,都是DLL提供新命令。
插件没放、没在M2插件列表勾选、授权过期、DLL被杀软删了,脚本里一调AddHeroSkill/OpenAutoPick这种命令就整段崩。

九、机器人/定时器脚本太密
Robot.txt里:

#AutoRunNPC
1
[@Bot]

1秒跑一次复杂脚本,CPU堆积,M2自我保护,后续脚本不执行。
登录触发[@Login]、攻击触发[@Attack]、杀怪[@KillMon]里再套GOTO/CALL,也会把主线程拖死。

十、内存和资源占用
低配机跑大版本:
•同点刷1000只怪

•地图事件每秒检测BOSS

•全局变量列表无限增长

日志出Outofmemory,M2直接卡住,脚本当然“停止运行”。

十一、杀毒/系统干扰
M2Server.exe、LoginGate、DBServer、脚本里的外部调用被杀软隔离,文件半边被删,加载到某行就断。这不是脚本本身错,但表现一模一样。

十二、改完不重启
QuestDiary、QFunction、QManage改了只重登客户端不重启M2,服务端根本没重新读脚本,你以为“脚本停止运行”,其实是新逻辑没加载。

十三、快速定位顺序
1.看M2红字:会写“某某.txt第38行”
2.进Mir200\Log看ScriptLog/ErrorLog,找重复出现的文件名
3.先查最近改过的:Market_Def、QuestDiary、QFunction-0.txt、Robot.txt
4.把新加段注释掉,能跑就是这段问题
5.查GOTO/CALL/循环段有没有终止条件
6.查编码是不是ANSI
7.查命令在你引擎里存不存在
8.查地图/物品/怪物ID是否存在
9.查插件DLL是否加载
10.改完重启M2,不是重启游戏客户端

十四、最典型的几句病根
•“点NPC第一次行,第二次没反应”→变量没清零/标志位没复位/GOTO没BREAK

•“M2CPU拉满”→死循环/Robot间隔太短/QFunction递归

•“NPC显示乱码”→UTF-8编码/全角字符

•“一进地图就卡”→MapQuest触发里死跳/地图事件调了不存在标签

•“升级武器点下去没反应”→回调标签~Upgradenow新版不认/缺takegold/请求标签没接

•“任务做一半断了”→变量被别的系统占用/存盘失败/条件符号写反

脚本停止运行,九成不是“引擎坏了”,是某行命令、某个跳转、某个编码、某个资源ID不对。先把死循环和编码这两块排掉,再查跨引擎命令和插件,基本都能定位到具体文件具体行。
[顶部]