361传奇引擎任务脚本仍然沿用传奇类引擎的标准TXT文本脚本结构,核心格式由段落标签、条件判断、执行命令、对话框输出、物品操作和变量控制组成。 正式编写前,建议先对照当前361引擎M2帮助文档确认命令名称、变量格式和脚本路径,避免直接套用其他引擎命令导致不生效。
一、任务脚本文件存放位置
任务脚本通常放在 MirServerMir200EnvirMarket_Def 或 QuestDiary 目录下。NPC脚本文件保存为 .txt 文本文件,编码建议使用 ANSI,避免中文乱码。 全局触发脚本如登录、死亡、拾取、怪物死亡等事件,一般写在 QManage.txt 或 QFunction-0.txt 中。
二、任务脚本基本结构
一个完整任务脚本通常包含四个部分:
主入口段落,用于打开NPC对话框。
任务状态判断,用于区分未接、进行中、已完成。
任务执行段落,用于接取、提交、奖励发放。
刷新段落,用于状态变化后重新显示对话框。
示例:
[@main]
IF
EQUAL <TASK01> 0
ACT
GOTO @未接任务
IF
EQUAL <TASK01> 1
ACT
GOTO @任务进行中
IF
EQUAL <TASK01> 2
ACT
GOTO @任务已完成
[@未接任务]
SAY
我是新手引导员。\
你愿意接受新手任务吗?\
\
<接取任务/@接取>\
<离开/@exit>
[@接取]
IF
CHECKBAGSIZE 1
ACT
MOV <TASK01> 1
GIVE 新手令牌 1
SENDMSG 6 任务已接取,请收集10个鹿肉。
GOTO @任务进行中
ELSESAY
背包空间不足,无法接取任务。
[@任务进行中]
IF
CHECKITEM 鹿肉 10
ACT
GOTO @可提交
ELSESAY
你还没有收集到10个鹿肉。\
<继续收集/@exit>
[@可提交]
SAY
你已经收集完成。\
<提交任务/@提交>\
<离开/@exit>
[@提交]
IF
CHECKITEM 鹿肉 10
ACT
TAKE 鹿肉 10
MOV <TASK01> 2
GIVE 新手奖励 1
SENDMSG 6 任务完成,奖励已发放。
GOTO @任务已完成
ELSESAY
你身上没有足够的鹿肉。
[@任务已完成]
SAY
该任务已经完成。\
<离开/@exit>
三、常用命令格式
任务脚本中最常用的命令包括段落、跳转、判断、执行、输出、物品和变量操作。
[@段落名] 用于划分脚本段落。
GOTO @段落名 用于跳转到指定段落。
IF 用于开始条件判断。
ACT 用于执行命令。
SAY 用于显示对话框文字。
ELSESAY 用于条件不满足时显示文字。
ELSEACT 用于条件不满足时执行命令。
CHECKITEM 物品名 数量 用于检测背包物品。
GIVE 物品名 数量 用于发放物品。
TAKE 物品名 数量 用于回收物品。
MOV 变量 数值 用于变量赋值。
EQUAL 变量 数值 用于判断变量是否等于指定值。
CHECKBAGSIZE 数量 用于检测背包空格。
SENDMSG 模式 内容 用于发送提示消息。
CLOSE 或 @exit 用于关闭对话框。
四、任务变量使用方式
任务进度通常使用人物变量记录。常见变量包括 P0-P9、D0-D9,以及引擎支持的自定义变量如 <TASK01>。 变量使用前建议先确认当前361引擎支持的变量写法。
示例:
MOV <TASK01> 0 表示任务未接。
MOV <TASK01> 1 表示任务进行中。
MOV <TASK01> 2 表示任务已完成。
如果任务较多,每个任务应使用独立变量,避免状态互相覆盖。
五、任务接取条件判断
接取任务前通常需要判断背包空间、等级、职业、金币、前置任务等条件。
示例:
[@接取]
IF
CHECKLEVEL 10
ACT
GOTO @等级通过
ELSESAY
等级不足10级,无法接取任务。
[@等级通过]
IF
CHECKBAGSIZE 2
ACT
GOTO @背包通过
ELSESAY
背包空间不足。
[@背包通过]
IF
EQUAL <TASK01> 0
ACT
MOV <TASK01> 1
GIVE 任务道具 1
SENDMSG 6 任务已接取。
GOTO @任务进行中
ELSESAY
该任务已经接取。
六、任务提交与奖励发放
提交任务时必须先检测物品,再回收物品,最后发放奖励。顺序不能颠倒,否则可能出现物品未扣除就发奖的问题。
示例:
[@提交]
IF
CHECKITEM 任务道具 5
CHECKBAGSIZE 1
ACT
TAKE 任务道具 5
MOV <TASK01> 2
GIVE 经验丹 1
GIVE 金币 10000
SENDMSG 6 任务提交成功。
GOTO @任务已完成
ELSESAY
提交失败,请检查物品或背包空间。
七、任务完成后按钮变化
任务完成后需要隐藏接取和提交按钮,只保留离开或下一任务入口。
示例:
[@任务已完成]
SAY
任务已完成。\
<离开/@exit>
如果存在后续任务,可以改为:
[@任务已完成]
IF
EQUAL <TASK02> 0
ACT
GOTO @可接下一任务
ELSESAY
当前没有可接任务。\
<离开/@exit>
[@可接下一任务]
SAY
可以接取下一阶段任务。\
<接取下一任务/@接取02>\
<离开/@exit>
八、全局触发任务进度
部分任务需要在杀怪、拾取、升级时自动更新进度。这类逻辑通常写在 QFunction-0.txt 中。
示例:
[@OnKillMob]
IF
EQUAL <TASK01> 1
CHECKITEM 鹿肉 9
ACT
GIVE 鹿肉 1
SENDMSG 6 已获得鹿肉,当前进度更新。
这里需要注意,杀怪掉落任务道具时,应防止重复发放。可以通过检测背包数量、使用独立计数变量或改为怪物掉落表控制。
九、调试顺序
修改任务脚本后,按以下顺序检查:
脚本文件是否保存为 ANSI 编码。
段落标签是否拼写正确。
#IF、#ACT、#SAY 是否成对使用。
CHECKITEM 物品名是否与数据库一致。
GIVE 和 TAKE 物品名是否相同。
变量赋值后是否跳转到新段落刷新界面。
任务提交后是否更新变量,避免重复提交。
修改后是否重新加载NPC脚本或重启服务端。
如果对话框不显示,先检查 [@main] 是否存在。如果按钮点击无反应,检查跳转标签是否匹配。如果物品无法扣除,检查 TAKE 前面是否有 CHECKITEM 检测。如果任务状态不更新,检查 MOV 变量是否执行成功,以及执行后是否 GOTO 刷新对话框。
剑侠361传奇引擎任务脚本写法参照格式:段落标签、条件判断、物品检测、变量控制与任
来源:
作者:
点击:

