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

传奇显示脚本错误传奇装备脚本错误修正方法按日志行号与命令规范排查

热度:
传奇服务端弹出“脚本错误”或在穿戴、打造、回收、掉落装备时触发异常,引擎控制台(M2Server)和Mir200\Log\M2Server-日期.log里一定会给出三段关键信息:出错文件名(如QFunction-0.txt、Market_Def\装备使者.txt、QuestDiary\装备触发\xxx.txt)、标签名([@StdMode0]、[@UseItemEx]、[@Main])、行号(Linexx)。先抄下这三段,再按下面模块修,不要全局重写脚本。

一、先定位文件物理路径与加载关系
装备相关脚本分布位置:
•NPC兑换/发放:Mir200\Envir\Market_Def\对应NPC名.txt

•穿戴/拾取/使用触发:Mir200\Envir\QuestDiary\自定义目录\xxx.txt,全局事件在QFunction.txt/QFunction-0.txt

-装备附加属性/触发特效:Mir200\Envir\ItemScript.txt或Item目录下同名文件(如屠龙.txt)
•怪物爆装备:Mir200\Envir\MonItems\怪物名.txt、MonDrop.txt

-合成/强化/鉴定:Mir200\Envir\QuestDiary\合成类目录\xxx.txt
•物品基础库:Mir200\Envir\StdItems.txt或Mud2\DB\StdItems.DB

报错写“Failedtoloadxxx.txt”就是路径错、文件名多空格、放错目录、或引擎没加载该QuestDiary子目录。把文件挪到引擎实际读取的目录,文件名和MapQuest_def/Merchant.txt里定义的NPC文件名严格一致。

二、基础语法与编码(占报错60%以上)
1.编码:所有.txt脚本必须用ANSI(GBK/GB2312),不能用UTF-8、UTF-8BOM、Unicode。用Notepad++打开→编码→转为ANSI编码→保存,重启M2或点“重读NPC脚本/重读QF脚本”。用系统记事本另存为时也必须选ANSI。
2.标点:全用英文半角,中文“,”、“;”、“()”必炸,全部替换。行首行尾多余空格、Tab、空行删掉。
3.标签与结构:
•[@标签名]顶格写,前面不能有空格/Tab

•#IF后必须紧跟#ACT/#SAY/#ELSEACT,中间夹普通文本会断链

-单段逻辑结束加BREAK,多段嵌套结束加#ENDIF
•GOTO@xxx必须存在对应[@xxx],标签不重复

4.命令大小写:GIVE、CHECKITEM、TAKE、MAPMOVE、SET、MOV、SENDMSG等全大写,写Give/Checkitem直接Unknowncommand。命令与参数间一个空格,不多不少。

三、装备专属错误逐类修正
1.物品名/ID不匹配
GIVE屠龙1、CHECKITEM雷霆战甲1里的名字必须和StdItems.DB/StdItems.txt里一字不差(含括号、空格、全角符号)。数据库里叫“雷霆战甲”,脚本写“雷霆铠甲”→引擎找不到物品ID→脚本错误。批量新增装备后ID重复、空行、字段错位也会全域报错,进DBC2000/文本对齐清一遍。
2.参数数量/格式错
•GIVE装备名数量→数量必填正整数,写GIVE屠龙或GIVE屠龙12都错

•@GiveItem装备ID数量持久→三参缺一不可,且用ID不用中文名

-属性值超范围(攻击上限、持久DuraMax、爆率0-100)填负或超限→参数无效报错
3.StdItems字段错
StdMode(装备类型)、DuraMax、AC、MAC、Weight字段数不一致、缺字段、类型冲突(防具写PoisonAttack)→加载即报错。对照同版本同类型装备行对齐。
4.触发类脚本(QFunction/ItemScript)
•[@StdMode0]对应武器、[@StdMode1~28]对应各装备位,标签拼错(@StdMode_0)不生效

•ADDBUFF麻痹110里buff名必须在Buff配置里存在

-Magic0=10015魔法编号必须在Magics.txt范围内,持续时间0会异常
5.合成/回收逻辑断点
正确顺序:#IFCHECKITEM材料11→#ACTTAKE材料11→GIVE成品1→BREAK。漏TAKE、概率写101、材料名错、没BREAK继续往下执行→弹脚本错误。
6.引擎命令不兼容
HERO、GOM、GEE、BLUE、翎风命令集不同。GOM的BindAttr、GEE的扩展触发写到HERO里直接Unknowncommand。拿不准就查当前引擎命令表,或用引擎自带脚本转换工具批处理。

四、变量与逻辑冲突
•HUMAN/GLOBAL/N/S/M变量首次用之前必须初始化(MOVS100、VARHUMAN变量名)

•未赋值直接参与EQUAL/SMALL/LARGE判断→变量未定义报错

•两段脚本都写[@Main]、[@GetEquip]→跳转错乱,加前缀区分(@War_GetEquip)

五、改完生效动作
1.M2Server→重新加载→重读QF脚本/重读NPC脚本/重读Merchant
2.仍不行就全量重启DBServer→LoginGate→M2Server→GameGate
3.改StdItems.DB必须重启DBServer,热重载读不到新条目
4.客户端显示属性不对还要用Label工具重生成Mir2\Data\StdItems.def,保证服务端ID和客户端补丁一一对应

六、快速隔离法
报错不知道哪段时:把疑似文件改名.bak→重载脚本→不报了就说明病在这文件→分段注释(;开头)往下放,定位到具体行再改。改前先备原文件。

按“日志行号→文件→编码/标点→命令拼写→物品名/参数→标签结构→引擎兼容”这个顺序走,装备脚本错误都能落到具体行修掉,不用重做整套脚本。
[顶部]