传奇脚本是控制游戏内NPC交互、任务流程、物品操作、角色属性和全局事件的核心逻辑载体,所有游戏内的自定义玩法几乎都通过脚本实现,从基础语法到高阶命令的系统学习,是掌握传奇技术的核心路径。
传奇脚本的核心文件分布在服务端的固定目录下,不同类型的脚本对应不同的游戏触发场景。NPC脚本统一存放在MirServer\Envir\Market_Def目录下,负责处理玩家和NPC的对话交互、物品兑换、功能开启等操作。任务脚本存放在MirServer\Envir\QuestDiary目录下,用来编写复杂的线性任务链、阶段奖励和剧情触发逻辑。全局事件脚本为QFunction-0.txt,位于Envir根目录下,专门处理玩家升级、死亡、攻击、登录登出这类全服通用的全局触发事件。全局管理脚本QManage.txt负责服务端启动初始化、全服定时任务、全局变量维护这类底层运行逻辑。
脚本的基础执行逻辑采用事件驱动模型,所有代码都以标签作为入口,玩家触发对应事件后,引擎自动匹配对应的标签执行后续指令。基础脚本的标准结构以[@标签名]作为开头,之后用#say指令输出玩家可见的对话内容,用#act指令执行对应的操作命令,用#if和#act组合实现条件判断逻辑,不符合条件时用#elseact执行兜底操作。所有标签名称只能使用字母、数字和下划线,不能包含中文和特殊符号,否则引擎无法识别,直接抛出脚本错误。
物品操作类命令是日常编写脚本时使用频率最高的指令,覆盖了物品给予、移除、检测等全场景需求。GIVE命令语法为GIVE物品名数量,用来直接给玩家背包添加指定数量的对应物品。TAKE命令语法为TAKE物品名数量,用来从玩家背包中移除指定数量的目标物品。CHECKITEM命令语法为CHECKITEM物品名数量,用来检测玩家背包中是否拥有不少于指定数量的对应物品,常作为兑换类脚本的前置判断条件。CHECKUSEITEM命令语法为CHECKUSEITEM装备位置,用来检测玩家指定装备槽位上是否穿戴了装备,装备位置从0到12分别对应头盔、项链、左右手镯、左右戒指、腰带、鞋子、武器、衣服、勋章、宝石、盾牌。CHECKDURA命令语法为CHECKDURA装备位置0,用来检测玩家指定位置的装备耐久度是否已经耗尽。
货币与权限类命令用来处理游戏内的数值校验和身份判定。CHECKGAMEGOLD命令语法为CHECKGAMEGOLD数量,用来检测玩家当前的元宝数量是否大于等于指定数值。CHECKGAMEPOINT命令语法为CHECKGAMEPOINT数量,用来检测玩家的游戏点数量是否达标。CHECKPKPOINT命令语法为CHECKPKPOINT>0,用来检测玩家当前的PK值是否为正数,可用来限制红名玩家进入特定地图。CHECKISADMIN命令不需要额外参数,直接用来检测当前操作的玩家是否拥有管理员权限,避免普通玩家触发GM专属功能。
角色属性类命令用来校验和操作玩家的基础属性。CHECKLEVEL命令语法为CHECKLEVEL>50,用来检测玩家当前等级是否大于指定数值。CHECKJOB命令语法为CHECKJOBWarrior,用来检测玩家的职业是否为战士,对应可选值为Warrior、Wizard、Taoist,分别对应三职业。CHECKHP命令语法为CHECKHP<30,用来检测玩家当前血量占比是否低于指定百分比,常用来做残血触发的特殊效果逻辑。CHECKMP命令语法为CHECKMP<20,用来检测玩家当前魔法值占比是否低于指定数值。
变量操作类命令用来实现脚本内的数值存储和运算,是编写复杂逻辑的核心基础。MOV命令语法为MOV变量名值,用来给指定变量赋值,支持N、S、P三类不同类型的变量。INC命令语法为INC变量名值,用来让指定变量的数值自增对应数值,常用来做计数器累加。DEC命令语法为DEC变量名值,用来让指定变量的数值自减对应数值。CALCVAR命令语法为CALCVAR变量名+值,支持加减乘除四类基础数学运算,用来完成复杂的数值计算。MOVR命令语法为MOVRN$随机变量1100,用来生成指定区间内的随机整数,是实现随机奖励、随机传送等玩法的核心指令。
流程控制类命令用来调整脚本的执行顺序,实现分支跳转和循环逻辑。GOTO命令语法为GOTO@标签名,用来直接跳转到脚本内指定的标签位置继续执行代码。BREAK命令不需要参数,用来直接终止当前脚本的执行,后续所有代码都不会再运行。LOOP命令语法为LOOP次数,用来循环执行包裹内的代码块指定次数,批量处理重复操作时能大幅减少代码冗余。CALL命令语法为#CALL[文件路径]@函数名,用来调用外部脚本文件中的指定函数,实现公共逻辑的复用,避免在多个脚本中重复编写相同的代码。
地图与传送类命令用来处理玩家的地图移动和怪物刷新操作。MAP命令语法为MAP地图名,用来将玩家传送到指定地图的随机坐标点。MAPMOVE命令语法为MAPMOVE地图名坐标X坐标Y,用来将玩家精准传送到指定地图的固定坐标位置。MONCLEAR命令语法为MONCLEAR地图名,用来清空指定地图内当前所有存活的怪物。MonGen命令语法为MonGen怪物名称数量时间,用来在当前地图的随机位置刷新指定数量的怪物,单位为分钟。TimeRecall命令语法为TimeRecall数值,用来给玩家设置指定分钟数的地图强制回城倒计时,时间到后自动将玩家传送出当前地图。
基础脚本编写的规范细节能大幅降低出错概率。所有脚本文件必须使用ANSI编码保存,不能使用UTF-8编码,否则中文内容会出现乱码导致引擎解析失败。所有标点符号必须使用半角英文格式,全角标点会直接导致命令识别失败。编写复杂脚本时要逐行添加注释,标注每段代码的功能和逻辑,后续维护排查问题时能大幅提升效率。每次修改脚本后,在M2引擎的控制台上执行重新加载脚本的命令,不需要重启整个服务端,新的脚本逻辑就能立即生效。
传奇脚本的核心文件分布在服务端的固定目录下,不同类型的脚本对应不同的游戏触发场景。NPC脚本统一存放在MirServer\Envir\Market_Def目录下,负责处理玩家和NPC的对话交互、物品兑换、功能开启等操作。任务脚本存放在MirServer\Envir\QuestDiary目录下,用来编写复杂的线性任务链、阶段奖励和剧情触发逻辑。全局事件脚本为QFunction-0.txt,位于Envir根目录下,专门处理玩家升级、死亡、攻击、登录登出这类全服通用的全局触发事件。全局管理脚本QManage.txt负责服务端启动初始化、全服定时任务、全局变量维护这类底层运行逻辑。
脚本的基础执行逻辑采用事件驱动模型,所有代码都以标签作为入口,玩家触发对应事件后,引擎自动匹配对应的标签执行后续指令。基础脚本的标准结构以[@标签名]作为开头,之后用#say指令输出玩家可见的对话内容,用#act指令执行对应的操作命令,用#if和#act组合实现条件判断逻辑,不符合条件时用#elseact执行兜底操作。所有标签名称只能使用字母、数字和下划线,不能包含中文和特殊符号,否则引擎无法识别,直接抛出脚本错误。
物品操作类命令是日常编写脚本时使用频率最高的指令,覆盖了物品给予、移除、检测等全场景需求。GIVE命令语法为GIVE物品名数量,用来直接给玩家背包添加指定数量的对应物品。TAKE命令语法为TAKE物品名数量,用来从玩家背包中移除指定数量的目标物品。CHECKITEM命令语法为CHECKITEM物品名数量,用来检测玩家背包中是否拥有不少于指定数量的对应物品,常作为兑换类脚本的前置判断条件。CHECKUSEITEM命令语法为CHECKUSEITEM装备位置,用来检测玩家指定装备槽位上是否穿戴了装备,装备位置从0到12分别对应头盔、项链、左右手镯、左右戒指、腰带、鞋子、武器、衣服、勋章、宝石、盾牌。CHECKDURA命令语法为CHECKDURA装备位置0,用来检测玩家指定位置的装备耐久度是否已经耗尽。
货币与权限类命令用来处理游戏内的数值校验和身份判定。CHECKGAMEGOLD命令语法为CHECKGAMEGOLD数量,用来检测玩家当前的元宝数量是否大于等于指定数值。CHECKGAMEPOINT命令语法为CHECKGAMEPOINT数量,用来检测玩家的游戏点数量是否达标。CHECKPKPOINT命令语法为CHECKPKPOINT>0,用来检测玩家当前的PK值是否为正数,可用来限制红名玩家进入特定地图。CHECKISADMIN命令不需要额外参数,直接用来检测当前操作的玩家是否拥有管理员权限,避免普通玩家触发GM专属功能。
角色属性类命令用来校验和操作玩家的基础属性。CHECKLEVEL命令语法为CHECKLEVEL>50,用来检测玩家当前等级是否大于指定数值。CHECKJOB命令语法为CHECKJOBWarrior,用来检测玩家的职业是否为战士,对应可选值为Warrior、Wizard、Taoist,分别对应三职业。CHECKHP命令语法为CHECKHP<30,用来检测玩家当前血量占比是否低于指定百分比,常用来做残血触发的特殊效果逻辑。CHECKMP命令语法为CHECKMP<20,用来检测玩家当前魔法值占比是否低于指定数值。
变量操作类命令用来实现脚本内的数值存储和运算,是编写复杂逻辑的核心基础。MOV命令语法为MOV变量名值,用来给指定变量赋值,支持N、S、P三类不同类型的变量。INC命令语法为INC变量名值,用来让指定变量的数值自增对应数值,常用来做计数器累加。DEC命令语法为DEC变量名值,用来让指定变量的数值自减对应数值。CALCVAR命令语法为CALCVAR变量名+值,支持加减乘除四类基础数学运算,用来完成复杂的数值计算。MOVR命令语法为MOVRN$随机变量1100,用来生成指定区间内的随机整数,是实现随机奖励、随机传送等玩法的核心指令。
流程控制类命令用来调整脚本的执行顺序,实现分支跳转和循环逻辑。GOTO命令语法为GOTO@标签名,用来直接跳转到脚本内指定的标签位置继续执行代码。BREAK命令不需要参数,用来直接终止当前脚本的执行,后续所有代码都不会再运行。LOOP命令语法为LOOP次数,用来循环执行包裹内的代码块指定次数,批量处理重复操作时能大幅减少代码冗余。CALL命令语法为#CALL[文件路径]@函数名,用来调用外部脚本文件中的指定函数,实现公共逻辑的复用,避免在多个脚本中重复编写相同的代码。
地图与传送类命令用来处理玩家的地图移动和怪物刷新操作。MAP命令语法为MAP地图名,用来将玩家传送到指定地图的随机坐标点。MAPMOVE命令语法为MAPMOVE地图名坐标X坐标Y,用来将玩家精准传送到指定地图的固定坐标位置。MONCLEAR命令语法为MONCLEAR地图名,用来清空指定地图内当前所有存活的怪物。MonGen命令语法为MonGen怪物名称数量时间,用来在当前地图的随机位置刷新指定数量的怪物,单位为分钟。TimeRecall命令语法为TimeRecall数值,用来给玩家设置指定分钟数的地图强制回城倒计时,时间到后自动将玩家传送出当前地图。
基础脚本编写的规范细节能大幅降低出错概率。所有脚本文件必须使用ANSI编码保存,不能使用UTF-8编码,否则中文内容会出现乱码导致引擎解析失败。所有标点符号必须使用半角英文格式,全角标点会直接导致命令识别失败。编写复杂脚本时要逐行添加注释,标注每段代码的功能和逻辑,后续维护排查问题时能大幅提升效率。每次修改脚本后,在M2引擎的控制台上执行重新加载脚本的命令,不需要重启整个服务端,新的脚本逻辑就能立即生效。

