====== 阵营 Factions ====== ====== 自定义 生物 AI ====== ---- MythicMobs 提供了在你的生物中对自定义生物 AI 进行编程的能力,这允许对生物如何攻击、他们选择攻击的目标以及其他动作进行大量额外的定制。 在以下部分中,我将提供一些示例,说明如何配置您可能希望在服务器上使用的几个常见场景。 **玩家注意事项:** 默认情况下,MythicMobs 使用权限系统让玩家被视为阵营的一部分。如果玩家有权限''faction.(factionname)'',他们将被考虑在阵营中。 通过注册自定义阵营提供者,可以使用 API 覆盖此行为。 ===== AI 目标、目标和阵营 ===== * 定义 AI 通常需要配置两件事才能工作。你需要**AI Goals**,它告诉生物它应该如何行动,你需要**AI Targets**告诉生物它需要攻击的 目标。 * **阵营**用于将生物分组,稍后将用于更高级的配置。 * 默认情况下,大多数(不是全部)Minecraft 生物都有某种内部 AI 目标列表,可以告诉他们 AI 应该如何工作。例如,骷髅 AI 说它应该以玩家为目标,并且在攻击所述玩家时应该使用箭矢的攻击选项。 * 为了使用 MythicMobs 重新编程 AI,我们必须首先明确其 AI 目标和目标,然后向这些领域添加新目标。 * 自定义 AI 不适用于所有生物。一些生物,例如末影龙,是硬编码的,无法更改。**__尝试更改这些 AI 甚至可能会使您的服务器崩溃,所以要小心并使用测试环境!__** DecayingSkeleton: Mobtype: skeleton Display: '&aa decaying skeleton' Health: 15 Damage: 1 Faction: Undead AIGoalSelectors: - clear - arrowattack AITargetSelectors: - clear - players Options: FollowRange: 10 MovementSpeed: 0.2 PreventOtherDrops: true * 此示例显示了骷髅 AI 通常如何用于攻击。 (减去了所有细节,例如随机走动的代码)。 * 现在守卫将锁定其它阵营的任何实体为目标并会在受伤后锁定攻击者为目标 (这将包括攻击它的玩家),同时在走向目标时会打开面前的门. * **AIGoalSelectors** 部分告诉骷髅在实现其日常目标时使用 **arrowattack** 动作。 * **AITargetSelectors** 部分告诉 骷髅 它应该寻找目标 **玩家** 来使用 **arrowattack** 动作。 * 如您所见,**clear** 始终是第一位的,在这种情况下,它会清除原本的 AI,因此您可以使用干净的AI。 这很重要,否则您的 AI 可能无法按您预期的方式运行。 ---- * 现在假设我们希望骷髅改为攻击其他生物,并且我们希望他使用近战攻击而不是远程攻击。 请参阅下文了解我们如何实现这一点。 DecayingSkeleton: Mobtype: skeleton Display: '&aa decaying skeleton' Health: 15 Damage: 1 Faction: Undead AIGoalSelectors: - clear - meleeattack AITargetSelectors: - clear - hurtbytarget - otherfactionmonsters Equipment: - COS_WoodSword:0 Options: FollowRange: 10 MovementSpeed: 0.2 PreventOtherDrops: true * 骷髅 AI 现在被编程为攻击其他生物,以及首先攻击它的任何生物。此外,它将使用近战攻击而不是远程攻击。 * **AIGoalSelectors** 部分现在有 **meleeattack** 目标,表示使用近战攻击。应该注意的是,你现在必须给骷髅装备一把剑,这样他才能使用近战攻击,因为你不能用装备了弓的近战攻击(骷髅默认武器)这对僵尸来说不是必需的。 * **AITargetSelectors** 部分现在移除了 **players** 目标,因此 骷髅 不会主动攻击玩家。相反,它有 **otherfactionmonsters** 目标,它告诉它应该攻击任何不在自己阵营中的生物(在本例中为 Undead)。还有一个优先级为 1 的 **hurtbytarget** 选择器,它表示如果任何其他实体首先攻击骷髅(例如玩家),那么它会进行报复。这个目标选择器是一个常见的选择器,应该设置为更高的优先级,这样生物就不会被利用。如果没有这个,玩家可以杀死骷髅而它不会反击,这通常是不想要的效果。 ===== 示例 1:守卫攻击附近的怪物 ===== * 在这种情况下,我们希望在我们城市的入口处设置一些守卫,以击退游荡太近的怪物。你可以使用一个伪装成村民的铁傀儡来实现这个功能,但他们的 AI 更难控制,而且他们有特殊的击倒攻击,这对怪物来说是不公平的,所以我们将使用 MythicMobs 的自定义 AI 来完成同样的事情以更好的方式。 * 我们首先需要的是一群强壮的 守卫mob 来保护我们的城镇。让我们创造一个**伪装**成村民的骷髅,并为他装备一把剑。 SummonedGuard1: Mobtype: skeleton Display: '&Ea town guard' Health: 500 Damage: 5 Equipment: - COS_StoneSword:0 Options: Disguise: villager Despawn: true FollowRange: 5 AlwaysShowName: false MovementSpeed: 0.35 PreventOtherDrops: true KnockbackResistance: 1 PreventMobKillDrops: true * 所以如果我们把这个生物和我们镇门口的刷怪点(Spawners)绑定起来,他就会去攻击我们镇上的所有玩家,所以我们需要做一些调整来让他变得友好。 SummonedGuard1: Mobtype: skeleton Display: '&Ea town guard' Health: 500 Damage: 5 Equipment: - COS_StoneSword:0 Faction: Guard AIGoalSelectors: - clear - opendoors - meleeattack AITargetSelectors: - clear - hurtbytarget - otherfactionmonsters Options: Disguise: villager Despawn: true FollowRange: 5 AlwaysShowName: false MovementSpeed: 0.35 PreventOtherDrops: true KnockbackResistance: 1 PreventMobKillDrops: true * 现在,生物将针对除他自己以外的其他包含怪物的阵营,并将针对任何伤害他的人(这将阻止我们一些道德感较低的玩家为此杀死我们的守卫)他还将打开任何门以获取到他的目标。 * 那么问题来了。接下来,我们需要确保在我们城墙外漫游的怪物会反击我们的守卫。 * 下面我们将新建我们的 DecayingSkeleton (这个mob的名字)并对其进行配置。 DecayingSkeleton: Mobtype: skeleton Display: '&aa decaying skeleton' Health: 15 Damage: 1 Faction: Undead AIGoalSelectors: - clear - meleeattack AITargetSelectors: - clear - hurtbytarget - players Equipment: - COS_RawHead:4 - COS_WoodSword:0 Options: Despawn: true FollowRange: 10 AlwaysShowName: false MovementSpeed: 0.2 PreventOtherDrops: true * 我们的DecayingSkeleton (这个mob的名字)现在在 **亡灵阵营**(与守卫阵营不同),所以他会被守卫攻击。此外,通过添加伤害目标选择器,如果与守卫交战(并最终死亡),我们的 DecayingSkeleton 现在会反击 * 对于我们在城镇附近生成的任何其他生物,我们希望为 骷髅 添加与上面配置相同的 AI 目标和目标,以确保该生物与守卫具有**不同的阵营**。 * 现在,当我们在城门口为城镇守卫设置刷怪笼时,他会击退怪物但无视玩家(只要他们不理会守卫) * 在这种情况下,我们可能想要设置的一些附加设置是警卫的短跟随范围(在这种情况下为 5)在刷怪点的控制范围。这将确保守卫不会到处跑并杀死 玩家想杀怪物。我们还希望确保守卫将**PreventMobKillDrops**设置为true,这样他的击杀不会为我们的玩家掉落经验/战利品。 ===== 示例 2:兽人和地精互相攻击 ===== * 所以在我们的世界里,我们有两个阵营,地精和兽人,他们彼此不太喜欢。我们有一个战场设置,他们处于不断的战争中,除了现在他们都使用带有默认 AI 的骷髅暴徒类型并且他们没有进行太多战斗。 * 我们希望使用 Mythic Mobs 自定义 AI 配置它们,以便它们在靠近战场时与任何徘徊在战场上的玩家进行战斗。 * 让我们创建一个兽人生物和一个地精生物。 兽人百夫长: Mobtype: villagezombie Display: '&aan 兽人百夫长' Health: 50 Damage: 4 Faction: Orcs AIGoalSelectors: - clear - opendoors - meleeattack AITargetSelectors: - clear - hurtbytarget - specificfactionmonsters Goblin - players Equipment: - C_DeathfistSkullcap:4 - C_DeathfistTunic:3 - C_DeathfistLeggings:2 - C_DeathfistBoots:1 - COS_WoodSword:0 Options: Despawn: true FollowRange: 10 AlwaysShowName: false MovementSpeed: 0.25 PreventOtherDrops: true PreventItemPickup: true KnockbackResistance: 0.25 PreventMobKillDrops: true 地精斗士: Mobtype: zombie Display: '&aa 地精斗士' Health: 80 Damage: 4 Faction: Goblin AIGoalSelectors: - clear - opendoors - meleeattack AITargetSelectors: - clear - hurtbytarget - specificfactionmonsters Orcs - players Equipment: - COS_BronzeHead:4 - COS_BronzeChest:3 - COS_BronzeLegs:2 - COS_BronzeFeet:1 - COS_WoodAxe:0 Skills: - skill BashI ~onAttack >0 0.25 Options: Despawn: true FollowRange: 10 AlwaysShowName: false MovementSpeed: 0.25 PreventOtherDrops: true PreventItemPickup: true KnockbackResistance: 0.4 PreventMobKillDrops: true * 我们在这里配置了一些值得注意的东西。 * 首先,我们在 **兽人 Faction** 上设置了 "orc" mob,在 **地精 Faction** 上设置了 "Goblin" mob。这将在逻辑上将两种生物类型分开。 * 接下来,我们用标准的**lear, opendoors, and meleeattack**动作来配置这两种生物,这对于大多数近战型生物来说是常见的。 * 最后,我们清除我们的 AI,然后设置三个 AI 目标选择器。 * 首先是 **hurtbytarget** 选择器,如前所述,它是一个很好的回退选项,这样生物就不会被其他生物或他们不会攻击的玩家利用。 * 接下来是带有反对阵营的**specifictargetfaction**选择器。这被设置为优先级 2 ,因此地精和兽人将在他们尚未进入战斗时首先瞄准对方 * 最后一个是 **players** 目标选择器,它告诉怪物如果附近没有地精/兽人就攻击玩家。 * 最后记住将 **PreventMobKillDrops** 设置为 true,这样交战的 npc 阵营就不会为碰巧经过的玩家掉落经验/战利品。 * 如果我们有其他地精或兽人生物类型,我们只需要将这些 AI 配置复制并粘贴到他们的生物设置中,它们的反应应该与上面的两个生物类似。