传奇脚本错误逐一排查:ADDSKILL与变量冲突修复手册

来源: 作者: 点击:
ADDSKILL报错是最常见的一类。这个指令用于给角色添加技能,报错要么是技能名字写错了,要么是技能等级参数越界。正确的写法是ADDSKILL 烈火剑法 3,最后一个数字代表技能等级,范围是0到3。写成ADDSKILL 烈火剑法 5就直接出错,因为服务器不认超过3级的数值。还有把技能名写成中文但编码格式不对的情况,脚本文件保存成UTF-8带BOM,服务器读出来变成乱码,ADDSKILL识别不了就报未定义技能。

CHECKLEVELEX等级检测报错,问题集中在变量比较的写法上。正确格式是CHECKLEVELEX > 40,中间有空格。写成CHECKLEVELEX>40没空格,或者写成CHECKLEVELEX >40少一个空格,脚本解释器解析到这一行就卡住。另外检测等级时调用了未初始化的临时变量也会报,比如先检测一个没赋值的变量再去比对等级,脚本引擎找不到变量直接跳过整段逻辑。

GIVE命令给物品时出错,看物品数据库里有没有这个物品。GIVE 裁决之杖 1 这个东西在DB里叫裁决之杖,但脚本里写成了裁决,物品名不匹配就触发错误。检查Mir200\Envir\DB目录下的物品数据库,确认完整名称再写进脚本。如果数据库里物品名称包含特殊符号,比如圣战戒指(极品),括号要写英文半角,中文括号会被当作非法字符。

TAKE命令回收物品时报错,多数是因为目标角色背包里没有指定物品。脚本里写了TAKE 金币 10000,但玩家身上只有5000金币,TAKE命令无法执行,后续的奖励脚本整个中断。正确做法是在TAKE之前加CHECKGOLD检测金币数量,数量不足就跳转到其他对话分支,别让TAKE命令硬执行。

SET和CHECK这类变量命令报错,根源是变量名冲突或类型不匹配。个人变量用P0到P9、D0到D9,全局变量用G0到G99。如果在同一个脚本里把P0当作字符串存,后来又用数值方式读取,脚本解释器会报类型转换错误。还有一种情况是变量名写重复了,两个NPC同时写入同一个全局变量G10,后面的写入会覆盖前面的,导致逻辑混乱报错,解决方法是改用不同的全局变量编号或者加锁处理。

MAPMOVE传送命令报错,检查地图编号存不存在。MAPMOVE 3 333 333 这个命令里,地图编号3代表盟重省,如果版本里没有编号3的地图文件,传送失败弹脚本错误。地图编号后面跟的坐标也要落在合法范围内,盟重的坐标范围是0到600,写MAPMOVE 3 800 500直接超出地图边界,报错卡死。

KILLMON杀怪触发报错,问题出在怪物名称匹配上。脚本里写KILLMON 暗之双头血魔,但刷出来的怪物全名叫暗之双头血魔001,后面跟了随机编号,名称对不上就不触发杀怪计数。解决办法是在怪物名称后面加通配符,用KILLMON 暗之双头血魔* 匹配所有变体。

紧急处理方式:脚本报错弹窗后,服务器控制台会输出详细的错误行号和文件路径。打开Mir200\Envir\Market_Def或QuestDiary目录,找到对应NPC的脚本文件,用文本编辑器打开,定位到报错行号。看这一行前后几行的逻辑关系,最常见的修复是补上缺失的变量声明,或者把中文字符替换成英文符号。改完保存文件,在游戏里重加载NPC脚本,不需要重启整个服务器。重加载命令是@reloadnpc,后面跟NPC名字,输入后报错消失。

如果脚本错误不影响角色登录和基本移动,只是某个特定NPC点不开,可以暂时避开那个NPC。等服务器维护时集中修复脚本文件,平时打怪和交易走其他NPC完成。