LEG引擎的杀怪触发脚本核心依赖QFunction-0.txt文件。该文件位于服务端Mir200\Envir目录下,引擎启动时会自动加载其中的触发规则。LEG引擎与GOM、GEE同源,但在触发标签命名上存在区别,GOM使用[@OnKillMob],LEG则使用[@KillMonster]作为杀怪触发的核心标识。写脚本前先确认标签名称是否与引擎匹配,标签写错脚本不会触发。
触发条件的写法需要精确匹配怪物名称。基础格式为[@KillMonster(怪物名称)],名称必须与服务端怪物数据库中的完全一致,包括标点符号和空格。如果怪物名称在数据库中有编号,也可以用编号替代,例如稻草人编号1写作[@KillMonster(1)]。若要同时匹配多种怪物,需要分别写多个触发标签,或者在#IF段用CHECKMONNAME命令做判断。LEG引擎的CHECKMONNAME语法与GOM略有差异,建议查阅对应版本的帮助文档确认参数格式。
条件判断段用#IF开头,支持的判断包括玩家等级、职业、地图、背包物品等。多个条件分行书写,所有条件都满足才会执行#ACT段的动作。一个常见错误是把#IF和#ACT写在同一行,或者条件之间用逗号而非换行分隔,这两种写法都会导致脚本解析失败。#IF段的每个条件单独占一行,写完所有条件后再换行写#ACT。
动作执行段是脚本的核心。常用命令包括ADDEXP加经验、GIVE给物品、SENDMSG发提示、GAMEGOLD加元宝、GAMEPOINT加充值点等。给物品时注意物品名称必须与数据库完全一致,数量为正整数。SENDMSG后面的数字是颜色代码,6是绿色,7是白色,1到255之间可选。多个动作命令按顺序执行,写在同一#ACT段内即可。
随机触发用MOVR命令配合EQUAL判断实现。例如想实现击杀怪物有三分之一概率掉落物品:先MOVR N0 3,然后EQUAL N0 0时执行给物品,EQUAL N0 1和EQUAL N0 2时执行其他动作或者留空。N0是临时变量,范围由MOVR的第二个参数决定,MOVR N0 3产生0、1、2三个值,每个值出现概率均等。如果只想让精英怪触发高概率奖励,可以在#IF段加CHECKMONNAME判断,普通怪和精英怪分别写不同的触发段。
变量使用要区分类型。M型变量是个人数字变量,切换地图后会自动归零,适合做杀怪计数。N型变量是临时变量,下线不保存,适合做随机判断。U型变量是个人数字变量且不会自动归零,适合做永久性统计。如果脚本中需要累计击杀数量,用INC命令配合M变量或U变量,INC M30 1表示M30自增1。用M变量做计数时要注意玩家切换地图后计数会重置,这是引擎设计如此,不是脚本错误。
脚本保存时编码格式很关键。QFunction-0.txt必须用ANSI编码保存,用UTF-8会导致中文字符乱码,进而使整个脚本加载失败。用记事本编辑时,另存为对话框底部有编码选项,选择ANSI。如果用Notepad++编辑,菜单栏编码选项中选择“转为ANSI编码”后再保存。
修改完成后需要重载脚本生效。在M2Server控制台输入@ReloadScript或者直接重启服务端。部分版本的重载命令是“刷新触发”或“ReloadQFunction”。重载后观察控制台是否有报错信息,如果提示“脚本加载失败”或“标签未找到”,通常是语法错误或标签拼写问题。
调试阶段建议先用简单测试验证触发是否正常。写一个最简单的[@KillMonster]段,只加SENDMSG 6 测试,杀一只怪看是否弹出提示。如果没反应,检查三个地方:QFunction-0.txt路径是否正确、标签名是否与引擎匹配、M2是否开启了杀怪触发功能。触发正常后再逐步加入条件判断和奖励命令。
一个容易忽略的问题是部分LEG版本要求地图文件配合。某些版本的地图配置中需要带ONKILLMON参数才会回调杀怪触发,具体查看MapInfo.txt中对应地图行的末尾是否有该参数。如果杀怪不触发而其他功能正常,检查地图配置。此外,如果使用了英雄系统,英雄击杀怪物是否触发脚本取决于引擎版本,部分版本只处理人物击杀,英雄击杀不回调。
脚本过长时建议拆分成多个标签用GOTO跳转。例如触发段只做条件判断和跳转,奖励逻辑单独写一个标签,这样QFunction-0.txt的主文件不会过于臃肿,也便于后期维护和排查错误。跳转标签用@开头自定义命名,GOTO命令后跟标签名即可。每个逻辑段末尾加BREAK结束当前段,避免脚本继续向下执行到无关段落。
传奇LEG引擎杀怪触发脚本编写与调试要点
来源:
作者:
点击:

