MythicMobs 提供了自行编写生物AI的能力,这可以为生物添加一大堆高度自定义的设定,如生物怎样近战、攻击哪些目标、和其他的动作。

在以下的一节里,我将会提供一些例子来展示如何配置一些服务器常用的场景。

AI 目标 & 派系(AI Goals & AI Targets & Factions)

  • 自定义 AI 通常需要两个配置来工作,即 AI Goals,这告诉生物它需要怎样动作,和 AI Targets,这告诉生物怎样锁定目标。
  • 派系用于将生物分组,经常用于更高级的配置中。
  • 作为默认,每个 Minecraft 生物都有一些全局 AI 。举个例子,骷髅的 AI 告诉了骷髅应该锁定玩家为目标,并且应该使用弓和箭来攻击。为了使用 MythicMobs 重写骷髅的AI,我们要先清除它的 AI Goals,然后给他们添加新的目标。

让我们看看底下这个例子:

DecayingSkeleton:
  Mobtype: skeleton
  Display: '&aa decaying skeleton'
  Health: 15
  Damage: 1
  Faction: Undead
  AIGoalSelectors:
  - 0 clear
  - 1 arrowattack
  AITargetSelectors:
  - 0 clear
  - 1 players
  Options:
    FollowRange: 10
    MovementSpeed: 0.2
    PreventOtherDrops: true
  • 这个示例展示了 骷髅 AI 如何攻击目标。(剪掉了其他没啥用的东西,比如随机的走动)
  • AIGoalSelectors 项告诉了骷髅使用弓与箭攻击目标。
  • AITargetSelectors 项告诉了骷髅应该锁定玩家。
  • 如你所见,一般第一件事是 clear,这样你就有一个空的AI来编辑了,这是很重要的,如果不这样做,你的AI可能不会像预期那样工作
  • 现在我想让骷髅近战攻击其他的派系的生物,让我们看看这是怎么做到的:
    DecayingSkeleton:
    Mobtype: skeleton
    Display: '&aa decaying skeleton'
    Health: 15
    Damage: 1
    Faction: Undead
    AIGoalSelectors:
    - 0 clear
    - 1 meleeattack
    AITargetSelectors:
    - 0 clear
    - 1 hurtbytarget
    - 2 otherfactionmonsters
    Equipment:
    - COS_WoodSword:0
    Options:
      FollowRange: 10
      MovementSpeed: 0.2
      PreventOtherDrops: true
    
  • 骷髅 AI 编写为攻击其他派系生物和攻击它的生物,作为附加,它会使用近战攻击而不是远程攻击。
  • AIGoalSelectors 项现在将目标设置为近战,需要注意的是你只有给骷髅装备剑才能使用近战攻击,装备弓的时候是不行的。但是这对僵尸是不需要的。
  • AITargetSelectors 项现在将玩家移除出了它的目标范围,所以现在骷髅不会主动攻击玩家。现在骷髅将会主动攻击其他派系的生物,也就是不在它自己的派系里的生物(比如不在Undead)。这里也有一个 hurtbytarget 的优先度为1,也就是说如果有生物主动攻击了它(比如玩家),骷髅就会反击。这个属性的优先级一般都很高,这样它们就不会被随意利用。如果没有这个,骷髅就会很容易的被击杀,而不会反击,这显然不是想要的结果。
  • 查看完整的 Goals 和 Targets,请查看自定义 AI
  • 在接下来的两个小节里,我会展示经常使用的场景以及它们的 AI 配置,这也是你可能想要在服务器里实现的功能。

    示例 1:守卫攻击附近怪物

  • 在这个场景里,我们想在城市的入口生成一些守卫,用以清除赶走附近乱晃的太近的怪物,你可以使用一个伪装成村民的铁傀儡,但是它们的 AI 更难控制,而且它们的击退特效对怪物也不是很公平,所以我们要使用 MythicMobs 的自定义 AI 来完成这件事。
  • 首先,我们需要一只生物来守护我们的城镇。让我们创建一个伪装成村民的骷髅,并给它装备剑。
    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
    
  • 如果我们将这个生物放入刷怪点,它将攻击所有的玩家,所以我们需要调整一下,让它更加友善。
    SummonedGuard1:
    Mobtype: skeleton
    Display: '&Ea town guard'
    Health: 500
    Damage: 5
    Equipment:
    - COS_StoneSword:0
    Faction: Guard
    AIGoalSelectors:
    - 0 clear
    - 1 opendoors
    - 2 meleeattack
    AITargetSelectors:
    - 0 clear
    - 1 hurtbytarget
    - 2 otherfactionmonsters
    Options:
      Disguise: villager
      Despawn: true
      FollowRange: 5
      AlwaysShowName: false
      MovementSpeed: 0.35
      PreventOtherDrops: true
      KnockbackResistance: 1
      PreventMobKillDrops: true
    
  • 现在这个生物会攻击其他生物,也会攻击攻击它的生物(比如一些无良玩家),在攻击的时候也会主动开门。
  • 这解决了一半的问题。下一步,我们需要保证城墙外游荡的生物会主动攻击我们的守卫。
  • 在下面我们设置了一个 Decaying Skeleton,并且也对他们进行设置。
    DecayingSkeleton:
    Mobtype: skeleton
    Display: '&aa decaying skeleton'
    Health: 15
    Damage: 1
    Faction: Undead
    AIGoalSelectors:
    - 0 clear
    - 1 meleeattack
    AITargetSelectors:
    - 0 clear
    - 1 hurtbytarget
    - 2 players
    Equipment:
    - COS_RawHead:4
    - COS_WoodSword:0
    Options:
      Despawn: true
      FollowRange: 10
      AlwaysShowName: false
      MovementSpeed: 0.2
      PreventOtherDrops: true
    
  • 我们的 Decaying Skeleton 现在在 Undead 派系(与 Guard 派系不同),这样他就会被守卫主动攻击。并且添加 hurtbytarget 后,他们会反击来自守卫的攻击(然后死掉)。
  • 其他在城镇附近生成的怪物,我们也会添加相同的 AI ,这样这些生物就有了与守卫不同的派系。
  • 现在在我们生成我们的刷怪点后,它会守卫村庄,忽略玩家(只要他们不去主动招惹)。
  • 其他更多的设置,比如很短的攻击距离和很短的跟随距离,会保证他们不会乱搞,而是杀死那些可以获得经验和掉落的生物。我们也添加了 PreventMobKillDrops,来防止无良玩家刷东西。

    示例 2:哥布林和半兽人互相攻击

  • 在真实世界里,我们有两个派系:哥布林和半兽人都不是很喜欢对方。我们创建了一个战场,但是它们都是用默认 AI,没有做太多的战斗。
  • 我们可以使用 MythicMobs 的自定义 AI 来实现这个功能,这样它们就会主动互相攻击,并且也会攻击晃进战场的玩家。
  • 让我们创建一个半兽人生物和一个哥布林生物。
    OrcCenturion:
    Mobtype: villagezombie
    Display: '&aan orc centurion'
    Health: 50
    Damage: 4
    Faction: Orcs
    AIGoalSelectors:
    - 0 clear
    - 1 opendoors
    - 2 meleeattack
    AITargetSelectors:
    - 0 clear
    - 1 hurtbytarget
    - 2 specificfactionmonsters Goblin
    - 3 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
    
    GoblinBattlemaster:
    Mobtype: zombie
    Display: '&aa goblin battlemaster'
    Health: 80
    Damage: 4
    Faction: Goblin
    AIGoalSelectors:
    - 0 clear
    - 1 opendoors
    - 2 meleeattack
    AITargetSelectors:
    - 0 clear
    - 1 hurtbytarget
    - 2 specificfactionmonsters Orcs
    - 3 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
    
  • 这里是我们的设置里需要注意的一些地方:
  • 第一步,我们设置了半兽人生物在 Orc 派系,而哥布林生物在 Goblin 派系,这会将两种生物分开。
  • 下一步,我们都给每个生物配置了 clear,opendoors(开门),和 meleeattack(近战),这适用于大多数近战生物。
  • 最后我们将 AI Targets 清空。
  • 第一是 hurtbytarget 选择器,之前也提过,这是一个很好的反击设置,这样这个生物就不会被利用。
  • 下一步是 specifictargetfaction 选择器,选择互相的阵营。设置优先度为 2,这样它们没有在战斗的时候,就会主动攻击对方。
  • 最后是 players 玩家选择器,如果附近没有哥布林/半兽人,它们就会攻击玩家。
  • 最后记得添加 PreventMobKillDrops 为 true,这样路过的玩家就不会捡到满地的掉落物和经验。
  • 如果我们要配置其他的哥布林和半兽人类型的生物,我们需要复制粘贴他们的 AI 设置,这样它们就会跟半兽人/哥布林的 AI 相同了。

results matching ""

    No results matching ""