- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
GuillaumeVDN的插件文档/QuestCreator/高级内容
GuillaumeVDN的插件文档 | |
---|---|
页面 | |
所有插件都有的常见内容 | |
QuestCreator |
变量
插件有一个可影响任务的内置变量系统。例如,你可以用它来记住一名玩家在任务A中做出的抉择,并因此在任务B中显示不同的抉择选项,而这将存储在用户变量中。
每个变量都是一行文本。变量可以包含数字,并用在解析逻辑或在数学公式中。
变量名对大小写敏感:MyValue
不等于myvalue
。
如果变量没有值,则该变量值会显示为0
。
用户变量
每名玩家的用户变量都是特有的。如果有一个名为my_variable
的变量,那么它对GuillaumeVDN而言的值是1
,而对Notch而言的值是2
。
你可以在这里配置变量默认值:/plugins/QuestCreator/default_variables.yml
variable_1: 0
variable_2: 'default'
模型变量
模型变量用于活跃的任务中,任务结束后这些变量就会被废弃。这些变量可能只在进行任务时有用,而对未来的任务并不重要。
你可以在每个任务模型中配置变量默认值。
服务器变量
这些变量用于服务器。服务器变量值对所有的玩家都一样。
你可以在这里配置服务器变量默认值:/plugins/QuestCreator/server_variables.yml
server_variable_1: 0
server_variable_2: 'default'
全局变量
全局变量拥有固定值且无法修改。它主要用于避免你在任务中重复编写相同内容。它就相当于宏,你可以在配置内的某个地方使用{gvariable:<variable>}
来获取全局变量。
全局变量包含其它变量或占位符。
你可以在这批配置全局变量默认值:/plugins/QuestCreator/global_variables.yml
message_prefix: '&6[QuestCreator] &7'
sample_variable_placeholderapi: '嘿,%player_name%'
sample_variable_qc: '{variable:my_variable} is the value'
sample_spawn_location: 'world,0,64,0'
sample_player_location_through_papi: '%player_world%,%player_x%,%player_y%,%player_z%'
全局元素
为避免重复,你可以用全局元素来配置几乎全部的元素类型,其位于/global_<element type>/
。
比如在这个分支里,玩家重连服务器时会获得药水效果:
branches:
MAIN_BRANCH:
# 任务内容
ANOTHER_BRANCH:
# 其它任务分支
RECONNECT_EFFECTS:
starts_directly: true
starts_at: TRIGGER
objects:
TRIGGER:
type: PLAYER_CONNECT
goto: OBJECT EFFECT
EFFECT:
type: SERVER_PLAYER_EFFECTS_GIVE
start_notify:
message: >
&a欢迎回来,{player}&a!这是你的速度 II效果。
effects:
a:
type: SPEED
amplifier: 1
duration: 1 MINUTE
goto: OBJECT TRIGGER # 循环触发
你不需要复制粘帖该分支到你的全部任务内,你可以在/global_branches/RECONNECT_EFFECTS.yml
内创建一个全局分支:
starts_directly: true
starts_at: TRIGGER
objects:
TRIGGER:
type: PLAYER_CONNECT
goto: OBJECT EFFECT
EFFECT:
type: SERVER_PLAYER_EFFECTS_GIVE
start_notify:
message: >
&a欢迎回来,{player}&a!这是你的速度 II效果。
effects:
a:
type: SPEED
amplifier: 1
duration: 1 MINUTE
goto: OBJECT TRIGGER # 循环触发
只需要一行文本,你就可以在你的实际任务模型里面引用这个分支。
你可以通过将元素键设置为global@<全局元素id>
和一个任意值来引用全局元素,如下示例:
branches:
MAIN_BRANCH:
# 任务内容
ANOTHER_BRANCH:
# 其它任务分支
global@RECONNECT_EFFECTS: /
global@ANOTHER_EASY_GENERIC_BRANCH: /
全局任务目标
全局任务目标只有一点不同:你仍可以配置goto:
objects:
SOME_OBJECT:
# 普通本地目标
global@COOL_GLOBAL_OBJECT:
goto: OBJECT NEXT_COOL_GLOBAL_OBJECT
global@NEXT_COOL_GLOBAL_OBJECT:
goto: OBJECT ANOTHER_OBJECT
ANOTHER_OBJECT:
# 其它普通本地目标
任务进度检测流程
以下是插件检查一个任务进度时的流程。这适用于常规任务模型。
任务进度会在玩家触发事件(比如破坏方块)或每X刻时进行检测。第二张方式称为“定时器调用”:这种方式是更新服务器目标进度最常使用的。
对每个任务进行检测(所有玩家进行中的任务或所有调用定时器的活跃任务):
确保世界允许
如果调用定时器,则使符合条件的任务回到检查点。
尝试检测每个分支/独立分支的进度:
检查是否还必须等待一定的时间才能开始该分支的当前目标。
如须等待,则不检测该分支
如无须等待,则发送开始该目标的提醒
检测当前目标是否超时
如果超时,则应用失败goto
如果未超时,则发送剩余时间提醒
检测该分支的当前目标,如果尚未完成,
(a) 如果是事件调用:
1. 独立检测分支是否与事件玩家匹配。 2. 检查身份限制是否与事件中的玩家匹配 3. 检测目标的特定设置是否匹配事件(比如方块类型是否正确,是否是玩家放置的方块等 4. 确认匹配位置设置(大多数情况下是玩家位置,少数情况下是方块位置) 5. 确认事件玩家是否有所需物品 6. 确认匹配进度条件是否匹配 > 如果不匹配,则应用失败goto 7. 计算进度成功率 > 如果失败,则应用失败goto 8. (如果设置则)取消事件 9. 计算并应用进度 10. 从事件玩家处获取进度条件 11. 从事件玩家处拿取所需物品
(b) 如果是定时器调用:
1. 检测定时器调用刻是否匹配目标刻 2. (如果设置了‘wait_after_match_fail’则)在检测该目标前等待 3. 检测目标是否取得进展 4. 确认匹配身份的玩家拥有所需物品 5. 确认匹配进度条件(检测匹配身份的玩家) > 如果不匹配,则应用失败goto 6. 计算进度成功率 > 如果失败,则应用失败goto 7. 计算并应用进度 8. 从匹配身份的玩家处获取进度条件 9. 从匹配身份的玩家处拿取所需物品
之后:
(a) 如果调用完成目标且该目标是委托目标,则发送完成提醒。
(b) 如果调用影响目标(取得进展),则发送进度提醒
另外,如果必须按顺序完成委托目标的话,或许可以停止检查目标。(GROUP目标)
(c) 如果调用完全不影响目标:
1. 启用“position_stay”时,确认玩家是否在指定位置 > 如果不在,则发送警告提醒 > 如果玩家长时间未留在指定位置,则执行失败goto 1. 如果玩家离上次任务更新太久未取得进展则发送更新提醒 2. 如果玩家太久未取得进展则重新发送分支目标抉择选项
如果任务受到影响:更新显示 (actionbar/显示/计分板/……)
功能性任务
功能性任务是基本没有用户显示和限制的任务。它对于创建一些特性很有用,你可以用QuestCreator的任务分支/目标轻松地创建功能性任务。你可以用功能性任务做任何事情:当玩家进入一片区域,与一个方块交互,杀死一个实体等时,执行一些效果。你可以使用所有的玩家和服务器目标类型(不包括特殊类型)。
功能性任务实际上并不会被保存,它们在玩家连接时自动启动(根据条件自动启动),并在玩家断开连接时被丢弃。它们无法拥有激活器或结束目标。
它拥有大部分常规任务模型的设置,但没有大部分的用户显示:它没有提醒、显示名、描述、信息、GUI物品等。它也没有一些时间设置,如模型时间限制或冷却。它们不能在多人任务中运行,因为它们是针对每个玩家的,且没有玩家相关的设置。
它位于/quest_models_functional/
。