- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
GuillaumeVDN的插件文档/QuestCreator/基础内容
GuillaumeVDN的插件文档 | |
---|---|
页面 | |
所有插件都有的常见内容 | |
QuestCreator |
视频
QuestCreator介绍(英语)
我制作的这个视频涵盖了大多数核心特性的介绍。如果你是刚使用这款插件,那么我推荐你从头看到尾。在视频下方的描述里写有了时间点,你可以根据需求跳到特定的时间点观看。
https://www.youtube.com/watch?v=5Lwh9qGReVk
QuestCreator介绍(西班牙语)
maxmar628用西班牙语介绍了QuestCreator。
https://www.youtube.com/watch?v=ARukGd7m5zc
QuestCreator介绍(英语)
InkBat制作的介绍任务结构的视频。这个视频有一段时间了,因此配置部分和现在的已截然不同。
https://www.youtube.com/watch?v=KjZ9gaJlObI
文件结构
这一部分描述了 /plugins/QuestCreator/ 内的文件结构。
配置
主要的配置文件是/config.yml,该文件包含了不少有用的设置。文件内的注释详细地解释了每一个选项。
你可以在对应的.yml文件内配置用户、服务器和全局变量。
元素存储位置
所有元素(任务模型、任务池、GUI、全局分支、全局目标等)都存储在对应的文件夹内:
- /quest_activators/
- /quest_models/
- /quest_models_functional/
- /quest_groups/
- /quest_pools/
- /guis/
- /global_branches/
- /global_conditions/
- /global_gui_items/
- /global_objects/
- /global_time_frames/
在每个文件夹里,每个元素都是一个 .yml格式的文件。比如,/quest_models/my_quest.yml 是id为my_quest的任务模型。id对于大小写敏感(须小写)。
你也可以创建子文件夹来更清晰地给文件分类。
数据
如果你使用JSON作为数据板的后端,数据文件将保存在/plugins/QuestCreator/data_v6/下。删除该文件夹将导致所有当前用户数据的丢失(活跃中的任务、任务历史、用户变量等)。需要注意的是,任务点数存储在GCore的数据统计系统中,在/plugins/GCore/data_v8/statistics/下以JSON的形式存储。
任务介绍
任务模型
你最先需要区分的概念就是“任务”和“任务模型”。
“任务模型”是配置文件,其包含在玩家进行任务时可能会遇到的种种可能性相关的配置。任务模型位于/quest_models/。
“任务”代表活跃中的任务模型。每名玩家(或多名组队玩家)可能会有不同选择和进度的“任务”实例。
理解分支和目标
进行中的任务至少拥有一个已激活的“分支”以及分支内的目标。你可以将分支视作“任务目标的容器”。
任务目标代表以下两者:
- 玩家必须完成的任务对象
- 或是服务器必须执行的操作(比如发送消息、播放音效、操控实体等)
在任务中,虽然每个分支只有一个活跃的目标,但你可以给任务设置多个分支。
以下是一份活跃任务可能的配置结构草稿(并不是实际的配置):
my_active_quest: branch_1: *active - object_1 - object_2 - *object_3 - object_4 branch_2: *active - *object_1 - object_2 branch_3: not active - object_1 - object_2 - object_3
在任务模型中共有3个分支,但只有2个分支活跃在玩家的任务中。在这2个分支里有很多种可能的目标,但在每个分支中只有一个是活跃的目标。
实践
让我们将理论付诸于实践吧:
branches: branch_1: starts_directly: true starts_at: object_3 objects: object_1: # …… 此处省略目标设置 object_2: # …… 此处省略目标设置 object_3: # …… 此处省略目标设置 object_4: # …… 此处省略目标设置 branch_2: starts_directly: true starts_at: object_1 objects: object_1: # …… 此处省略目标设置 object_2: # …… 此处省略目标设置 branch_3: starts_directly: false starts_at: object_2 objects: object_1: # …… 此处省略目标设置 object_2: # …… 此处省略目标设置 object_3: # …… 此处省略目标设置
这份配置里有很多信息,这些信息混淆了我们迄今谈到的不同概念。
分支配置下的每个分支都代表一个可能的分支,它们拥有不一样的标识符(branch_1、branch_2……)。
每个分支的starts_directly布尔设置用于指示该分支是否在任务开始时自动开始。branch_3的布尔值为false,该分支会之后手动开始。
objects下方是可用的任务目标。你可以在不同的分支内使用相同的目标名。
goto的重要性
虽然分支有可以目标的“列表”,但这些目标并不一定按顺序执行。比如在上面示例中的branch_1,你可以决定先运行object_3再运行object_2。
每个分支的starts_at设置用于指示插件应该在分支开始时开始哪个任务目标。
同一目标可以重复执行,比如:object_3 > object_2 > object_1 > object_4 > object_1 > object_4 > …… 并在满足特定条件时停止循环。
简而言之,从我们看到这里为止,这个插件还“不够聪明”,不能检测出它下一步应该运行什么目标,因为你实际上已经从“固定的列表顺序”中解放出来了。你必须向插件表明它下一步应该运行什么目标,或者更笼统的说是“它应该执行什么goto”。
让我们将goto加入到分支branch_1中吧:
object_1: # …… 此处省略目标设置 goto: OBJECT object_4 object_2: # …… 此处省略目标设置 goto: OBJECT object_1 object_3: # …… 此处省略目标设置 goto: OBJECT object_2 object_4: # …… 此处省略目标设置 goto: OBJECT object_1
这份配置遵循了示例中的顺序:object_3 > object_2 > object_1 > object_4 > object_1 > object_4 > ……,即使由于未设置任何条件,目标1和4会无限循环。条件与逻辑将在本文档后面解释,而该份示例清晰地解释了goto的作用。
所以在这里,你使用goto类型表示你希望在当前目标完成后运行同一分支的目标。但实际上,goto的触发方式不仅仅是目标,它们可以启动或停止分支、完成任务、操作其它任务等。请查看这里的goto类型列表。
在示例中的分支branch_3不会自动开始。 我们可以在任务的任意阶段开始该分支!比如在第二个分支结束时开始该分支:
branch_2: starts_directly: true starts_at: object_1 objects: object_1: # …… 此处省略目标设置 goto: OBJECT object_2 object_2: # …… 此处省略目标设置 goto: BRANCH branch_3
当玩家完成object_2时会开始分支branch_3。因为branch_2的goto不会调用同一分支的目标,所以该分支会停止。别担心,你还有很多方式开始其它分支,而这只是个示例。
最后请注意,如果没有活跃的分支(由于某个地方缺失了goto),任务就会停止。
简易示例
在这个复杂的示例中你可以看到不同的概念。该示例是NPC任务的实际用例。
branches: unique_branch: # 这是个简单任务,因此我们只需要一个分支 starts_directly: true # 默认为true,自动开始分支 starts_at: START_NPC_DIALOG # 与NPC对话开始任务 objects: START_NPC_DIALOG: # …… 此处省略对话设置 goto: OBJECT FARM_STONE FARM_STONE: # …… 此处省略挖掘目标设置 goto: OBJECT DELIVER_ITEMS_TO_NPC DELIVER_ITEMS_TO_NPC: # …… 此处省略交付物品给NPC的设置 goto: OBJECT END_NPC_DIALOG END_NPC_DIALOG: # …… 此处省略对话设置 goto: QUEST_SUCCESS # 停止并标记任务为已完成
提示:我知道goto系统可能看起来很复杂,但实际上,特别是对于简单的任务,你的goto会按照列表顺序执行。对于更高级的任务,goto带来的自由度必不可缺。没有goto你就难以实现执行对话、循环、逻辑等功能。QuestCreator的设计理念不是简单,而是强大。熟能生巧,多练练你就会用了。:D
更多目标和模型设置
显然任务模型中不只有分支和目标,还有很多其它设置。
点击查看目标设置列表
点击查看模型设置列表
激活器介绍
现在你应该创建了一个任务了吧?但玩家怎么开始任务呢?
你可以给予玩家/quest start [任务] 指令的权限来开始任务,你也可以设置一个可查看并管理全部任务的GUI。
你还可以让玩家与Citizens的NPC对话来开始任务,或在玩家进入特定区域时自动开始任务。
而这就是激活器的主要用途:在特定条件下激活任务。激活器位于/quest_activators/。
给任务添加激活器很简单:创建激活器及其设置,将激活器加到你的任务模型中:
activators: - my_activator
如果my_activator是物理激活器,任务会在玩家与之交互时开始。否则激活器会在满足特定条件时激活任务。
点击查看激活器及其设置。
任务池介绍
你可能想要设置不同的每日或每周任务。
而这就要用到任务池。任务池位于/quest_pools/。
理解任务池处理方式
任务池并不会直接控制任务的开始。任务池只能“处理”每段时期的任务(一段时期指当前一天/一周/……):计算在这个时期内会有哪些任务。
当玩家连接到服务器时,任务池会检测是否已处理该玩家该时期的任务。比如阶段为每日,当GuillaumeVDN在当天15:30首次连接到服务器时,此时任务池未处理该玩家的任务。然而此时任务池已处理在当天14:00连接到服务器并完成每日任务的玩家Notch的任务。
当任务池在一段活跃时期内处理了玩家的任务后就不再处理,直到下一个时期。
任务券
和普通的任务管理不同的是,任务池使用“任务券”来管理任务。任务池处理其中的任务时会给予玩家任务券。
当玩家开始任务时,插件会检测任务是否在池中并且玩家是否有该任务的券。
玩家每开始一次任务就会消耗一个任务券。玩家用光了任务券就无法再次开始任务,直到下一个时期任务池再次处理任务。
如果每日任务的券在今天的18:30被消耗,则只有在第二天才会刷新任务券。
任务池设置
点击查看任务池及其设。
游戏内编辑器
尽管我个人喜欢通过YAML文件进行编辑(因为这样可以有一个更全面的视角),你也可以用游戏内编辑器来编辑几乎所有的东西(输入/qc edit 打开)。
不过,我建议你先阅读一次文档,对插件有一个大致的了解。游戏内编辑器只是包含了所有的设置,并提供了编辑工具,但它实际上并没有“解释”任何东西("什么是任务模型","什么是激活器","如何这么做",等等)。所以,在进入游戏之前,你最好先了解这些内容!
通过文件编辑和在游戏内编辑的全部设置都是一样的。增加深度(YAML的缩进数)会打开子菜单。
每个基础值在GUI内都有图标和不同的点击类型。你可以在这里查看对设置内的一切选项的解释。
你可以在菜单中选取或快捷导入大多数我之前所列举出的选项(Citizens NPC、点击类型、方块类型、附魔等)。
我建议你自己进游戏感受这些功能 ^_^
由于我使用了自定义的YAML读取器,插件会在重写文件时保留文件的设置顺序和注释,所以你不必担心注释丢失的问题。