清风引擎换翎风引擎后 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 和合击/英雄/火龙那些花活。脚本不红只是门票,后面合服、跨服、攻沙、转生、特戒、运九、火龙碎片才是真工作量。

