HEROM2引擎的任务系统没有独立的可视化编辑器,全部依靠文本脚本与触发机制协作完成。核心逻辑是将任务数据写入QuestDiary目录下的脚本文件,通过QFunction-0.txt绑定触发事件,再借助人物变量和任务标记实现进度追踪与状态判定。
## 任务系统文件结构
服务端根目录下的Mir200\Envir\QuestDiary文件夹是任务脚本的存放位置。该目录通常按任务类型建立子文件夹,例如“新手任务”“日常任务”“主线任务”,每个任务的脚本文本以.txt格式保存。核心调用文件为QFunction-0.txt,用于绑定NPC与任务脚本的关联,确保点击NPC时能触发任务对话。
MapQuest.txt文件负责杀怪触发映射,其格式为地图编号、怪物名称、触发脚本路径和触发标签四列。当玩家在指定地图击杀指定怪物时,引擎自动调用对应脚本段执行计数操作。示例写法为:`0 野猪 * \QuestDiary\杀野猪触发.txt @KillPig`,其中0代表比奇省地图编号,星号表示不限制触发次数。
## 任务领取脚本编写
NPC任务领取是整个流程的入口,负责条件判定和计数器初始化。在QFunction-0.txt或独立NPC脚本中添加以下结构:
```
[@Main]
#IF
CHECKLEVELEX < 20
#SAY
欢迎新人!去击杀10只野猪,回来找我领取奖励。\
<接取任务/@AcceptTask>
[#AcceptTask]
#IF
CHECKUNDERWAR 0
#ACT
SET [杀野猪任务] 1
SET KillPigCount 0
SENDMSG 6 "任务已接取:击杀0/10只野猪"
```
其中CHECKLEVELEX < 20限制20级以下玩家接取,SET [杀野猪任务] 1激活任务标记,SET KillPigCount 0初始化杀怪计数器。变量命名建议使用有意义的英文标识,避免与引擎内置变量冲突。
任务ID也可通过AcceptTask命令直接绑定,格式为`AcceptTask 101`,适用于使用引擎内置任务系统的场景。任务变量操作命令包括SetTaskVar和GetTaskVar,前者用于记录进度,后者用于条件判断,例如`#IF GetTaskVar 101 KillCount >= 10`。
## 杀怪触发与进度追踪
在MapQuest.txt中配置好触发规则后,创建对应的触发脚本文件:
```
[@KillPig]
#IF
CHECK [杀野猪任务] 1
#ACT
INC KillPigCount 1
SENDMSG 6 "任务进度:击杀<$STR(KillPigCount)>/10只野猪"
#IF
EQUAL KillPigCount 10
#ACT
CALCVAR HUMAN 经验值 + 50000
SAVEVAR HUMAN 经验值 ..\QuestDiary\人物变量.txt
SENDMSG 6 "任务完成!获得5万经验,请返回NPC领取物品奖励"
```
关键点在于CHECK [杀野猪任务] 1确保只有已接取任务的玩家才会触发计数,避免未接任务时误触发。INC命令执行计数器递增,EQUAL命令检测是否达到目标数量。经验值修改后必须执行SAVEVAR命令将数据写入磁盘文件,否则服务器重启后进度丢失。
多阶段任务在同一触发脚本中通过阶段标记区分:
```
[@KillPig]
#IF
EQUAL 任务阶段 1
CHECK [杀野猪任务] 1
#ACT
INC KillPigCount 1
#IF
EQUAL KillPigCount 10
#ACT
SET 任务阶段 2
SENDMSG 6 "阶段一完成,请返回NPC交付"
```
阶段变量在NPC脚本中根据当前值展示不同对话内容,实现连环任务的推进逻辑。
## 奖励发放与任务标记清除
NPC脚本中增加完成交互段,判断杀怪数量达标后发放奖励并清除任务标记:
```
[@Main]
#IF
CHECK [杀野猪任务] 1
CHECKVAR KillPigCount >= 10
#ACT
GIVE 金条 1
TAKE [杀野猪任务] 1
SENDMSG 0 "玩家[<$USERNAME>]完成了野猪剿灭任务!"
```
TAKE命令清除任务标记,确保玩家无法重复领取。奖励发放命令GIVE支持物品名称或数据库ID,格式为`GIVE 物品名称 数量`。全服公告使用SENDMSG 0实现,颜色代码0为默认白色,255为红色,3为黄色。
## 变量管理与数据持久化
HEROM2引擎的任务进度依赖HUMAN变量存储,此类变量不会自动保存,必须在每次修改后执行SAVEVAR命令写入指定文件。路径建议统一放在QuestDiary目录下,例如`..\QuestDiary\人物变量.txt`。读取时使用LOADVAR命令恢复数据。
全局任务变量使用GLOBAL变量,适用于服务器级别的任务进度记录。全局变量保存在GLOBAL文件内,重启引擎后数据保留。若需跨天重置的任务进度,可在AutoRunRobot.txt中设置每日凌晨执行重置脚本:
```
#AutoRun NPC RUNONDAY 00:01 @重置每日任务
[@重置每日任务]
#ACT
RESETMISSION [101] 7
```
RESETMISSION命令批量重置任务变量状态,参数为起始变量编号和连续重置数量。
## 任务追踪面板配置
HEROM2引擎支持在游戏界面右侧显示任务追踪面板,通过AddDlgEx命令实现。在QFunction-0.txt中添加以下脚本段:
```
#if
EQUAL <$STR(U46)> 8
#act
MOV S$任务标题 <[任务]/FCOLOR=31> <装备祝福/FCOLOR=250>
MOV S$任务内容 <[内容]/FCOLOR=31> <全身部件均强化1次以上/FCOLOR=242>
MOV S$任务奖励 <[奖励]/FCOLOR=31> <元宝+288/FCOLOR=253>
MOV S$任务位置 <[说明]/FCOLOR=31> <强化使你崛起/FCOLOR=254>
MOV N$任务地图X 304
MOV N$任务地图Y 481
```
任务数据输出文件通过AddDlgEx命令调用,参数依次为样式编号、坐标位置、宽度高度、数据文件路径。任务数据_界面输出.txt文件内容控制面板实际展示的文本:
```
<>
<☆新手引导系统☆/FCOLOR=70>\
\
<$STR(S$任务进度)>\
<$STR(S$任务标题)>\
<$STR(S$任务内容)>\
<$STR(S$任务位置)>\
<$STR(S$任务奖励)>\
\
<任务追踪/@11> <提交任务/@12> <刷新/@10>
```
@11、@12、@10对应QFunction-0.txt中的[@DlgButtonClick]段,分别处理追踪、提交和刷新按钮的点击事件。U46变量控制当前显示的任务阶段,根据数值变化切换面板内容。FCOLOR参数控制文字颜色,31为红色,70为紫色,250为绿色。
## 常见问题与排查
任务接取后无进度提示时,首先检查MapQuest.txt中的地图编号和怪物名称是否与数据库一致。怪物名称区分大小写,地图编号需确认无误。其次确认触发脚本文件路径是否正确,路径错误时引擎会跳过触发而不报错。
任务进度无法保存是变量未执行SAVEVAR的典型表现。所有HUMAN变量的修改操作后必须紧跟SAVEVAR命令,写入路径使用相对路径`..\QuestDiary\`开头。
多阶段任务出现进度跳跃时,检查任务阶段变量是否在NPC脚本中正确初始化。阶段变量应在任务接取时设为1,每次阶段完成时递增,未初始化的变量默认值为0,会导致阶段判断失效。
任务追踪面板不显示或显示空白时,检查任务数据_界面输出.txt文件的编码是否为ANSI格式。UTF-8编码会导致中文乱码,面板内容无法正常渲染。同时确认AddDlgEx命令中的坐标参数未超出屏幕范围。
脚本文件编码统一为ANSI格式,UTF-8编码下中文标签和提示内容在引擎解析时出现乱码,导致脚本段无法定位。修改脚本后需在M2Server控制台执行脚本重载命令或重启服务端,直接保存文件不会即时生效。
HEROM2传奇引擎任务系统文件结构脚本命令与配置实操全流程说明
来源:
作者:
点击:

