传奇剑侠2.5D引擎任务提示文本MissionDesc配置与脚本联动完整设置方法

来源: 作者: 点击:
任务提示文本在剑侠2.5D引擎中由MissionDesc.txt文件驱动,这个文件控制着客户端任务窗口的全部显示内容,包括任务名称、分类、可接列表、进行中状态和完成条件的文字提示。脚本命令负责设置任务状态和进度变量,MissionDesc.txt负责把这些状态翻译成玩家能看到的文字。两者是数据层和显示层的关系,缺任何一边任务提示都不会正常显示。下面从配置文件结构、脚本命令联动、追踪信息动态显示和常见故障排查几个层面逐一拆解。

MissionDesc.txt的完整字段结构

配置文件位于Mir200\Envir\MissionDesc.txt。这个文件的格式是以[标识名称]开头的一段配置块,每个任务对应一个独立的配置块。标识名称是唯一的,不能重复,长度不能超过7个汉字,这个名称同时用于脚本命令ADDMISSION和UPDATEMISSION中引用任务。

标识名称后面的字段按功能分为三组。第一组是位置信息。NPC_地图填写对应NPC所在的地图显示名称,例如比奇省。NPC_坐标X和NPC_坐标Y填写NPC的具体坐标。这三个字段的作用是当玩家点击任务窗口中的可接任务时,客户端自动寻路到该坐标。可接任务地图字段的格式是地图名加坐标,例如比奇省,330,330,这个坐标是玩家点击可接任务列表后自动移动的目标点,通常和NPC坐标一致,也可以设置为其他引导位置。

第二组是任务条件。条件_变量字段的取值范围是100到800,这是任务系统专用的变量区间。条件_变量值填写0或1,当人物对应的变量值符合这个设定值时,任务窗口中会提示该任务可以接受。条件_最低等级和条件_最高等级控制可接任务的等级范围,低于最低等级或高于最高等级的玩家在任务窗口中看不到这个任务。条件_职业和条件_性别分别限制可接任务的职业和性别,不填表示不限制。是否过程字段只能填0或1,填0时接受任务相关的参数生效,填1时结束任务相关的参数生效。

第三组是显示控制。任务分类用于分类显示,没有实际逻辑作用,常见的分类值包括主线任务、支线任务、循环任务、随机任务。任务名称是显示在任务窗口中该分类下的名称,可以和标识名称不同,标识名称用于脚本引用,任务名称用于玩家查看。隐藏显示填1时该任务不在任务窗口中显示,适合用于隐藏的剧情任务或调试用任务。注销任务标识填0或留空表示不允许注销,填大于0的整数表示允许注销。

结束条件字段的结构与接受条件对称。结束_变量范围是1到799,结束_变量值填0或1,当人物对应变量的值符合设定值时,任务窗口中提示任务可以完成,否则提示未完成。结束_物品、结束_物品2和结束_物品3分别填写完成任务所需的物品名称,结束_物品数量、结束_物品数量2和结束_物品数量3填写对应数量。这些字段会在任务窗口中显示为“需要XX物品XX个”的提示文字。

脚本命令与任务提示的联动机制

MissionDesc.txt中定义的任务条件需要通过脚本命令来激活和更新。核心命令有五个,分别控制任务的新增、删除、更新、状态检查和进度修改。

ADDMISSION命令用于向玩家的任务列表中添加一个任务。格式为ADDMISSION 任务索引 任务标识名称。任务索引的取值范围是0到99,同一时间玩家任务列表中最多容纳100个任务。任务标识名称必须和MissionDesc.txt中某个配置块的[标识名称]完全一致,差一个字任务提示就不会显示。这个命令通常在玩家与NPC对话选择接受任务时执行。

DELMISSION命令用于从任务列表中删除一个任务。格式为DELMISSION 任务索引。索引值对应ADDMISSION时使用的索引,删除后任务窗口中不再显示该任务。

UPDATEMISSION命令用于更新任务的状态。格式为UPDATEMISSION 任务索引 任务标识名称。这个命令的作用是刷新任务提示文本,当任务条件变量发生变化后,调用这个命令让客户端重新读取MissionDesc.txt中的配置,把最新的条件状态显示在任务窗口中。比如玩家击杀了10只怪物后,杀怪计数变量从0变为10,执行UPDATEMISSION后任务窗口中的进度提示会从“0/10”更新为“10/10”。

CHECKMISSION命令用于检查任务变量的状态。格式为CHECKMISSION 变量编号 值。变量编号的范围是101到799,101以前的编号为引擎预留,自定义任务脚本必须从101开始编号。值填0或1,命令检测当前人物的对应变量是否等于该值。这个命令用在#IF段中作为条件判断,决定后续执行哪条脚本分支。SETMISSION命令用于设置变量标识的状态,格式为SETMISSION 变量编号 值。RESETMISSION命令用于批量重置变量,格式为RESETMISSION 变量编号 数量。

杀怪计数和物品收集的进度控制。CHECKMISSIONKILLMONCOUNT命令检查任务杀怪数量,格式为CHECKMISSIONKILLMONCOUNT 任务索引 杀怪记数 操作符 数量。杀怪记数填1或2,对应MissionDesc.txt中的杀怪计数1和杀怪计数2。操作符可以是大于、小于或等于。CHANGEMISSIONKILLMONCOUNT命令修改杀怪数量,操作符支持加、减和等于。同样的逻辑适用于物品收集,检查命令为CHECKMISSIONITEMCOUNT,修改命令为CHANGEMISSIONITEMCOUNT。

循环任务使用独立的计数系统。CHECKARITHMOMETERCOUNT检查循环次数,格式为CHECKARITHMOMETERCOUNT 循环记数 操作符 次数,循环记数的范围是0到19。CHANGEARITHMOMETERCOUNT修改循环次数。循环计数每天0点自动复位为0。循环次数和循环变量在MissionDesc.txt中通过循环次数和循环变量两个字段配置。循环变量的作用是记录当前循环到第几轮,循环次数是总轮数上限。每次完成一轮循环任务后,脚本中执行CHANGEARITHMOMETERCOUNT 循环记数 + 1,当循环记数达到循环次数的值时,任务窗口提示不再可接。

任务追踪提示的动态显示标签

MissionDesc.txt中{}花括号内的内容支持条件判断标签,这些标签让任务提示文本可以根据玩家当前的状态动态变化。标签的格式是<^标签名(参数)>,引擎在渲染任务提示时会把标签替换为对应的结果。

按职业显示不同文字用^BJOB标签。格式为<^BJOB(战士,法师,道士)>,引擎根据当前角色的职业自动选择对应的文字显示。按性别显示的标签是^BSEX,格式为<^BSEX(男,女)>。按职业和性别组合显示的标签是^BJS,格式为<^BJS(战士男,战士女,法师男,法师女,道士男,道士女)>。这三个标签适合用在任务提示中针对不同角色给出差异化引导的场景。

按任务标识变量显示不同文字用^FLAG标签。格式为<^FLAG(任务标识编号,标识为0时的文字,标识为1时的文字)>。任务标识编号的范围是0到799。例如<^FLAG(100,请前往比奇省找白秋琳,你已完成前置任务)>,当变量100的值为0时显示第一段文字,为1时显示第二段文字。

按杀怪计数完成状态显示文字用^CMON1和^CMON2标签。格式为<^CMON1(已完成,未完成)>和<^CMON2(已完成,未完成)>。按物品收集完成状态显示文字用^CITEM1、^CITEM2和^CITEM3标签。

显示杀怪进度的数值用^KILLMON1和^KILLMON2标签,这两个标签会替换为当前已完成的杀怪数量。^MAXKILLMON1和^MAXKILLMON2替换为需要完成的总数量。物品收集进度的显示标签是^ITEMCOUNT1、^ITEMCOUNT2、^ITEMCOUNT3和对应的最大值标签^MAXITEMCOUNT1、^MAXITEMCOUNT2、^MAXITEMCOUNT3。这些标签组合使用可以生成“已击杀<$KILLMON1>/<$MAXKILLMON1>只怪物”这样的动态进度文字。

显示循环变量信息的标签是^ARH,格式为<^ARH(循环变量编号)>,循环变量编号范围是0到19。这个标签替换为当前循环变量的值,用于在循环任务中显示“第X轮”的提示文字。

小地图下方的任务追踪提示设置

任务窗口之外,小地图下方还有一块区域用于显示当前任务的追踪提示。这块区域的配置同样写在MissionDesc.txt中,但使用不同的命令结构。

#WRITE命令用于输出一条追踪提示信息。示例写法是:#WRITE 找<白秋琳/@move(新手村,131,136)>向她请教。这段文字会显示在小地图下方的追踪区域中,白秋琳是带下划线的可点击文字,点击后客户端自动寻路到新手村坐标131,136。@move后面的括号内依次是地图名、坐标X、坐标Y。

#IF命令用于条件判断,配合#WRITE实现动态追踪提示。#IF CHECKFLAG 任务标识变量 0或1判断任务标识变量的值,值为真时执行#WRITE输出对应的提示文字。#ENDIF是必须的结束标记,缺少这个标记后续的脚本段会被错误解析。

#IF KILLMONCOMPLETE 1或2 TRUE或FALSE判断杀怪计数是否完成。示例:#IF KILLMONCOMPLETE 1 TRUE表示杀怪计数1已完成,然后#WRITE输出“已完成”的文字提示。#IF ITEMCOUNTCOMPLETE 1或2或3 TRUE或FALSE判断物品收集是否完成。

多条#IF可以嵌套使用。示例结构如下:

```
#IF CHECKFLAG 100 1
#IF KILLMONCOMPLETE 1 TRUE
#IF ITEMCOUNTCOMPLETE 1 TRUE
#WRITE 所有条件已满足,回去找白秋琳复命
#ENDIF
#ENDIF
#ENDIF
```

三个#IF全部为真时,才输出“所有条件已满足”的追踪提示。嵌套层数没有硬性限制,但层数过多会影响配置文件的可读性和维护效率。建议每个任务块的追踪提示控制在三层嵌套以内。

任务提示文本的颜色控制

任务窗口中显示的文本可以通过颜色标记来区分任务类型和状态。剑侠引擎支持两种颜色写法。第一种是COLOR=数字格式,数字范围0到255,例如<COLOR=250,重点提示文字>。第二种是COLOR=#十六进制格式,例如<COLOR=#FF0000,红色警告文字>。十六进制颜色值从PS拾色器中获取后,需要把第5到6位和第1到2位对调位置再写入配置文件。

常用颜色的对应关系:250对应亮红色,适合标注警告和扣除资源的提示。251对应亮黄色,适合标注关键操作按钮和重要提示。69对应浅蓝色,适合地图名称和NPC名称类的标识文字。168对应绿色,适合标注获得奖励和成功操作的提示。

在MissionDesc.txt中,颜色标记可以嵌套在动态标签外面。例如<COLOR=250,<^BJOB(战士请去比奇省,法师请去盟重省,道士请去苍月岛)>>会根据职业显示不同文字,并且整段文字以亮红色显示。颜色标记和动态标签的嵌套顺序不影响显示效果,但颜色标记必须包裹在最外层。

常见故障排查

任务提示不显示或显示为空白。先检查MissionDesc.txt中的[标识名称]是否和脚本ADDMISSION命令中填写的名称完全一致。标识名称是唯一键,差一个字符引擎就找不到对应的配置块,任务窗口中不显示任何内容。检查标识名称的长度是否超过7个汉字,超出长度的名称会被截断或忽略。

可接任务列表中的任务点击后没有自动寻路。检查可接任务地图字段的格式是否正确,格式必须是地图名,坐标X,坐标Y,三个部分用英文逗号分隔。地图名必须和服务器中实际存在的地图名称一致,坐标必须在有效范围内。NPC_地图、NPC_坐标X、NPC_坐标Y三个字段也需要填写正确,这三个字段控制任务窗口中NPC名称的自动寻路。

任务窗口中提示可以完成但实际无法完成。检查结束_变量字段的值和结束_变量值是否匹配。当人物对应变量的值等于结束_变量值设定值时,任务窗口才提示可以完成。如果结束_变量填了100但脚本中从未使用SETMISSION设置过变量100的值,变量默认值为0,和结束_变量值设定的1不匹配,任务窗口就会一直提示未完成。

小地图下方的追踪提示不显示。检查MissionDesc.txt中#WRITE命令的写法是否正确。#WRITE必须写在{}花括号内部,#IF和#ENDIF必须成对出现。缺少#ENDIF会导致后续的追踪提示被错误地包含在前一个条件块中,在条件不满足时全部不输出。

循环任务完成后不再出现在可接列表中。检查循环次数和循环变量两个字段。循环次数设为0或留空时,循环任务只能完成一次。需要重复接取的循环任务,循环次数必须填大于0的整数,表示最大循环轮数。同时确认脚本中每完成一轮循环后执行了CHANGEARITHMOMETERCOUNT命令递增循环计数,否则循环次数永远不会增加,任务状态不会更新。

修改MissionDesc.txt后任务提示没有变化。这个文件在服务端启动时被加载到内存中,修改后需要重启M2Server或者执行重新加载任务配置的操作才能生效。只保存文件不重启,引擎读取的还是旧的配置数据。所有字段填写完毕后,用测试账号实际与NPC对话接取任务,在任务窗口中逐步检查可接任务列表、进行中任务进度和完成条件的显示是否与配置一致。