脚本文件本身书写错误是最普遍的一类问题,命令关键字拼写出错,括号、分号、冒号、等号等符号使用中文全角符号替代英文半角符号,都会直接触发报错。变量定义前后不统一,前面定义的变量名称和后面调用时字母大小写不一致,部分引擎区分大小写,识别不到变量就弹出错误提示。分支判断语句缺少闭合,比如if没有对应的end,或者goto跳转标签没有在脚本里写出,调用不存在的标签,读取时直接中断执行。参数数量不对,部分内置功能命令需要传入固定个数参数,多写或者少填参数,顺序颠倒,引擎解析时判定格式非法。
文件编码和换行格式不匹配也会引发异常,脚本保存的时候选用utf-8带bom格式,而引擎只支持ansi编码,打开读取的时候识别出乱码字符,直接报脚本错误。使用记事本编辑脚本,换行符异常,存在多余不可见控制字符,复制粘贴网页上的脚本代码时,经常附带隐藏的空白字符,肉眼看不见,引擎解析阶段识别失败。脚本文件名称带有特殊符号、空格,或者文件名过长,引擎加载时读取失败。
数据库关联配置出错也会连带脚本报错,脚本内调用物品、怪物、技能编号,但是数据库里面没有对应编号,编号写错,物品名称和数据库内名称不一致,读取这条记录的时候抛出异常。脚本调用自定义NPC、自定义技能,但是对应的素材补丁没有配套,或者数据库字段缺失,虽然脚本语法没问题,执行到读取数据环节就中断。
引擎版本和脚本语法不兼容是高频问题,不同系列引擎支持的脚本指令集不一样,其他引擎的脚本直接拿来使用,里面独有的函数、命令在当前引擎不被识别,加载的时候直接报错。引擎版本过低,新的脚本命令只有高版本引擎才能支持,低版本没有对应解释模块,无法解析命令。引擎本身文件损坏,M2主程序、脚本解释组件文件缺失,读取任何脚本都容易出现报错弹窗,这种情况表现为多个脚本同时报错,不局限单一个文件。
脚本路径、权限和读取加载规则问题,脚本存放的文件夹路径层级太深,或者路径包含中文,部分引擎对中文路径兼容性差,加载失败。脚本文件被其他程序占用,编辑器一直打开锁定文件,引擎刷新读取的时候无法完整读取内容。权限限制导致引擎无法修改、读取脚本文件,更新脚本之后没有重载NPC或者重载脚本,改动内容没有生效,旧的错误脚本持续运行。
运行时动态触发的执行类报错,脚本里面做数值计算,出现除以零、读取空数组内容,正常加载不会报错,触发到对应逻辑才弹出错误。脚本循环没有退出条件,死循环持续占用资源,内存溢出之后抛出脚本错误。脚本读取地图、坐标,地图编号不存在,地图已经关闭,角色进入地图触发脚本时直接报错。计时器、定时脚本重复注册,多次启动同一个定时器,参数冲突,运行一段时间后异常中断。
还有一些附加的外部因素,登录器、网关组件和引擎版本不匹配,通信转发过程中解析脚本指令异常。脚本内调用外部插件功能,插件没有加载、插件命令失效,执行到插件调用行就报错。脚本里面的延时、倒计时逻辑和引擎内置时间机制冲突,时间格式书写错误,也会弹出提示。
排查的时候优先记下报错弹窗提示的行号,打开对应脚本文件定位到该行,先检查符号、拼写、参数。单独测试脚本,把有问题的脚本单独注释分段,逐步取消注释定位出错段落。核对引擎说明文档,确认命令是否被当前引擎支持,统一使用ansi编码保存,删掉多余隐藏字符,检查数据库编号匹配情况,修改完成后执行重载脚本,不用重启服务端。
传奇脚本报错常见触发源头、文件问题与引擎配置相关故障排查说明
来源:
作者:
点击:

