• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

GuillaumeVDN的插件文档/QuestCreator/高级内容

来自Minecraft插件百科
Qsefthuopq讨论 | 贡献2020年11月29日 (日) 14:42的版本 全局元素
跳转至: 导航搜索
GuillaumeVDN的插件文档
页面

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刻时进行检测。第二张方式称为“定时器调用”:这种方式是更新服务器目标进度最常使用的。

对每个任务进行检测(所有玩家进行中的任务或所有调用定时器的活跃任务):

  1. 确保世界允许

  2. 如果调用定时器,则使符合条件的任务回到检查点。

  3. 尝试检测每个分支/独立分支的进度:

    1. 检查是否还必须等待一定的时间才能开始该分支的当前目标。

      • 如须等待,则不检测该分支

      • 如无须等待,则发送开始该目标的提醒

    2. 检测当前目标是否超时

      • 如果超时,则应用失败goto

      • 如果未超时,则发送剩余时间提醒

    3. 检测该分支的当前目标,如果尚未完成,

      (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. 如果玩家太久未取得进展则重新发送分支目标抉择选项
  4. 如果任务受到影响:更新显示 (actionbar/显示/计分板/……)

功能性任务

功能性任务是基本没有用户显示和限制的任务。它对于创建一些特性很有用,你可以用QuestCreator的任务分支/目标轻松地创建功能性任务。你可以用功能性任务做任何事情:当玩家进入一片区域,与一个方块交互,杀死一个实体等时,执行一些效果。你可以使用所有的玩家和服务器目标类型(不包括特殊类型)。

功能性任务实际上并不会被保存,它们在玩家连接时自动启动(根据条件自动启动),并在玩家断开连接时被丢弃。它们无法拥有激活器或结束目标。

它拥有大部分常规任务模型的设置,但没有大部分的用户显示:它没有提醒、显示名、描述、信息、GUI物品等。它也没有一些时间设置,如模型时间限制或冷却。它们不能在多人任务中运行,因为它们是针对每个玩家的,且没有玩家相关的设置。

它位于/quest_models_functional/