# 炮塔教程：升级(Upgrades)

## 升级属性(attribute)

升级部分将会定义炮塔在某个等级拥有的属性，你可以尽你所需的添加升级级数

| 属性名                                                                     | 描述                                                                                                                                                                                                               |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **speed**                                                               | 炮塔射击间隔，按秒计算                                                                                                                                                                                                      |
| **range**                                                               | 炮塔攻击范围                                                                                                                                                                                                           |
| <p><strong>min\_damage</strong> </p><p><strong>max\_damage</strong></p> | 当Target设置为ENEMIES时(当然也可以是ALLIES，这样你就能痛击你的队友了)，炮塔的最小和最大伤害                                                                                                                                                         |
| <p><strong>min\_heal</strong></p><p><strong>max\_heal</strong></p>      | 当Target设置为ALLIES时，炮塔的最小最大治愈血量                                                                                                                                                                                    |
| **health**                                                              | 炮塔的血量，你可以用弓来攻击炮塔，也可以用爆炸，如果你想让炮塔无敌的话，那就把这个属性删掉                                                                                                                                                                    |
| **splash\_radius**                                                      | 炮塔攻击的影响范围，按照方块格数计算                                                                                                                                                                                               |
| **max\_targets**                                                        | 炮塔一次性可攻击的敌人的最大数量                                                                                                                                                                                                 |
| **accuracy**                                                            | 炮塔射击的精准度，如果你想让炮塔必中的话，那就把这个属性删除或将值设置为100%。如果炮塔种类为PARABOLIC的话，它可能打不中敌人，但是这并不意味着它不造成伤害(范围性伤害)                                                                                                                       |
| **critical\_hit**                                                       | 让炮塔可以造成暴击，详见下方                                                                                                                                                                                                   |
| <p><strong>entity\_damage\_</strong><br><strong>reduction</strong></p>  | <p>这是一个公式，每次玩家或实体被炮塔击中时都会被使用，并通过检查实体的护甲来减少伤害. 详见下方.</p><p><code>entity\_damage\_reduction: "%armor%\*0.03+%protection\_environmental\_level%\*0.02"</code></p>                                                   |
| **shield\_reduction**                                                   | <p>这将检查玩家是否用盾牌格挡并减少其最终受到的伤害。如果你将其设置为0.8，这意味着伤害将减少80%。请使用介于0和1之间的值。如果使用，则在已应用<code>entity\_damage\_reduction</code></p><p>后应用<code>shield\_reduction: 0.9</code></p>                                              |
| **max\_ammo**                                                           | 炮塔升级中弹药数量的最大上限. **必须**为 **576** 的倍数(576, 1152, 1728等等). `max_ammo: 2880`                                                                                                                                         |
| **custom\_upgrade\_item**                                               | <p>只在这个等级替代升级物品的某个物品. 你必须使用和升级物品相同的格式:</p><p><code>custom\_upgrade\_item:</code></p><p>  <code>id: \<id></code></p><p>  <code>name: \<name></code></p><p>  <code>lore:</code></p><p>  <code>- \<lore></code></p> |
| **custom\_block\_item**                                                 | 同上，只不过替代的是方块物品                                                                                                                                                                                                   |
| **money\_cost**                                                         | 炮塔升级所需的钱数 (需要Vault)                                                                                                                                                                                              |
| **item\_cost**                                                          | 炮塔升级所需的物品                                                                                                                                                                                                        |
| **actions**                                                             | 击中目标要执行的动作，更多信息见下方                                                                                                                                                                                               |

```yaml
upgrades:
    1: #第一级
      speed: 3
      range: 11
      min_damage: 1
      max_damage: 2
      splash_radius: 1.5
      accuracy: 60
      health: 50
      money_cost: 0
    2: #第二级
      speed: 2.5
      range: 13
      min_damage: 8
      max_damage: 15
      splash_radius: 2.5
      accuracy: 80
      health: 70
      money_cost: 1000
```

## 动作(Actions)

炮塔升级后可以有actions属性

### Potion Effect

这个动作将会在击中生物后对其造成药水效果.

| 选项(和例子)                            | 描述                                                                                                                                                                                                                                            |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **type:** "potion\_effect: SLOW;1" | <p>使用以下格式: </p><p>"potion\_effect: <药水效果>;<等级>" 药水效果列表: <a href="https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html"><https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html></a></p> |
| **duration:** 7                    | 效果持续时间                                                                                                                                                                                                                                        |
| **probability:** 60                | 击中后产生效果的几率(%)                                                                                                                                                                                                                                 |

```yaml
# 下方例子为击中生物后有60%的几率让它获得7秒的缓慢1
2:
      speed: 2.5
      range: 13
      min_damage: 8
      max_damage: 15
      splash_radius: 2.5
      health: 70
      money_cost: 1000
      actions:
        action1:
          type: "potion_effect: SLOW;1"
          duration: 7
          probability: 60
```

### Freeze

这个动作会让生物受到冰冻效果(1.17+)

```yaml
actions:
  action1:
    type: "freeze"
    duration: 5
    probability: 20
```

### Set on fire

这个动作会让生物着火

```yaml
actions:
  action1:
    type: "set_on_fire"
    duration: 5
    probability: 20
```

### Knockback

这个动作会对生物产生击退效果

```yaml
actions:
  action1:
    # 请使用以下格式:
    # "knockback: <击退力>"
    # 此动作无需持续时间.
    type: "knockback: 0.5"
    probability: 100
```

## Entity Damage Reduction

大部分情况下你会想要炮塔根据玩家的护甲值来减少伤害，如果是这样的话，你得添加`entity_damage_reduction`选项，它是一个方程\
阅读下方例子来获取详细信息

```yaml
# 炮塔默认伤害为1-1.5.
# 现在想象一个玩家穿上了一套没有附魔的下界合金装备
# 这意味着他的削减伤害为
# 20 * 0.03 + 0 * 0.03 = 0.6
# <20> 代表护甲值，而 <0> 意味着玩家不具有弹射物保护附魔
# <0.6>最终值意味着玩家将炮塔伤害减少60%
# 如果炮塔伤害为1.2,那么玩家将会受到0.48伤害.

# 那么如果玩家拥有一套附魔着弹射物保护4的下界合金护甲呢？
# %protection_projectile_level%在这种情况下为4+4+4+4 = 16
# 现在方程将变为:
# 20 * 0.03 + 16 * 0.03 = 0.6 + 0.48 = 1.08
# 这意味着将会减少108%的伤害，这是不可能的，所以最终将减少100%的伤害，这意味着玩家无法受到炮塔的伤害
upgrades:
    1:
      speed: 0.75
      range: 10
      min_damage: 1
      max_damage: 1.5
      health: 50 
      entity_damage_reduction: "%armor%*0.03+%protection_projectile_level%*0.03"
      money_cost: 0
```

| 变量                                     | 描述            |
| -------------------------------------- | ------------- |
| **%armor%**                            | 玩家护甲值.        |
| **%armor\_toughness%**                 | 玩家护甲韧性.       |
| **%protection\_projectile\_level%**    | 玩家弹射物保护附魔等级相加 |
| **%protection\_environmental\_level%** | 玩家保护附魔等级相加    |
| **%protection\_explosions\_level%**    | 玩家爆炸保护附魔等级相加  |
| **%protection\_fire\_level%**          | 玩家火焰保护附魔等级相加  |

## Item Cost

你可以不用钱而是用物品来为炮塔升级<br>

| 选项                                                          | 描述                                                                                                                                                                                                                                                                                                                      |
| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **id:** DIAMOND                                             | <p>所需物品的材质:</p><p>最新版本的材质列表: <a href="https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html"><https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html></a></p><p>1.8: <a href="https://helpch.at/docs/1.8/org/bukkit/Material.html"><https://helpch.at/docs/1.8/org/bukkit/Material.html></a></p> |
| **name:** "Epic Diamond"                                    | 物品名，请勿使用颜色代码                                                                                                                                                                                                                                                                                                            |
| <p><strong>lore:</strong></p><p>-"Example lore"</p>         | 物品描述，请勿使用颜色代码                                                                                                                                                                                                                                                                                                           |
| **amount:** 5                                               | 所需数量                                                                                                                                                                                                                                                                                                                    |
| <p><strong>message\_displayname:</strong></p><p>"\&e钻石"</p> | 所需物品的名称(支持颜色代码).                                                                                                                                                                                                                                                                                                        |

```yaml
# 下方例子为需要五个叫做&eDiamond的钻石和十个叫做&eIron Ingot的铁锭才能把炮塔升级到二级
2:
      speed: 5
      range: 6
      min_heal: 3
      max_heal: 5
      max_targets: 3
      health: 70
      item_cost:
        item1:
          id: DIAMOND
          message_displayname: "&eDiamond"
          amount: 5
        item2:
          id: IRON_INGOT
          message_displayname: "&eIron Ingot"
          amount: 10
```

## Critical Hit

让你的炮塔造成暴击,这样可以造成更多伤害，或者回更多的血

```yaml
3:
      speed: 0.25
      range: 14
      min_damage: 2
      max_damage: 3
      health: 100
      money_cost: 3000
      critical_hit:
        # 暴击几率
        chance: 60
        
        # 暴击伤害加成
        min_damage: 4
        max_damage: 8
        
        # 治疗暴击加成
        min_heal: 2
        max_heal: 4
```
