传奇脚本的使用需要先理解三个基础环节:脚本文件存放在哪里,用什么语法格式编写,以及写完以后怎么让引擎加载生效。很多新手拿到脚本代码却不知道往哪个文件夹放,改完脚本发现游戏里没有任何变化,根本原因就是这三个环节中至少有一个没走通。把路径、语法、加载这三件事理清楚之后,绝大多数脚本功能都能正常运转。
**脚本文件的存放路径与目录结构**
传奇服务端的核心目录是Mir200,所有脚本文件都放在Mir200下的Envir文件夹里。Envir文件夹下面有几个关键的子目录,各自承担不同的脚本功能。MapQuest_Def文件夹存放的是任务型脚本,核心文件是QManage.txt,用于执行角色登录数据、活动任务、计时任务等。Market_Def文件夹是NPC脚本文本的默认存放路径,同时存放触发类脚本QFunction-0.txt。QuestDiary文件夹是功能脚本的默认存放处,当脚本调用没有指定完整路径时,引擎会自动到这个文件夹下寻找对应的文本文件。Robot_def文件夹下有两个文件,AutoRunRobot.txt负责控制机器人的执行时间,RobotManage.txt负责存放具体的执行内容。
NPC的配置信息存放在Envir目录下的Merchant.txt文件中,记录了每个NPC的名称、所在地图、坐标、形象类型以及是否属于沙巴克等属性。NPC脚本文件命名时需要包含地图名称、X坐标、Y坐标、NPC名称和标志等信息,引擎通过文件名来关联Merchant.txt中的配置。
**脚本的基础语法与命令结构**
传奇脚本命令分为两种类型:检测类型和执行类型。检测类型的命令只能写在#IF下面,执行类型的命令只能写在#ACT或#ELSEACT下面。引擎执行脚本时从上往下逐行读取,顺序不能颠倒。必须先检测玩家条件,检测通过之后再执行对应命令。就像买东西一样,要先确认客户有没有足够的钱,确认之后才能把东西交出去,顺序反了整个逻辑就失效了。
一个完整的脚本段落由标签、条件检测和执行动作三部分组成。标签以@开头标识脚本段落,比如@MAIN是主对话入口。条件判断用#IF,执行动作用#ACT,条件不满足时的分支用#ELSEACT。对话内容用#SAY输出,#ELSESAY用于条件不满足时的对话显示。
常用检测命令中,CHECKITEM用于检查角色背包中是否拥有指定物品及数量,CHECKGOLD检查金币数量,CHECKLEVEL检查人物等级,CHECKJOB检查职业类型,CHECKPKPOINT检查PK值。物品操作命令方面,GIVE给予玩家物品,TAKE从玩家背包收取物品,CHECKITEMW检查装备栏中是否穿戴了指定物品。地图传送命令MAPMOVE可以将玩家传送到指定地图的坐标位置,MONCLEAR清理地图上的怪物,SENDMSG发送消息提示。变量操作方面,MOV用于赋值,CALC用于计算,CHECKVAR检查变量值,SET设置变量标志位。
脚本中的注释用分号或双斜杠标识,引擎不会执行注释内容。NPC对话框中的换行用反斜杠加反斜杠表示,文字换行后在新一行继续显示。
**NPC脚本的编写示例与实战逻辑**
一个完整的NPC脚本从标签开始,先显示对话内容,然后列出选项让玩家选择。玩家点击选项后跳转到对应的子标签执行具体操作。@MAIN标签下用#SAY显示欢迎文字,用@Option列出可点击的选项文字,每个选项后面跟一个跳转标签。玩家点击选项后脚本跳转到对应标签,在标签下用#IF检测条件,检测通过则用#ACT执行动作,比如给予物品或者传送地图,执行完毕后用BREAK中断脚本或CLOSE关闭对话窗口。
以传送NPC为例,脚本流程是:@MAIN显示“需要传送服务吗”,下面列出三个选项分别跳转到@传送比奇、@传送盟重、@关闭。@传送比奇标签下直接MAPMOVE将玩家传送到比奇省指定坐标,然后BREAK结束。如果需要收取传送费用,可以在#IF下加CHECKGOLD 1000,检测玩家金币是否充足,不足则#ELSESAY提示金币不够。
触发类脚本和NPC脚本的编写逻辑一致,区别在于触发方式不同。QFunction-0.txt中的脚本不需要玩家点击NPC触发,而是由游戏事件自动触发。常见的触发事件包括人物升级、人物死亡、杀死指定怪物、双击物品等。杀死怪物触发的格式是在QFunction-0.txt中写(@OnKillMob),下面用#IF CheckKillMonName检测怪物名称,检测通过后在#ACT中执行奖励命令。
**机器人脚本与定时任务的使用**
机器人脚本用于实现服务器的定时操作,比如每隔一段时间清理地图、修理装备、发放福利等。AutoRunRobot.txt负责定义执行时间,格式是#AutoRun NPC 时间单位 值 执行内容。时间单位支持HOUR、MIN、SEC和RUNONDAY,分别代表小时、分钟、秒和每天定时。例如#AutoRun NPC HOUR 4 @清空天下第一表示每4小时执行一次清空操作,#AutoRun NPC RUNONDAY 7:00 @早上提示表示每天早上七点执行提示, #AutoRun NPC MIN 2 @秒修装备表示每2分钟修理一次装备。
RobotManage.txt存放具体的执行内容脚本。AutoRunRobot.txt中调用的@清空天下第一、@早上提示这些标签,具体的命令都写在RobotManage.txt里。两个文件配合使用,AutoRunRobot负责控制时间节奏,RobotManage负责执行具体操作。
**不同引擎的脚本命令差异与兼容处理**
GOM、GEE、HERO、BLUE等引擎在脚本命令命名上存在差异,同一功能在不同引擎中的命令写法不同。玩家传送功能,GOM引擎用MAPMOVE,GEE引擎用MOVETOMAP,HERO引擎用CHANGEPOS,BLUE引擎用TELEPORT。刷怪命令,GOM用MONSTER,GEE用SPAWNMONSTER,HERO用ADDNPC,BLUE用CREATE_MONSTER。修改玩家属性的命令,GOM用CHANGEUSERATTR,GEE用SETUSERVALUE。
变量声明方面,GOM引擎用Local关键字声明局部变量,GEE引擎用VAR关键字。消息发送函数,GOM直接用SendMsg,GEE需要加EXEC前缀调用SendPlayerMessage。移植脚本到不同引擎时,需要将原引擎的命令逐一替换为目标引擎对应的命令,不能直接复制粘贴。转换前先确认目标引擎的类型,然后对照命令替换表逐条修改。
**脚本的安装加载与修改生效流程**
把脚本文件放到正确路径之后,引擎不会自动识别新文件,需要手动加载。简单覆盖方式是将脚本文件复制到对应的Envir子目录下覆盖原文件,然后重启M2Server让引擎重新读取。更高效的方式是通过GM命令热重载,在游戏中使用@ReloadMerchant或@重新加载NPC强制M2Server重新读取Envir目录下的NPC脚本文件,修改QFunction类脚本后用@ReloadManage重新加载管理脚本。996引擎支持更便捷的热重载命令,/reloadscript重新加载所有脚本,/reloadnpc重新加载NPC脚本,/reloaditem重新加载物品脚本。
如果修改脚本后游戏里没有任何变化,先检查三个方向。第一是脚本文件路径是否正确,QFunction类脚本要放在Market_Def文件夹下,地图触发脚本要放在MapQuest_Def文件夹下。第二是引擎是否重新加载了脚本,可以在M2Server控制台点击“脚本管理”,找到修改的脚本类型,选中文件点击“加载脚本”,加载成功会提示“脚本加载完成”。第三是脚本语法是否合法,编码需要用UTF-8无BOM格式保存,用系统自带记事本编辑可能导致编码错误。
脚本调试时可以借助SENDMSG命令输出变量值来确认数据是否正确,开启M2Server的调试模式查看脚本执行日志,分段测试脚本功能定位问题所在的段落。常见错误包括标签重复导致跳转异常、变量未初始化导致计算错误、循环没有退出条件导致死循环。编写脚本前先备份原文件,改错了可以随时恢复。
传奇脚本使用教程从基础语法到实战编写完整指南
来源:
作者:
点击:

