配置一个效果

示例效果配置

id: spawn_particle
args:
  amount: 10
  chance: 25
  particle: soul
triggers:
  - mine_block
filters:
  blocks:
    - diamond_ore
    - ancient_debris
conditions: [ ]
mutators:
  - id: translate_location
    args:
      add_x: 0.5
      add_y: 0.5
      add_z: 0.5

此效果代表的是当你挖掘钻石矿或者下届残骸时有25%几率在挖掘的矿石中间生成一个灵魂粒子效果。

占位符

eco 系列插件中,所有只能读取数值的选项都可以解析占位符并进行数学计算。例如一个玩家高度越高,几率越低的示例:

  • chance: 100 - %player_y%

*其中 %player_y% 是 PlaceholderAPI 中 player 拓展提供的一个变量符。

永久效果会在激活时读取变量符的数值,触发效果会在触发时读取变量符的数值。请确保你确实在合适的时机读取了这些变量符,否则会导致奇怪的问题。

以下是插件提供的额外变量符可供使用:

  • %trigger_value%%triggervalue%%trigger%%value%%tv%%v%%t%:触发器提供的值(例如攻击时造成的伤害值等)。

  • %player%:玩家名称。

  • %player_uuid%:玩家UUID。

  • %victim_health%:目标的血量。

  • %victim_max_health%:目标的最高血量。

  • %distance%:玩家和目标的距离。

  • %victim_level%:目标的等级,需要 LevelledMobs。

  • 如果目标也是一名玩家,那么可以使用 %victim_想要使用的变量符% 来显示目标的对应变量符。例如 %victim_player_y% 显示目标的 Y 轴坐标。

  • %hits%:玩家击打该目标的次数。

  • %text%%string%%message%:触发器的文本,例如聊天时的消息内容。

  • %location_x%%loc_x%%x%:效果作用位置的 X 轴。

  • %location_block_x%%loc_b_x%%block_x%%bx%:效果对应方块的位置的 X 轴。

  • 将 x 替换为 y 或者 z 则分别代表 Y 轴和 Z 轴。

  • %location_world%%loc_w%%world%:效果作用世界。

配置部分

每个效果都是由如下的配置组成:

  • id:该效果使用的效果ID,所有效果ID列表可在 这里 查看。

  • args:该效果的参数。可用的参数可在各个效果介绍中查看。

  • triggers:该效果的触发器。如果该效果是永久效果,则没有这个选项。

  • filters:筛选何种情况能够触发触发器。例如 mine_block 触发器可以使用 blocks 筛选出能够触发的方块,melee_attack 触发器可用使用 entities 筛选出能够触发的实体。

  • conditions:在满足何种条件下才会触发该效果。

  • mutators:该效果的变化。例如将效果的位置变化成玩家的位置等。

可用参数

*参数即是上文已经介绍的 args 选项。

chance

该效果执行的几率,默认为 100。

args:
  chance: 50

cooldown

该效果执行的冷却时间,以,默认为 0。

另外提供其他的可选选项。

args:
  cooldown: 10
  send_cooldown_message: true # 是否发送冷却消息提示
  cooldown_message: "还有 %seconds% 秒" # 冷却消息提示
  cooldown_effects: # 冷却期间将会触发的效果
    - id: send_message
      args:
        message: "正在冷却中,再等 &a%seconds%&r 秒."

cost

执行该效果消耗的经济。仅支持 Vault。默认为 0。

args:
  cost: 200

every

每多少次触发器触发后执行一次效果。默认为 1。

args:
  every: 3

mana_cost

执行该效果消耗的法力。仅支持 AureliumSkills。默认为 0。

args:
  mana_cost: 10

<魔法>_cost

同上,仅支持 EcoSkills。

args:
  mana_cost: 10

delay

触发器触发后延迟多少秒执行动作。默认为 0。

args:
  delay: 20

filters_before_mutation

默认情况下,效果在变化数据后再执行筛选。如果你想反着来,将其修改为 true。

args:
  filters_before_mutation: true

disable_antigrief_check

默认情况下,插件会检查效果是否作用于受到保护的领地等。如果你不想这样,将其修改为 true。

args:
  disable_antigrief_check: true

point_cost

执行该效果消耗的点数,如下所示:

args:
  point_cost:
    cost: 100 * %player_y%
    type: g_souls

price

执行该效果消耗的价格,其中 type 选项填写 价格 一节所示的格式,如下所示:

args:
  price:
    value: 100 * %player_y%
    type: crystals
      display: "&b%value% 水晶 ❖"

weight

效果的权重,在多个子效果中使用,设置该效果被执行的几率。

此效果执行的几率是 <此元素的权重> / <所有效果的权重>

args:
  weight: 10

run_order

效果的执行顺序,在多个子效果中使用,可设置为 startearlynormallateend。*从左到右是依次从前到后。

各个效果之间默认有自己的执行顺序(使得这些效果能够以预期实现),但是这个选项可以覆盖默认值,例如让 add_damage 效果(其默认是 late) 在 damage_multiplier (其默认为 normal) 之前运行

args:
  run-order: early

custom_<id>

这代表使用 自定义参数

args:
  custom_<id>:
    <参数 1>: <值>
    <参数 2>: <值>

*永久效果与触发效果

所有的效果分为 永久效果触发效果 两种。但是在这里,我们需要知道:

  • 永久效果效果不需要触发器,也就是在 effects 选项中,不需要 triggers 选项,你就是设置了也没用。玩家一旦激活了技能,在没有变化情况下该技能不会失效。出现变化指的是,例如你不再手持这个物品了,你不再激活这个宠物了,加倍器过期了等等。

  • 触发技能需要触发器,不填写 triggers 选项将会导致该技能失效。该技能只会在触发器被触发的瞬间生效。

根据常识,我们也很好判断该技能到底是永久技能还是触发技能,我们以一个镐子为例,我需要设置玩家手持这把镐子时一直拥有力量药水效果,那么很明显这是永久技能,如果我需要设置玩家使用这本镐子挖矿时,每次挖矿都会掉落金币,那么这很明显是触发技能,因为玩家只有在使用这把镐子挖掘方块情况下才会获得金币,并且我也不可能设置玩家手持这把镐子一直无限制获取金币。

*触发器内包含的属性

触发器触发后会有如下属性:

  • 触发对象:是什么触发了触发器,可以是玩家、方块、其他实体等。这个属性是每个触发器都有的。

  • 目标:而触发器作用的“对象”就是目标,这里好像是一句废话,因为我们得需要举一些例子才能帮助你知道何为目标。

    • 一个击杀怪物有几率使其流血的效果,它的目标就是被攻击的怪物。

    • 一个钓鱼有几率获得经验值的效果,它的目标就是被钓起的鱼。

    • take_damage 触发器有些不同,玩家为目标(因为受伤的是玩家),目标为触发对象(因为是怪物等对玩家造成伤害的)。

  • 位置:大部分情况下,触发器触发的位置就是位置。而拥有玩家或者目标的效果,则有可能是玩家或者目标的位置。(本文在部分语境下也称作坐标)

  • 方块:触发器执行作用的方块,例如 mine_block 即是挖掘的方块。

  • 事件:触发器监听的事件,开发者会使用较多。

  • 弹射物:触发器触发的弹射物,一般仅在弹射物类型的触发器有效。(本文部分地方也称作抛掷物)

  • 向量:触发器触发的向量,一般在弹射物类型的触发器中是弹射物的向量,其他情况下则是玩家或者目标的向量。

  • 物品:触发器触发的物品,一般是玩家手上的物品,如果是合成、熔炼等类型的触发器,则是结果物品。也有可能是目标手上的物品。

  • 文本:触发器触发的文本,一般只在聊天和指令触发器有效。

  • 值:见所有触发器页面。

连锁效果

连锁效果是将多个效果同时执行的一种功能。它可以用于执行效果的几率(chance 参数),如果你将多个效果分别设置几率,那么它们是基于各自的触发器独自拥有自己的几率值,这会导致某个效果没有执行却向玩家发送了执行成功的消息(分别是 2 个效果)的情况,而使用连锁效果就可以解决这个问题。

你可以在 plugins/libreforge/chains.yml 文件中找到连锁效果的配置文件:

chains:
  - id: <连锁ID>
    effects:
      - <效果1>
      - <效果2>
      - <效果3>

连锁效果内的子效果不需要设置触发器(triggers选项),因为它们都是由 run_chain 效果触发激活的。

你可以在这个文件以此格式添加无数多的连锁效果,然后使用 run_chain 效果使用它们,就像这样:

id: run_chain
args:
  chance: 50 * (%player_health% / 20) # 使用变量符和数学公式的示例
  cooldown: 2
  chain: <连锁ID>
triggers:
  - melee_attack
  - bow_attack
  - trident_attack
filters:
  entities:
    - zombie
    - creeper charged
    - skeleton

在连锁效果中可以使用自己定义新的变量符,以在多个效果之间互相传递某个数值,例如:

id: run_chain
args:
  chain: <连锁ID>
  chain_args:
    strength: %player_y% * 100 # 可以在这里设置数字或者字符串

在连锁效果中,我们可以使用 %变量符id% 的格式使用它们,例如这里即为 %strength%

内部连锁

内部连锁是另外一种连锁效果,内部连锁可以直接在 effects 选项中设置,对于不需要重复使用的连锁效果,可以考虑使用这种格式:

effects:
  - <效果1>
  - <效果2>
  - <效果3>
triggers:
  - mine_block
args:
  every: 3

内部连锁也支持定义新的变量符,如连锁效果一样。

连锁中的效果是互相独立运行的,这意味着如果你给其中的某个子效果增加了变化,但是对于其他子效果来说这个变化是不存在的,像几率、延迟等参数也是如此,如果你要让这些效果通用一个配置,请将它们添加到母效果中(即 run_chain 效果)中去。

连锁效果类型以下几种类型:

  • normal: 每次母效果执行时,所有的子效果依次执行。

  • cycle: 每次母效果执行时,所有的子效果只执行其中一个,按顺序依次循环执行。

  • random: 每次母效果执行时,从所有的子效果中随机执行其中一个。

要选择连锁效果类型,需要在配置中添加 run-type 参数:

effects:
  - triggers:
      - alt_click
    effects:
      - <效果1>
      - <效果2>
      - <效果3>
    args:
      run-type: random
      chance: 30

这也是另外一种内部连锁的格式,我们无需设置母效果的 ID 等。

加载权重

所有的配置在读取时按照字母顺序排列,但是这有时候会出现一些问题。例如在某个 EcoItems 的物品中需要使用其他物品作为合成配方,这时就需要保证被作为合成材料的物品需要在这个物品之前加载。你可以在配置中添加 load-weight: <权重值> 来自定义权重值。默认情况下,所有的效果的权重值都是 100,你可以设置成其他数字,例如 10 比 20 更早读取。

Last updated