传奇脚本基础语法文件分类编写调试方法与常用指令实操制作教程

来源: 作者: 点击:
传奇脚本依托引擎内置指令运行,不同引擎命令存在差异,先确认当前使用的引擎类型,主流分为GOM、GEE、HERO、BLUE,命令库、变量、标签写法各有区别,同一段脚本直接跨引擎使用大概率报错。脚本文件大多为txt文本格式,使用系统记事本或者代码编辑器打开编辑,不要使用带自动排版的文字软件,避免出现不可见特殊字符引发读取失败。

脚本按照功能划分不同文件,每个文件有固定作用,不能随意放错位置。NPC对话脚本存放在Mir200\Envir\Merchant.txt登记NPC信息,对应的NPC文本放在Mir200\Envir\Market_Def文件夹,每个NPC单独一个txt文件,文件名和Merchant内登记的NPC文件名称保持一致。QFunction-0.txt是全局触发脚本,存放击杀怪物、拾取物品、登录、下线、使用物品、任务完成这类全局事件,位置在Mir200\Envir目录。QManage.txt负责角色登录初始化、变量重置、上线公告、登录检测,角色进入游戏最先读取这个文件。其他配套脚本还有Robot.txt定时机器人脚本、UnbindList.txt解绑脚本、QuestDiary文件夹下的任务存档脚本,QuestDiary用来存放玩家独立任务标记、分组记录,适合一次性任务、每日次数任务的数据保存。

基础语法是制作脚本的核心,标签使用@开头,作为跳转标记,比如@main是NPC默认入口标签,玩家点击NPC优先读取@main下的内容。条件判断以#IF开头,后面写检测条件,满足条件之后执行#ACT里的动作,#SAY用来输出对话框文字,换行使用\,多条文字分行书写。#ELSEACT代表前面条件不满足的时候执行的动作,#ELSESAY对应条件不满足时显示的对话内容。一套标准结构顺序固定,先#IF写判断,接着#ACT执行动作,#SAY展示文字,条件分支按顺序排布,调换顺序会导致判断逻辑错乱。

变量分为全局变量、个人变量、任务变量,个人变量仅对当前玩家生效,切换角色不会互通,适合记录单个玩家任务进度、次数、状态。全局变量全服共用,修改之后所有玩家读取到相同数值,多用于全服活动、BOSS刷新计数。DAYCOUNT是引擎自带按日期重置的次数变量,适合每日任务,服务器时间到零点自动清零计数,不需要手动写清理逻辑。GROUP持久分组标记,写入之后永久保存,角色下线、服务器重启都不会消失,适合标记一次性任务是否完成。TASK系列任务变量配套引擎任务系统,用于记录杀怪数量、物品收集数量,配合ADDTASK、CHECKTASKCOUNT使用。

制作NPC对话脚本是入门首选,先在Merchant.txt注册NPC,格式为NPC名称 地图编号 X坐标 Y坐标 形象编号 脚本文件名。注册完成之后在Market_Def新建对应名字的txt,写入@main入口,搭配条件检测、动作指令、跳转标签。等级检测使用CHECKLEVELEX,检测背包物品用CHECKITEM,检测金币CHECKGOLD,检测元宝CHECKGAMEGOLD,传送指令MAPMOVE,给予物品GIVE,扣除物品TAKE,关闭对话框CLOSE,弹窗提示MESSAGEBOX。写文字的时候注意换行符\的使用,文字过长不换行会挤在同一行对话框,影响显示效果,按钮跳转格式为<文字/@标签名>,点击按钮就跳转到对应的标签段。

任务脚本制作分为杀怪任务、物品收集任务、对话任务三类。杀怪任务需要两处配合,NPC脚本负责接取、交付、次数校验,QFunction-0内[@KillMon]分支做击杀判断,击杀对应怪物时增加任务计数,达到设定数量触发任务完成跳转。物品收集任务两种写法,一种拾取触发计数,在[@PickUpItem]里面判断拾取物品,自动累加数量,达标弹窗;另一种是交付时只检测背包物品,没有实时弹窗,玩家自行收集完成再来NPC处交付。单次任务用GROUP标记,领取前判断是否已经加入分组,存在分组就拒绝领取;每日次数任务用DAYCOUNT,领取之前判断今日次数上限,超出上限拦截。所有任务标识不能重复,标识重复会造成任务计数互相干扰。

物品触发脚本写在QFunction-0的[@UseItem]标签下,判断玩家使用指定物品,执行传送、加buff、召唤、开启礼包等动作。定时活动脚本写在Robot.txt,设置执行时间,到达指定时间自动执行脚本,比如定点刷BOSS、全服提示、回收活动。登录触发逻辑放在QManage.txt的[@Login],角色上线时读取玩家存档变量、重置临时标记、发放上线奖励。

脚本编写完成之后不能直接生效,需要重载对应脚本,NPC脚本使用GM命令RELOADNPC,QFunction脚本重载命令RELOADQF,机器人脚本RELOADROBOT,每次修改保存之后必须重载,不然游戏内还是旧逻辑。重载之后进游戏测试,按照流程一步步走,先测试条件不满足的拦截分支,再测试正常流程,最后测试边界情况,比如任务满次数、背包空间不足、身上任务未完成、等级不够这些场景。

调试阶段常用GM辅助命令,CHECKVAR查看变量数值,SETVAR手动修改变量,ADDTASK手动添加任务,DELTASK清除任务,CLEARDAYCOUNT清空当日次数。遇到不生效的情况,优先查看M2控制台日志,日志会输出脚本报错行数、错误指令,根据日志定位问题。常见错误包含标签名称写错、条件顺序颠倒、物品名怪物名和数据库不一致、多了空格或者换行符号、Merchant里面NPC注册信息写错坐标地图、文件编码不是ANSI,很多编辑器默认utf8编码,读取后中文乱码,保存的时候切换成ANSI编码可以解决乱码。

进阶脚本可以增加随机逻辑、概率判定、多分支选择、装备检测、技能检测、行会检测,检测行会用CHECKGUILD,检测身上装备CHECKITEMW,检测技能CHECKSKILL,概率使用RANDOM指令,RANDOM 10代表0到9随机取值,用来做奖励随机发放。buff类脚本使用ADDBUFF、DELBUFF,设置持续时间和属性加成。

编写的时候养成分段注释的习惯,注释以;开头,引擎不会读取注释内容,用来标记这段脚本功能、变量含义、参数说明,后期修改维护更容易看懂。不要一次性写很长的大段脚本,拆分功能分段测试,先做好领取逻辑测试,再做计数逻辑,最后做交付和奖励发放,一段确认没问题再继续写下一部分,一次性写完很难排查问题。

不同引擎细节差异需要留意,GOM支持TASKITEMCOUNT物品任务计数、MESSAGEBOX弹窗自带确认跳转,HERO没有内置任务系统,需要依靠个人变量自行记录杀怪数量,GEE语法贴近GOM但是部分变量命令名称存在改动。拿到别人分享的现成脚本,第一步先核对引擎适配性,替换里面的地图编号、坐标、物品名称、任务标识,再放到对应目录重载测试,不要直接原样导入。

脚本制作没有固定模板,核心是拆解需求,把想要实现的效果拆成判断条件、执行动作、跳转分支三个部分,先理清流程顺序,再对应挑选引擎指令拼接,熟悉常用指令之后,就可以自主制作NPC、任务、活动、礼包各类脚本。