当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

HEROM2传奇引擎任务系统文件结构脚本命令与配置实操全流程说明

热度:
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
CHECKUNDERWAR0
#ACT
SET[杀野猪任务]1
SETKillPigCount0
SENDMSG6"任务已接取:击杀0/10只野猪"
```

其中CHECKLEVELEX<20限制20级以下玩家接取,SET[杀野猪任务]1激活任务标记,SETKillPigCount0初始化杀怪计数器。变量命名建议使用有意义的英文标识,避免与引擎内置变量冲突。

任务ID也可通过AcceptTask命令直接绑定,格式为`AcceptTask101`,适用于使用引擎内置任务系统的场景。任务变量操作命令包括SetTaskVar和GetTaskVar,前者用于记录进度,后者用于条件判断,例如`#IFGetTaskVar101KillCount>=10`。

##杀怪触发与进度追踪

在MapQuest.txt中配置好触发规则后,创建对应的触发脚本文件:

```
[@KillPig]
#IF
CHECK[杀野猪任务]1
#ACT
INCKillPigCount1
SENDMSG6"任务进度:击杀<$STR(KillPigCount)>/10只野猪"
#IF
EQUALKillPigCount10
#ACT
CALCVARHUMAN经验值+50000
SAVEVARHUMAN经验值..\QuestDiary\人物变量.txt
SENDMSG6"任务完成!获得5万经验,请返回NPC领取物品奖励"
```

关键点在于CHECK[杀野猪任务]1确保只有已接取任务的玩家才会触发计数,避免未接任务时误触发。INC命令执行计数器递增,EQUAL命令检测是否达到目标数量。经验值修改后必须执行SAVEVAR命令将数据写入磁盘文件,否则服务器重启后进度丢失。

多阶段任务在同一触发脚本中通过阶段标记区分:

```
[@KillPig]
#IF
EQUAL任务阶段1
CHECK[杀野猪任务]1
#ACT
INCKillPigCount1
#IF
EQUALKillPigCount10
#ACT
SET任务阶段2
SENDMSG6"阶段一完成,请返回NPC交付"
```

阶段变量在NPC脚本中根据当前值展示不同对话内容,实现连环任务的推进逻辑。

##奖励发放与任务标记清除

NPC脚本中增加完成交互段,判断杀怪数量达标后发放奖励并清除任务标记:

```
[@Main]
#IF
CHECK[杀野猪任务]1
CHECKVARKillPigCount>=10
#ACT
GIVE金条1
TAKE[杀野猪任务]1
SENDMSG0"玩家[<$USERNAME>]完成了野猪剿灭任务!"
```

TAKE命令清除任务标记,确保玩家无法重复领取。奖励发放命令GIVE支持物品名称或数据库ID,格式为`GIVE物品名称数量`。全服公告使用SENDMSG0实现,颜色代码0为默认白色,255为红色,3为黄色。

##变量管理与数据持久化

HEROM2引擎的任务进度依赖HUMAN变量存储,此类变量不会自动保存,必须在每次修改后执行SAVEVAR命令写入指定文件。路径建议统一放在QuestDiary目录下,例如`..\QuestDiary\人物变量.txt`。读取时使用LOADVAR命令恢复数据。

全局任务变量使用GLOBAL变量,适用于服务器级别的任务进度记录。全局变量保存在GLOBAL文件内,重启引擎后数据保留。若需跨天重置的任务进度,可在AutoRunRobot.txt中设置每日凌晨执行重置脚本:

```
#AutoRunNPCRUNONDAY00:01@重置每日任务

[@重置每日任务]
#ACT
RESETMISSION[101]7
```

RESETMISSION命令批量重置任务变量状态,参数为起始变量编号和连续重置数量。

##任务追踪面板配置

HEROM2引擎支持在游戏界面右侧显示任务追踪面板,通过AddDlgEx命令实现。在QFunction-0.txt中添加以下脚本段:

```
#if
EQUAL<$STR(U46)>8
#act
MOVS$任务标题<[任务]/FCOLOR=31><装备祝福/FCOLOR=250>
MOVS$任务内容<[内容]/FCOLOR=31><全身部件均强化1次以上/FCOLOR=242>
MOVS$任务奖励<[奖励]/FCOLOR=31><元宝+288/FCOLOR=253>
MOVS$任务位置<[说明]/FCOLOR=31><强化使你崛起/FCOLOR=254>
MOVN$任务地图X304
MOVN$任务地图Y481
```

任务数据输出文件通过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控制台执行脚本重载命令或重启服务端,直接保存文件不会即时生效。
[顶部]