剑侠361传奇引擎任务脚本写法参照格式:段落标签、条件判断、物品检测、变量控制与任

来源: 作者: 点击:
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
CHECKBAGSIZE1
ACT
MOV<TASK01>1
GIVE新手令牌1
SENDMSG6任务已接取,请收集10个鹿肉。
GOTO@任务进行中
ELSESAY
背包空间不足,无法接取任务。

[@任务进行中]
IF
CHECKITEM鹿肉10
ACT
GOTO@可提交
ELSESAY
你还没有收集到10个鹿肉。\
<继续收集/@exit>

[@可提交]
SAY
你已经收集完成。\
<提交任务/@提交>\
<离开/@exit>

[@提交]
IF
CHECKITEM鹿肉10
ACT
TAKE鹿肉10
MOV<TASK01>2
GIVE新手奖励1
SENDMSG6任务完成,奖励已发放。
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
CHECKLEVEL10
ACT
GOTO@等级通过
ELSESAY
等级不足10级,无法接取任务。

[@等级通过]
IF
CHECKBAGSIZE2
ACT
GOTO@背包通过
ELSESAY
背包空间不足。

[@背包通过]
IF
EQUAL<TASK01>0
ACT
MOV<TASK01>1
GIVE任务道具1
SENDMSG6任务已接取。
GOTO@任务进行中
ELSESAY
该任务已经接取。

六、任务提交与奖励发放

提交任务时必须先检测物品,再回收物品,最后发放奖励。顺序不能颠倒,否则可能出现物品未扣除就发奖的问题。

示例:

[@提交]
IF
CHECKITEM任务道具5
CHECKBAGSIZE1
ACT
TAKE任务道具5
MOV<TASK01>2
GIVE经验丹1
GIVE金币10000
SENDMSG6任务提交成功。
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
SENDMSG6已获得鹿肉,当前进度更新。

这里需要注意,杀怪掉落任务道具时,应防止重复发放。可以通过检测背包数量、使用独立计数变量或改为怪物掉落表控制。

九、调试顺序

修改任务脚本后,按以下顺序检查:

脚本文件是否保存为ANSI编码。
段落标签是否拼写正确。
#IF、#ACT、#SAY是否成对使用。
CHECKITEM物品名是否与数据库一致。
GIVE和TAKE物品名是否相同。
变量赋值后是否跳转到新段落刷新界面。
任务提交后是否更新变量,避免重复提交。
修改后是否重新加载NPC脚本或重启服务端。

如果对话框不显示,先检查[@main]是否存在。如果按钮点击无反应,检查跳转标签是否匹配。如果物品无法扣除,检查TAKE前面是否有CHECKITEM检测。如果任务状态不更新,检查MOV变量是否执行成功,以及执行后是否GOTO刷新对话框。
[顶部]