传奇翎风引擎M2报脚本错误怎么改

来源: 作者: 点击:
清风引擎换翎风引擎后 M2 狂报脚本错误,本质不是“脚本坏了”,是两家引擎的脚本解析器、命令集、变量规则、NPC 触发方式不一样。清风(含一些老 GOM/GEE 分支)里能跑的 @XXX、#IF/#ACT/#ELSEACT、自定义变量、功能命令,到了翎风不一定认;翎风更靠近新 GEE/类 GOM 分支,对格式、空格、变量作用域、触发标签管得更死,老服直接换引擎就像把 Win98 程序塞进新系统。

先分清报错的三种位置:
1. M2 启动时报:读 QFunction-0.txt、QuestDiary、Market_Def 里某行格式错 → 脚本加载阶段就炸。
2. 进游戏点 NPC 时报:某个 NPC 脚本命令不支持 → 玩家点一下 M2 红一行。
3. 打怪/死亡/登陆/交易时后台红:QFunction 或 Robe 类触发脚本用了老命令 → 事件触发才炸。

别一上来全删脚本,按下面顺序来。

一、先开 M2 的脚本校验,别盲改

翎风 M2 → 选项 → 参数设置 → 脚本/引擎参数里,找“脚本报错停止/脚本报错忽略/未知命令处理”。
- 老服过渡期先把“未知命令”设成记录日志但不中断 NPC,能先让服跑起来,再慢慢修。
• 别长期开“忽略所有”,不然逻辑错了也不报,后期更难查。

• 勾上“脚本错误写 Log\ScriptError.txt”,看具体文件名+行号,比看 M2 控制台红字有用。

二、清风和翎风命令差异,先对这张表

老清风里常见、翎风不认或改名的东西:

• THROW / GOTO 老写法 → 翎风认 GOTO @标签,但别写 GOTO 123 这种数字标签。

- MAPMOVE → 翎风一般用 MAPMOVE 地图 坐标X 坐标Y 或 MoveTo,参数顺序可能不同。
• GiveItemEx / AddItemEx → 翎风部分分支用 Give 物品 数量 或 AddItem,扩展参数(绑定/时效)写法变了。

- Set <$STR(N)> 老字符串变量 → 翎风更吃 <$USERVAR(N)> / 自定义变量要先 Var 类型 声明。
• CHECKITEMW / CHECKGOLD 老拼法 → 翎风多认 CHECKITEM / CHECKGAMEGOLD / CHECKBAGUA 等,金币、元宝、绑定元宝变量名不同。

- EXECUTE 里套 NPC 对话 → 翎风对 #ACT 后执行另一段 @子程序 的作用域更严,跨脚本 CALL 要放对目录。
• 清风某些“变态命令” SetPower、AddMonXxx、OpenShopEx → 翎风没这命令就直接报“未知脚本命令”。

最稳做法:把 M2 报错的行抄出来,去翎风自带 QuestCommandList.txt / EngineCommand.txt 里搜。搜不到就是引擎不支持,搜到但参数不对就是老脚本写法要改。

三、QuestDiary 老脚本批量修点

1. 标签必须独立行

@main
#IF
...

别写 @main #IF 挤一行,翎风解析比清风严。
2. 变量引用别带空格
<$STR(1)> 和 <$STR(1) > 在翎风里可能当两个东西。
3. 自定义变量先声明
清风里随手 <$MYVAR> 能用,翎风常在 QFunction 里要求:

Var MYVAR String

或放 Variable.ini 里配。
4. 随机命令
Random 10 / PlaySound 10 参数个数变了就报。翎风随机一般用:

#IF
RANDOM 10
#ACT
...

别用清风私改的 Random(10,30) 这种类 C 写法。
5. 延时/等待
清风 Delay 1000 翎风可能要 DELAY 1000 或根本不允许在 NPC 脚本里延时,要扔给定时器/QFunction。
6. 发送客户端消息
SENDMSG 0 你好 / SENDMSG 6 你好 通道号含义可能变,翎风有的版本 0 是系统、有的 6 是行会,发错不炸但显示怪。
7. 打开界面
OpenDiamond OpenShop OpenGuildStore 这种清风服二开出来的命令,翎风原版没有,就要么装对应插件,要么改成标准 OpenURL / 自定义 NPC 列表。

四、QFunction-0.txt / 触发脚本怎么处理

登陆、死亡、杀怪、捡物、交易、穿装备触发,清风二开版常加私有触发名:
• @OnLoginEx

• @KillMonsterPlus

• @PickItemHook

• @EquipItemHook

翎风只认自己那套:
• @OnLogin

• @OnDeath

• @OnKillMonster

• @OnPickupItem

老脚本里 @OnLoginEx 不会被调用,但如果在 QFunction 里写了非法命令,M2 加载就红。处理法:
1. 把 QFunction-0.txt 备份。
2. 新建空 QFunction-0.txt,服能起。
3. 把老触发逐段粘回来,每次粘一段开一次服,哪段红就是那段用了清风私有命令。
4. 私有命令要么删,要么用翎风等价命令重写,要么写成 NPC 功能让玩家手动点。

五、Market_Def / NPC 定义文件

清风 NPC 文件头:

; 武器店
[@Main]
#IF
#ACT
SendMsg ...

翎风要求文件名、目录、NPC 名、地图坐标、脚本段对得上。常见坑:
• 老服 Market_Def\绑定元宝商人.txt 翎风要放 Envir\Market_Def\ 且 M2 里 NPC 列表有这名字。

• 脚本里 CHECKMAP 3 地图号在翎风数据库里没配,就报“地图不存在”。

• MONSTER 刷怪脚本里清风用 ; 参数: 名字 地图 x y 范围 数量 间隔 注释格式,翎风刷怪常走 MonGen.txt,Market 里再写 MonGen 参数就错。

六、物品/技能/魔法数据库对不上

脚本里 Give 火龙剑 1,翎风 StdItems.db 里没“火龙剑”,不会给东西但可能报“物品不存在于数据库”。
先跑一遍:
• StdItems.db 比对

• Magic.db 比对

• Monster.db 比对

清风加的自定义装备、技能、怪物,换翎风后数据库没导过去,脚本全在空引用。

处理:
1. 导出清风 StdItems/DB 里自定义行。
2. 按翎风字段映射贴进去(攻击上下限、持久、幸运、特效字段名可能不同)。
3. 脚本里物品名严格一致,别“火龙剑”和“火龍剑”混着用。

七、变量和元宝体系最容易炸

清风服常改:
• 元宝 = GAMEGOLD

• 绑定元宝 = GAMEPOINT

• 金币 = GOLD

翎风默认也可能这样,但二开过的翎风把:
• 充值币

• 赞助点

• 转生点

• 行会贡献

全做成新变量。老脚本 CHECKGOLD 100 本来查金币,服主以为查元宝,换引擎后变量映射Reset,逻辑全歪,M2 还可能因为 CHECKGAMEGOLD 没开支持而报错。

去翎风 M2 → 游戏参数 → 货币/变量 里把:
• 金币

• 元宝

• 绑定元宝

• 点券

• 转生点

对应关系拍死,再全局替换老脚本里的 GOLD/GAMEGOLD/GAMEPOINT。

八、插件和二开模块别想自动兼容

清风老服如果装过:
• 会员系统

• 转生扩展

• 合成扩展

• 跨服

• 自动任务

• 沙巴克扩展

换翎风后这些 DLL / Lua / 插件不是同套 API,老脚本调 PluginCall 1001 直接未知命令。表现就是:M2 启动说“加载插件失败”,点或触发又说“脚本命令 X 不存在”。

处理:
• 先裸翎风 + 原版脚本跑通

• 再一个个加插件

• 老二开功能要么找翎风版重做,要么砍掉

别指望“换引擎不换功能”能平稳过渡,传奇引擎换族 = 重做一遍二开。

九、最快落地流程(照做就行)

1. 全量备份:DB、Envir、Map、WIL/WIX、登陆器、M2、插件。
2. 翎风干净版先起一个空服,确认 M2 不红。
3. 把老 Envir\QuestDiary 整个移走,用翎风自带示例 QuestDiary 起服。
4. 老 QuestDiary 按地图/功能拆成小文件,一次挂一个目录。
5. 每挂一个,进游戏点对应 NPC、打怪、死亡、登陆,看 M2 红什么。
6. 红行贴到翎风命令表查:不支持就删/换,参数错就按翎风语法改。
7. QFunction 同理,空文件起步,逐段加。
8. Market_Def NPC 先只留杂货铺、仓库、药店,跑通再补活动 NPC。
9. 数据库先导原版,再合并清风自定义行,字段对齐再写脚本。
10. 货币/变量/转生/会员这些“系统级”先定标准,再全局替换老脚本变量名。

十、常见报错翻译

• Unknown script command: XXX → 翎风没这命令,清风私有。

• Error in line 123 of QuestDiary\XXX.txt → 那行格式/命令/变量错。

• Variable not declared → 自定义变量没声明。

• Item not found → 数据库没这物品。

• Map not found → 地图号/MapInfo 没导。

• NPC not found → Market_Def 和 M2 NPC 列表对不上。

• Cannot call @XXX → 标签不存在或跨文件作用域不对。

• QFunction load error → 触发脚本有非法命令,别急着开服。

• Stack overflow in script → 老脚本 GOTO 死循环,翎风比清风更早崩。

十一、别用“自动转换工具”当终点

网上有“清风转翎风脚本转换器”,最多帮你把明显命令名替换掉,替换完照样红一片,因为:
• 参数顺序它不懂

• 自定义变量作用域它不懂

• 二开插件调用它不懂

• NPC 触发时机它不懂

转换器当粗筛可以,别当修完。真修完的标准是:M2 起服 24 小时不红、玩家点全部 NPC 不红、杀 BOSS/死亡/合服/攻沙不红。

十二、实在改不动的老功能

把老清风里“变态合成、自动转生、满级送神装、沙巴克自定义技能”这些二开重活,换成翎风生态里现成模块:
• 翎风自带转生

• 翎风商城/NPC 合成

• 翎风任务系统

• 翎风行会/沙巴克扩展

老脚本里对应段直接删,用新引擎原生功能重做。玩家不在乎你背后是清风还是翎风,只在乎点 NPC 不卡、打怪给东西、合服不回档。

换引擎不是“把老服文件塞进新 M2”,是拿新引擎当底,把老服的地图、装备、怪物、活动逻辑重新落地一遍。脚本错误只是第一道坎,后面还有数据库字段、登陆器插件、PAK 密码、Map 格式、WIL 版本、网关参数。翎风吃新格式,清风老资源里 PAK/WIX/Map 也可能要重导,脚本修完如果还红,下一步就该查资源文件和 M2 插件版本了。

十三、改脚本时的硬规矩

• #IF/#ACT/#ELSEACT/#END 缩进可以不管,但顺序不能乱。

• 标签 @XXX 全文件唯一,别两个 NPC 里都写 @main。

• 中文标点全换英文:,→,,:→:,引号统一英文。

• 行尾别带隐藏空格,Notepad++ 开“显示所有字符”清一遍。

• 条件里别写空 #IF 后直接 #ACT 又套 #IF,翎风解析器比清风挑剔。

• 大量 GOTO 的老脚本,能改循环用 WHILE/FOR 就改,翎风对深层 GOTO 栈更敏感。

• 玩家输入 <$STR(输入)> 老写法,翎风常要 {输入} 或 <$INPUT> 看版本,输入类 NPC 最容易崩。

十四、登陆器别忘配套

M2 换翎风,登陆器要用翎风配套版;老清风登陆器能进新 M2 是运气,更多情况是:
• 资源列表对不上

• PAK 密钥不对

• 插件 DLL 加载失败

• 进游戏后点 NPC 传包格式错,间接让脚本表现异常

所以“M2 脚本错误”有时不是脚本真错,是老登陆器把错误格式包发上来,M2 解析 NPC 请求时炸。换引擎就把:登陆器、网关、M2、插件、PAK、Map、DB 当一整套换,别只换 M2 想着脚本自动活。

十五、一句话定位思路

清风换翎风后脚本红,先问自己三句:
• 这命令翎风原版有吗?

• 这变量/物品/地图在翎风数据库里存在吗?

• 这触发标签是清风二开私有,还是翎风原生触发?

三个回答里有一个“不是”,那行就得改或删。老服迁移最忌“原样拷贝”,传奇引擎这东西,换族不重做,红字能刷到你眼睛麻。

裸翎风跑通 → 老数据对齐 → 老脚本拆段回归 → 二开功能能换原生就换 → 登陆器网关配套 → 再谈活动 NPC 和合击/英雄/火龙那些花活。脚本不红只是门票,后面合服、跨服、攻沙、转生、特戒、运九、火龙碎片才是真工作量。