技能是 MythicMobs 的一个组成部分。所有生物(或物品,如果您有Artifacts附加组件)都能够拥有各种类型的技能,这些技能可以在不同情况下的不同条件下触发。MythicMob 的技能系统很简单,一旦你习惯了它并且非常灵活,甚至可以用来从 Minecraft 中最流行的 MMORPG 中重新创建 Boss。
技能组(包括许多技能链)必须存储在Skills
文件夹中以文档通用格式(.txt .yml 等)结尾的任何文档中
技能由几个不同的部分组成:
那么什么是技能呢?
技能由技能机制或“基础技能”组成,它们是 MythicMobs 自带的简单的基本技能。每个技能机制都在生物的Skills
部分中调用。让我们看一个例子:
FieryZombie: Type: ZOMBIE Display: 'Fiery Zombie' Health: 50 Skills: - mechanic 1 - skill{skill=Skill group name} - skill{s=Skill group name} - skill:Skill group name} - etc
每个技能机制都分配给列表中的生物,例如上面的列表。但是真正的技能会是什么样子呢?这是一个真实的例子:
FieryZombie: Type: ZOMBIE Display: 'Fiery Zombie' Health: 50 Skills: - ignite{ticks=100} @target ~onAttack <50% 0.5
哟嚯!这啥玩意儿?让我们来看看是什么构成了这个技能:
Skills: - mechanic{option=value} @[targeter] ~on[trigger] [health_modifier] [chance]
这可能看起来仍然很吓人,但每个部分本身都非常简单,有些甚至是可选的。让我们分别分解每个部分!
技能的第一个也是最重要的部分是机制。这就是您想要发生的事情,这是您正在执行的基本技能。它可能造成伤害,或使某些东西着火,或引起闪电……您可以使用许多不同的机制。有两种主要类型的机制:针对实体的机制和针对坐标的机制。有些可以同时针对两者,或两者都不针对。 大多数技能也有选择。它们直接出现在技能名称之后,并用花括号 {} 括起来。每个选项由分号 (;) 分隔。
Skills: - mechanic{option=value;option=value;option=value}
如果您愿意,您也可以扩展语法以提高可读性,但保持正确的缩进非常重要,否则 YAML 会被打乱。
Skills: - mechanic{ option=value; option=value; option=value; }
设置机制就像确定您要使用的机制并插入您想要的选项一样简单。大多数选项都有默认值并且是可选的。所以如果你想让某人着火 5 秒,你可以使用点燃机制并将ticks
选项设置为 100(一秒有 20 ticks),
Skills: - ignite{ticks=100}
目标是实施技能的另一个核心部分。目标是“您希望技能命中的目标”。定位器的类型很多,大多数可以分为定位“实体”或“位置”。为您想要做的事情选择正确的目标是很重要的。这是所有目标的列表。
瞄准器会直接跟随技能线中的机制,并且总是以 @ 符号为前缀。有些人也可以有自己的选择,也可以在瞄准器之后用花括号括起来。
Skills: - mechanic{option=value} @targeter{options=value}
回到我们之前的例子,假设你想让生物的目标着火。你只需这样做…
Skills: - ignite{ticks=100} @target
或者您可能希望它让附近的所有玩家着火。让我们说在 5 码半径内……
Skills: - ignite{ticks=100} @PlayersInRadius{r=5}
请记住,目标 是您想要定位的对象。
触发器也是技能中非常重要的一部分。触发器确定“是什么导致此技能发生”。 触发器还与特定的目标对象 @trigger交互,后者与由其他实体触发的某些目标对象一起使用。 触发器直接在目标之后,通常以~on和触发器名称开头。
Skills: - mechanic{option=value} @targeter{options=value} ~onTrigger
回到我们之前的示例,假设您希望该触发器在生物攻击其目标时触发,因此它的近战攻击也会触发。
Skills: - ignite{ticks=100} @target ~onAttack
注意:项目有一组不同的触发器。单击此处查看哪些触发器适用于 Artifacts。原wiki没写
血量修正是一种特殊类型的条件,出现在触发器之后。这些使您可以轻松设置技能仅执行的范围,并且完全是可选的。血量修正有几种简单的形式。这里有些例子:
Health Modifiers 直接在触发器之后,并以=
、<
或>
为前缀,具体取决于您要使用的范围。
Skills: - mechanic{option=value} @targeter{options=value} ~onTrigger =HealthModifier
回到我们之前的例子,假设您希望该技能仅在生物低于 50% 的生命值时起作用:
Skills: - ignite{ticks=100} @target ~onAttack <50%
机会是另一个可以添加到技能线的简单且可选的条件。机会总是放在技能线上的最后一件事,是一个简单的十进制数,其中 1.0 是 100%,0.5 是 50%,0 是 0%。
所以总结一下这个例子,假设你希望这个触发器只在 50% 的近战攻击中触发:
Skills: - ignite{ticks=100} @target ~onAttack <50% 0.5
技能参数是一项新功能,可让您更轻松地创建通用技能并将参数从其他技能传递给它们。如果这听起来令人困惑,这里有一个例子! 目前大多数人有很多类似的伤害技能,只是针对他们所有不同的怪物稍微调整了一下伤害的轻微差异,但除此之外他们做的事情基本上是一样的。
这样做的旧方法:
ShadowDamage20: Skills: - damage{amount=20} - some shadowy effect Mob1: Skills: - skill:ShadowDamage20 ~onAttack
通过技能参数,我们可以将所有这些组合成一个技能!新方式:
ShadowDamage: Skills: - damage{amount=<skill.damage>} Mob1: Skills: - skill:ShadowDamage{damage=20} ~onAttack
这个小怪仍然会对目标造成20点伤害。 “技能参数”系统会将技能/高级技能机制中的任何选项(特定于它的选项除外)传递到技能树中,您以后可以在其中引用它们。如果后面的技能传递了相同的参数,它将覆盖它。这些可以在任何支持占位符的地方使用。
把它全部包起来! 如您所见,虽然原始技能看起来令人生畏,但将其分解成碎片会使事情变得简单得多。 一旦您掌握了使用单个基本技能的窍门,您就可以使用高级技能将它们组合成更复杂的技能。这将在后面的文章中介绍。