伤害系统
这是对 EliteMobs 中生命值/伤害如何缩放的全面解析。在设计副本时应将其用作参考。
本页主要说明涉及自定义 Boss 的普通攻击。自然精英怪使用相同的基础曲线,并可应用下文的缩放战斗和旧版生命值选项。脚本直接伤害、魔法武器和职业能力可能走不同的伤害流程,详见自定义伤害与吸收。
在开始之前!
如果你只是想做一些快速调整,并不需要把这些全部读完。直接跳到“将这些数据用于副本”一节,查看极其简化的快速算法以及一系列预设的推荐配置!
缩放(总体而言)
EliteMobs 将指数形式的技能调整与装备修饰结合使用。未应用上限的 Boss 生命值公式每 5 级翻倍,进攻和防御技能调整则每相差 7.5 级翻倍。达到 Minecraft 配置的生命值上限后,Boss 生命值和玩家基础伤害不再仅随怪物等级增长,因此这些曲线不能保证所有等级区间的战斗体验相同。
玩家战力结合了两个独立计算的层面:
- 武器熟练度等级 —— 通过用特定武器类型(剑、斧、弓、弩、三叉戟、锄、重锤、长矛、法杖或魔杖)击杀精英怪获得。
- 物品等级 —— 玩家所装备的武器或护甲件的精英等级。
玩家通过符合条件的精英怪击杀获得护甲熟练度经验。其起点为基础经验份额的三分之一,再应用独立的修饰和取整。仅仅受到攻击不会获得此经验。当生命值设置和世界规则允许时,每超过 1 级增加 1 颗心的最大生命值。护甲熟练度也决定对抗 Boss 伤害的防御缩放。
武器熟练度
武器 XP 按伤害贡献分配给命中或发射投射物时记录的技能。怪物死亡时切换武器不会改变 XP 的归属。护甲 XP 的获取比例较低。
可用的武器熟练度有:
| 熟练度 | 武器 |
|---|---|
| 剑(Swords) | 所有剑类 |
| 斧(Axes) | 所有斧类 |
| 弓(Bows) | 弓 |
| 弩(Crossbows) | 弩 |
| 三叉戟(Tridents) | 三叉戟 |
| 锄(Hoes) | 所有锄类 |
| 重锤(Maces) | 重锤(1.21+) |
| 长矛(Spears) | 所有长矛类(1.21.11+) |
| 法杖 | 标记为 weaponType: STAVES 的自定义模型武器 |
| 魔杖 | 标记为 weaponType: WANDS 的自定义模型武器 |
| 护甲(Armor) | 随符合条件的精英怪击杀成长的防御熟练度 |
经验初始值为 mobLevel^2,还受 Boss 生命值与伤害倍率、贡献份额、奖励等级限制和经验特权影响。100 级是软上限,不是最高等级,之后所需经验仍会增加。奖励规则见熟练度系统。
熟练度加成
全部十种武器熟练度和护甲熟练度都拥有熟练度加成,即随等级解锁的特殊能力。玩家可以选择激活的加成,共有五类:
- 被动(Passive) —— 装备时始终生效(例如,固定的伤害提升)。
- 条件(Conditional) —— 仅在满足特定条件时生效(例如,目标生命值低于 30% 时的额外伤害)。
- 触发(Proc) —— 在特定事件上基于几率触发(例如,命中时有几率造成流血)。
- 叠加(Stacking) —— 在连续动作中不断累积(例如,连续命中提高伤害)。
- 冷却(Cooldown) —— 带有内部冷却的强力效果(例如,每 60 秒一次免疫致命伤害)。
玩家每种武器或护甲类型最多可激活 3 个加成。本页的曲线均不包含它们。在使用这些数值设计战斗前,请参阅伤害流程中的熟练度加成,了解实际伤害如何变化。
来自武器熟练度的进攻型熟练度加成会作为加法伤害倍率叠加在对 Boss 造成的基础伤害之上。来自护甲熟练度的防御型熟练度加成会通过各种机制(固定减免、闪避、伤害护盾等)减少传入的 Boss 伤害。
自定义 Boss 造成的伤害
EliteMobs 10 中的 Boss 伤害使用三个相乘的层级,并且没有预补偿。该系统的设计使得装备恰当的玩家能从同等级内容中存活大约 5 次攻击。
自定义 Boss 的伤害公式为:
1. playerMaxHealth = 20 + (armorSkillLevel - 1) * 2
2. baseDamage = playerMaxHealth / 5.0
3. skillAdjustment = 2 ^ ((bossLevel - armorSkillLevel) / 7.5)
4. gearAdjustment = 2.0 * (1 - gearReduction)
5. scaledDamage = baseDamage * skillAdjustment * gearAdjustment
6. [explosion distance attenuation, if applicable]
7. potionMultiplier = source Strength/Weakness multiplier * player Resistance multiplier
8. finalDamage = max(scaledDamage, 1) * potionMultiplier * customBossDamageMultiplier * specialMultiplier * configMultiplier
9. capHealth = [Alpha] Advanced Combat System active ? max(1, actualMaxHealth - 30) : actualMaxHealth
10. finalDamage = min(finalDamage, capHealth - 1)
这三个层级是:
- 基础伤害 —— 玩家预期每次受击会损失多少生命值(
playerMaxHealth / 5)。 - 熟练度调整 —— 来自 Boss 等级与玩家护甲熟练度等级之差的指数缩放。
- 装备调整 —— 基于玩家所装备护甲与保护附魔的、感知伤害类型的减免(见下方“装备防御系统”)。
普通战斗的单次伤害上限为实际最大生命值减 1。[Alpha] Advanced Combat System 启用时,会先扣除该模式固定增加的 30 HP。额外生命值提高生存能力,但不增加受到的基础伤害。上限在公式内部应用,早于格挡和事件监听器。自定义直接伤害会绕过它,已受伤的玩家仍可能被一击杀死。
playerMaxHealth
启用默认护甲生命值设置时,基准为 20 HP,每超过护甲 1 级增加 2 HP。因此 50 级在其他修饰前为 118 HP。可在 skills.yml 中禁用此加成,排除的世界也不会获得加成。基础值固定为 20 HP,该文件没有基础生命值设置。启用 [Alpha] Advanced Combat System 时,其受管理战斗世界规则也会决定加成的适用范围。
baseDamage
基础伤害就是 playerMaxHealth / 5.0。这是装备恰当的同等级玩家每次受击预期承受的伤害量。与旧系统不同,这里没有预补偿——基础值就是目标伤害,而非一个被夸大的原始值。
skillAdjustment
熟练度调整使用指数缩放,使 Boss 与玩家护甲熟练度之间的等级差具有意义:
skillAdjustment = 2 ^ ((bossLevel - armorSkillLevel) / 7.5)
每相差 7.5 级,Boss 的有效伤害翻倍或减半。该曲线比未受上限约束的 Boss 生命值增长更慢,后者每 5 级翻倍。装备调整层会提供额外缩放。
| 等级差 | 熟练度调整 | 击杀所需的大致击数(装备匹配) |
|---|---|---|
| 同级(0) | 1.0x | 约 5 击 |
| +5 级 | 约 1.6x | 约 3 击 |
| +10 级 | 约 2.5x | 约 2 击 |
| +15 级 | 4.0x | 约 1.25 击 |
装备防御系统
装备防御系统取代了旧的装备坡度。系统不再基于熟练度等级假定一个固定的预补偿倍率,而是读取玩家实际装备的装备,并计算一个感知伤害类型的装备减免。
伤害类型
系统将传入伤害分为五类。伤害类型决定哪些保护附魔会计入装备分数:
| 伤害类型 | 事件成因 | 所用保护附魔 |
|---|---|---|
| MELEE | 直接攻击、横扫攻击 | 仅保护(Protection) |
| PROJECTILE | 箭矢、火球 | 保护 + 弹射物保护 |
| EXPLOSION | 苦力怕、恶魂爆炸 | 保护 + 爆炸保护 |
| FIRE | 火焰、火焰跳伤 | 保护 + 火焰保护 |
| OTHER | 其他一切 | 仅保护(Protection) |
装备分数
装备分数将护甲等级和附魔加成合并为一个可与攻击怪物等级相比较的单一值:
gearScore = (sum of armorLevel for 4 armor slots) / 4
+ (sum of enchantBonus for all 6 slots) / 4
护甲等级按每件物品确定:
- 精英物品使用
materialTier + 4 * eliteDefenseAttribute。正常生成的护甲通常符合预期等级,但只修改存储的物品等级标签不会改变此防御值。精英材质基数为皮革/金/海龟 3、锁链 5、铁 6、钻石 7、下界合金 8,与下方原版表不同。 - 原版物品使用基于材质的查表:
| 材质 | 护甲等级 |
|---|---|
| 皮革 | 1 |
| 金 | 2 |
| 锁链 | 3 |
| 铁 | 4 |
| 海龟壳 | 4 |
| 钻石 | 5 |
| 下界合金 | 7 |
| 铜(仅限包含铜护甲的服务器版本) | 2 |
只有 4 个护甲槽位(头盔、胸甲、护腿、靴子)会贡献护甲等级。
附魔加成将保护附魔等级转换为等效的护甲等级单位:
enchantBonus = (general Protection level + type-specific Protection level) * (1/3)
全部 6 个装备槽位(4 个护甲 + 主手 + 副手)都会贡献附魔加成。这意味着带有保护附魔的盾牌或武器会提供额外防御。对总和进行 /4 归一化意味着,在全部 6 个槽位上都有附魔,相比仅在 4 件护甲上有附魔,最多可提供多 50% 的附魔贡献。
计算示例:Lv25 匹配装备 + 保护 IV 对 Lv25(近战)
Player: armorSkillLevel=25, maxHP = 20 + 24*2 = 68
4 elite armor pieces each at armorLevel=25, each with Protection IV
Mob: level=25, melee attack
Step 1 -- Armor level per piece: 25 (material tier + 4 * elite defense attribute)
Step 2 -- Enchant bonus per piece: Protection IV = 4 * (1/3) = 1.333
(melee damage type, so only general Protection applies)
Step 3 -- Gear score:
armorLevelSum = 25*4 = 100, /4 = 25.0
enchantBonusSum = 1.333*4 = 5.333 (no mainhand/offhand enchants), /4 = 1.333
gearScore = 25.0 + 1.333 = 26.333
Step 4 -- Gear reduction (above matching):
reduction = 0.50 + (26.333 - 25) * 0.025 = 0.533 (53.3%)
Step 5 -- Gear adjustment: 2.0 * (1 - 0.533) = 0.933
Step 6 -- Final damage: baseDamage(13.6) * skillAdj(1.0) * gearAdj(0.933) = 12.69
Hits to kill: 68 / 12.69 = 5.36, approximately 5.4 hits
计算示例:Lv1 原版钻石 对 Lv5 骷髅(弹射物)
Player: armorSkillLevel=1, maxHP = 20
Full vanilla diamond armor (no enchants), no mainhand/offhand enchants
Mob: level=5, skeleton arrow (PROJECTILE damage type)
Step 1 -- Armor level per piece: 5 (vanilla diamond from lookup table)
Step 2 -- Enchant bonus: 0 (no enchants on any piece)
Step 3 -- Gear score: (5+5+5+5)/4 + 0/4 = 5.0
Step 4 -- Gear reduction (matching): 0.50 * (5/5) = 0.50 (50%)
Step 5 -- Gear adjustment: 2.0 * (1 - 0.50) = 1.0
Step 6 -- Final damage: baseDamage(4) * skillAdj(1.447) * gearAdj(1.0) = 5.79
Hits to kill: 20 / 5.79 = 3.45, approximately 3.5 hits
如果钻石护甲还带有弹射物保护 IV,每件会获得 4 * (1/3) = 1.333 的附魔加成。装备分数会上升到 5.0 + (1.333*4)/4 = 6.333,将减免提高到 53.3%,并显著改善对抗箭矢时的存活能力。
装备减免曲线
装备减免使用一条两段式线性曲线,在装备分数等于怪物等级的点处过渡:
低于匹配(gearScore 小于或等于 mobLevel):
reduction = 0.50 * (gearScore / mobLevel)
从 0%(裸装)到 50%(匹配)线性缩放。斜率取决于怪物等级——对抗 5 级怪物时每个装备等级提供 10% 减免,而对抗 50 级怪物时每个仅提供 1%。这自然地使低等级原版护甲对抗低等级怪物时有效,而对抗高等级怪物时无关紧要。
高于匹配(gearScore 大于 mobLevel):
reduction = 0.50 + (gearScore - mobLevel) * 0.025
高于怪物的每个装备等级固定 2.5%。在高于怪物 +10 个装备等级时达到 75% 的硬上限。
装备调整将减免转换为伤害倍率:
gearAdjustment = 2.0 * (1 - gearReduction)
| 装备情况 | 装备减免 | 装备调整 | 击杀所需击数(熟练度等级相同) |
|---|---|---|---|
| 裸装(无装备) | 0% | 2.0 | 约 2.5 |
| 半匹配装备 | 25% | 1.5 | 约 3.3 |
| 匹配装备(gearScore = mobLevel) | 50% | 1.0 | 约 5.0 |
| 高于怪物 +4 级 | 60% | 0.8 | 约 6.25 |
| 高于怪物 +10 级(上限) | 75% | 0.5 | 约 10.0 |
场景表
以下受击次数假设玩家处于满血状态,拥有普通的 20 HP 基础生命值加护甲技能生命值,伤害倍率为默认值,且没有额外生命值、药水或技能加成。[Alpha] Advanced Combat System 增加 30 HP,但不会提高受到的基础伤害,因此该模式的玩家能承受更多次攻击。
| 场景 | 熟练度调整 | 装备减免 | 装备调整 | 击数 |
|---|---|---|---|---|
| Lv1 裸装 对 Lv1 | 1.0 | 0% | 2.0 | 2.5 |
| Lv1 裸装 对 Lv5 | 1.45 | 0% | 2.0 | 约 1.7 |
| Lv1 原版钻石 对 Lv5 | 1.45 | 50% | 1.0 | 约 3.5 |
| Lv25 匹配 对 Lv25 | 1.0 | 50% | 1.0 | 5.0 |
| Lv25 匹配+保护IV 对 Lv25 | 1.0 | 53.3% | 0.93 | 5.4 |
| Lv25 匹配 对 Lv30 | 1.59 | 41.7% | 1.17 | 2.7 |
| Lv25 顶级装备 对 Lv25 | 1.0 | 75% | 0.50 | 10.0 |
| Lv50 匹配 对 Lv50 | 1.0 | 50% | 1.0 | 5.0 |
关键设计目标:
- 匹配等级下 5 击:在上述普通生命值基准下,装备恰当且满血的玩家会在受到同等级精英怪约 5 次普通攻击后死亡。
- 裸装 2.5 击 —— 没有装备意味着通过 2.0 的装备调整承受双倍伤害。立即激励玩家装备任意护甲。
- 原版护甲有意义 —— 穿钻石护甲的 1 级玩家能从 5 级怪物处存活约 3.5 击,而非裸装的约 1.7 击。
- 附魔有意义但不占主导 —— 全部 4 件护甲上的保护 IV 为装备分数增加约 1.33,把减免从 50% 推到 53.3%。可察觉(约多 8% 的存活能力),但不至于破坏平衡。
- 跨等级的共同基准:在这些条件下,25 级和 50 级的同等级战斗均以约 5 次攻击为目标。[Alpha] Advanced Combat System 的额外生命值会改变实际次数。
- 顶级装备上限为 10 击 —— 即便拥有最好的装备(高于怪物 +10 级),玩家仍会承受有意义的伤害。
potionMultiplier(防御)
受到的伤害结合攻击方精英怪的力量/虚弱倍率与玩家的抗性减免。抗性部分为:
potionMultiplier = max(0, 1.0 - (resistanceAmplifier + 1) * resistanceDamageMultiplier)
配置键是 MobCombatSettings.yml 中的 resistanceDamageMultiplierV2(默认值:0.2)。这与原版行为一致:抗性 I = 20% 减免,抗性 V = 100% 减免(免疫)。
customBossDamageMultiplier
这是自定义 Boss 文件中的伤害倍率。默认为 1。
configMultiplier(防御)
这是 MobCombatSettings.yml 中的倍率。对于归一化战斗,它使用 normalizedDamageToPlayerMultiplier(默认 1.0)。对于缩放战斗,它使用 scaledDamageToPlayerMultiplier(默认 1.0)。对于标准怪物,它使用 damageToPlayerMultiplierV2(默认 1.0)。
specialMultiplier
这是 Boss 技能为某次伤害调用提交的倍率,对应事件只消耗一次。无关的后续攻击或嵌套攻击不会继承它。默认值为 1.0。
爆炸伤害衰减
苦力怕伤害根据到苦力怕的距离及其爆炸半径衰减。恶魂分支目前使用火球的爆炸强度,并测量到恶魂的距离,而非到火球落点的距离。两者都使用 max(0, 1 - distance / radius)。随后在应用其他倍率前将衰减后的值提升到至少 1,因此距离衰减本身不保证零伤害。
自定义 Boss 的最大生命值
EliteMobs 10 中未应用上限的 Boss 生命值公式每 5 级翻倍。实际生命值受 Minecraft 最大生命值上限限制,且该上限会在 healthMultiplier 应用前后各检查一次,因此达到任一生命值上限后就不再翻倍。
自定义 Boss 的生命值公式为:
baseHealth = min(2.1875 * 2^(bossLevel / 5), minecraftMaxHealth)
health = max(1, min(baseHealth * customBossHealthMultiplier, minecraftMaxHealth))
指数缩放
基础常数(2.1875)经过调校,使 25 级 Boss 大约有 70 点生命值。生命值示例(在下文所述的最大生命值上限生效之前):
| Boss 等级 | 生命值 | +5 级后生命值 |
|---|---|---|
| 1 | 约 2.5 | 约 5(2 倍) |
| 5 | 约 4.4 | 约 8.75(2 倍) |
| 10 | 约 8.75 | 约 17.5(2 倍) |
| 25 | 约 70 | 约 140(2 倍) |
| 50 | 约 2,240 | 约 4,480(2 倍) |
| 100 | 约 2,293,760 | 约 4,587,520(2 倍) |
Minecraft 的最大生命值上限
Minecraft 本身拒绝给予实体超过 spigot.yml 中 settings.attribute.maxHealth.max 的生命值。EliteMobs 会在启动时读取该值,如果它低于 2048,就把它提升到 2048 并保存文件。我们把这个值称为 MAX。
该上限会被应用两次 —— 一次作用于纯粹的等级公式,在 healthMultiplier 应用之后再作用一次:
effectiveHealth = min( min(2.1875 * 2^(level / 5), MAX) * healthMultiplier, MAX )
内层钳制正是即使 healthMultiplier 低于 1.0 最终也会停止缩放的原因:无论你用什么倍率,纯公式都会在第 50 级越过 2048,此后下游的一切都是在一个被钉死的数字上运算。而外层钳制对于大于 1.0 的倍率则会更早生效。
在默认服务器上(MAX = 2048):
| healthMultiplier | 典型用途 | 生命值停止增长于 | 被钉死在 |
|---|---|---|---|
| 0.25 | 增援 | 50 级 | 512 HP |
| 0.7 | 杂兵群 | 50 级 | 约 1,434 HP |
| 1.0 | 标准副本怪物 | 50 级 | 2,048 HP |
| 3.0 | 小 Boss | 42 级 | 2,048 HP |
| 7.0 | Boss | 36 级 | 2,048 HP |
| 40.0 | 世界 Boss | 23 级 | 2,048 HP |
超过这些等级后,生命值不再增长,60 级与 90 级世界 Boss 的 HP 相同。最终生命值计算在乘算结果超出上限时记录警告。更早的基础生命值截断不会记录警告,因此没有警告不能证明 Boss 尚未达到上限。healthMultiplier 应使用正的有限值,无效值会回退为 1.0。
如果你在大约 35 级以上、并使用较大的 healthMultiplier 值来制作内容,请自行提高 spigot.yml 中的 settings.attribute.maxHealth.max。否则你的 Boss 层级就会彼此压平 —— 一旦它们全都被钳制到同一个数字,本页后面推荐的那些 healthMultiplier 值就无法再区分不同的遭遇战了。
玩家基础伤害使用已截断的等级生命值除以 3,因此达到内部生命上限后,不再仅随怪物等级增长。武器、技能及其他伤害倍率仍会生效。最终 Boss 生命值达到上限时,较高 healthMultiplier 所提供的额外耐久会受到限制。
customBossHealthMultiplier
这是自定义 Boss 文件中的倍率。默认为 1。
对自定义 Boss 造成的伤害
玩家伤害使用指数缩放和线性缩放的相乘层级,以在各等级间保持战斗一致,同时仍让不同武器族系有不同的手感。该公式将玩家战力分为两个独立的轴——武器熟练度等级(指数式熟练度调整)和武器物品等级(线性式武器调整)——使熟练度投入和装备都对战斗力有所贡献。
相比旧版本的重要变化是,近战武器速度不再试图让每种武器类型都拥有相同的理论 DPS。剑仍然是基准点,而斧、重锤和近战三叉戟会获得受抑制的爆发补偿。本就测试表现良好的武器族系,如锄和长矛,则保留旧的攻击速度因子。
伤害公式
完整的玩家对精英怪伤害公式为:
formulaDamage = baseDamage * attackSpeedFactor * skillAdjustment * weaponAdjustment * cooldownOrVelocity * sweepMultiplier * potionMultiplier * equipmentEnchantmentMultiplier * enchantmentMultiplier * arrowDamageMultiplier
finalDamage = roundToTwoDecimals(formulaDamage * damageModifier * combatMultiplier) * critMultiplier
damageAfterSkills = finalDamage * (1 + sum of every active skill bonus fraction)
各部分将在下文说明。熟练度加成由 HIGH 优先级监听器在 EliteMobs 伤害事件期间应用,后续监听器仍可修改结果。参见伤害流程中的熟练度加成。
baseDamage
每次受击的基础伤害由怪物的归一化生命值(在 healthMultiplier=1.0 时)除以击杀目标击数推导得出:
baseDamage = normalizedMobHP / 3.0
其中 normalizedMobHP = min(2.1875 * 2^(mobLevel / 5), minecraftMaxHealth),详见上方“自定义 Boss 的最大生命值”。常数 3.0,即 TARGET_HITS_TO_KILL_MOB,以等级匹配的玩家约 3 次满蓄力剑击为目标,尚未计入额外修饰和取整。
这些攻击次数估算要求装备与技能等级匹配,且未触及最终生命上限。例如,healthMultiplier: 2.0 仅在乘算结果未超过上限时使基础生命值翻倍,并不保证所有等级都需要六次剑击。
attackSpeedFactor
这是近战攻击速度的节奏层。它从旧的传统因子开始:
legacyFactor = 1.6 / weaponAttackSpeed
此处使用 EliteMobs 返回的武器速度。玩家当前的攻击速度属性另用于计算蓄力时间。参考值 1.6 是剑的攻击速度,最终因子取决于武器族系:
Swords, hoes, spears, unknown melee, and bow/crossbow melee:
attackSpeedFactor = legacyFactor
Axes, maces, and melee tridents:
attackSpeedFactor = sqrt(legacyFactor)
Ranged projectile attacks:
attackSpeedFactor = 1.0
这意味着该系统并非试图让每种近战武器都拥有相同的 DPS。慢速爆发武器每次挥击仍然打得更重,但斧、重锤和近战三叉戟不再获得完整的 1.6 / speed 爆发倍率。锄和长矛特意保留旧因子,因为试玩测试显示其节奏已经可以接受。
匹配熟练度和武器等级下的示例:
| 武器类型 | 示例攻击速度 | 因子 | 对抗 healthMultiplier: 1.0 的公式击数 |
|---|---|---|---|
| 剑 | 1.6 | 1.00x | 3.0 |
| 斧 | 1.0 | 1.26x | 约 2.4 |
| 重锤 | 0.6 | 1.63x | 约 1.8 |
| 锄 | 4.0 | 0.40x | 7.5 |
| 三叉戟,近战 | 1.1 | 1.21x | 约 2.5 |
| 长矛,钻石示例 | 约 0.95 | 约 1.68x | 约 1.8 |
| 弓/弩弹射物 | 不适用 | 1.00x | 由弹射物速度决定蓄力 |
对于弹射物攻击,包括弓、弩和投掷的三叉戟,不应用近战攻击速度因子。弹射物的蓄力/强度改由 cooldownOrVelocity 表示。
注意: 仅远程的武器(弓、弩)在近战中使用时会被视为徒手攻击——武器等级 0、熟练度等级 1,默认攻击速度为 4.0(拳头速度)。这使它们在近战中非常弱,激励玩家在远程使用它们。
skillAdjustment
来自玩家武器熟练度等级与怪物等级之差的指数缩放:
skillAdjustment = 2 ^ ((weaponSkillLevel - mobLevel) / 7.5)
每相差 7.5 级,玩家伤害就翻倍(或减半)。这与 Boss 对玩家伤害中使用的防御型熟练度缩放速率相匹配,产生对称的战斗。
| 熟练度差 | 熟练度调整 | 效果 |
|---|---|---|
| -15 | 0.25x | 四分之一伤害 |
| -7.5 | 0.50x | 一半伤害 |
| 0(匹配) | 1.0x | 基准 |
| +7.5 | 2.0x | 双倍伤害 |
| +15 | 4.0x | 四倍伤害 |
Boss HP 受服务器生命值上限限制,但当前代码中的进攻熟练度调整没有倍率上限。超过 +/-22 级的巨大差距可能产生极端值,而熟练度 100 级仅是成长软上限。
weaponAdjustment
基于武器物品等级相对于怪物等级的两段式线性曲线。这与装备防御系统中的防御型装备减免曲线相对应。
若武器有存储的物品等级,则使用该值。否则,EliteMobs 根据伤害和攻击速度计算等级,在结果较低时回退到护甲等级。因此原版武器也可能具有非零有效等级。这与上文的护甲防御计算不同。
weaponAdjustment = 0.5 + bonus
低于匹配(weaponLevel 小于或等于 mobLevel):
bonus = 0.50 * (weaponLevel / mobLevel)
从 0(无武器)到 0.50(匹配)线性缩放。未装备武器时,调整为 0.50(一半伤害)。
高于匹配(weaponLevel 大于 mobLevel):
bonus = 0.50 + (weaponLevel - mobLevel) * 0.025
bonus = min(bonus, 0.75)
高于怪物的每个武器等级固定 2.5%,bonus 上限为 0.75。需要高于怪物 +10 个武器等级才能达到上限。
| 武器场景 | 加成 | 武器调整 | 对击数的影响 |
|---|---|---|---|
| 武器等级 0,仅比较此项调整 | 0.00 | 0.50 | 6 击(慢 2 倍) |
| 半等级武器 | 0.25 | 0.75 | 4 击 |
| 匹配武器(weaponLevel = mobLevel) | 0.50 | 1.00 | 3 击(基准) |
| 高于怪物 +4 级 | 0.60 | 1.10 | 约 2.7 击 |
| 高于怪物 +10 级(上限) | 0.75 | 1.25 | 约 2.4 击 |
真正的徒手攻击还使用熟练度 1 级和徒手攻击速度因子。此表仅隔离武器调整,其他因素保持剑的参考值。
cooldownOrVelocity
对于近战,EliteMobs 记录上次主要近战命中后的游戏 tick 数,除以蓄力窗口 20 / attackSpeed,最高为 1.0。命中非精英怪也更新此计时,空挥不会。首次记录的命中视为满蓄力。优先使用玩家当前攻击速度属性;若属性不可用、无效,或较慢武器仍报告未经修改的 4.0,则使用物品速度。弓和弩的近战速度为 4.0。
对于远程/弹射物攻击(弓、弩、投掷的三叉戟,以及技能生成的箭矢),这是归一化的发射速度。满拉弓速度约为 3.0;该值被归一化为 min(velocity / 3.0, 1.0),钳制在 [0, 1] 范围内。
普通远程攻击在发射时保存武器等级、熟练度种类与等级及暴击结果,副手弓和弩也一样。投掷三叉戟提供自身的物品等级。优先使用发射速度,缺少记录时回退到当前速度。缺少武器/熟练度数据时使用等级 0/1,不借用命中时的武器熟练度。玩家药水和六个槽位的伤害附魔总和等其他数据仍在命中时读取。
sweepMultiplier
ENTITY_SWEEP_ATTACK 的横扫倍率为 0.25,视为满蓄力且不更新主要命中的计时。其他数据按每个目标单独计算,包括独立的暴击抽取,因此最终结果不保证等于主要目标伤害的 25%:
sweepMultiplier = 0.25 (secondary sweep targets)
sweepMultiplier = 1.0 (primary target)
potionMultiplier(进攻)
力量和虚弱药水效果会修改玩家输出的伤害:
potionMultiplier = 1.0 + strengthBonus - weaknessPenalty
其中 strengthBonus = (strengthAmplifier + 1) * strengthDamageMultiplier,weaknessPenalty = (weaknessAmplifier + 1) * weaknessDamageMultiplier。两个设置默认均为 0.2。在这套 EliteMobs 公式中,力量 I 增加 20% 伤害,虚弱 I 减少 20%。同等级力量与虚弱相互抵消,倍率最低为 0。
MobCombatSettings.yml 中的配置键为:
| 键 | 默认值 | 描述 |
|---|---|---|
strengthDamageMultiplierV2 | 0.2 | 每级力量的额外伤害 |
weaknessDamageMultiplierV2 | 0.2 | 每级虚弱的伤害惩罚 |
equipmentEnchantmentMultiplier
玩家所装备物品上的锋利(Sharpness)与力量(Power)等级会提供一个百分比伤害加成。每一级价值 2.5%,并且这两种附魔在每件物品上都会被计入:
perItemBonus = (Sharpness level + Power level) * 0.025
equipmentEnchantmentMultiplier = 1.0 + sum of perItemBonus across all six slots
求和覆盖全部六个槽位(4 件护甲 + 主手 + 副手),因此盾牌或护甲上的锋利同样会有贡献。这与下面的 enchantmentMultiplier 是相互独立的层级,后者只涵盖怪物类型相关的附魔(亡灵杀手、节肢杀手)。
enchantmentMultiplier
亡灵杀手(Smite)与节肢杀手(Bane of Arthropods)附魔会对其各自的怪物类型提供少量伤害加成,但仅当 ItemSettings.yml 中的 useEliteEnchantments 被禁用时。当精英附魔启用时,此倍率始终为 1.0。
只有超过原版上限的附魔等级(仅精英等级)才会被计入:
enchantmentMultiplier = 1.0 + eliteLevelsAboveVanillaMax * 0.025
每个超出原版的等级增加 2.5% 伤害。例如亡灵杀手 VIII 超过原版 V 共 3 级,结果为 1.0 + 3 * 0.025 = 1.075。此分支读取当前主手,投射物命中也不例外。节肢杀手检查 Spider/Silverfish;亡灵杀手检查 Zombie/Skeleton/Wither/SkeletonHorse/ZombieHorse/Zombified Piglin,包含这些 Java 类的子类,而不是完整的 Minecraft 怪物分类标签。
arrowDamageMultiplier
由武器熟练度能力(如多重射击、箭雨等)生成的箭矢会携带一个存储在弹射物数据容器中的伤害倍率。这使技能生成的箭矢相比标准箭矢命中能造成更低的伤害。对于玩家正常射出的箭矢,此倍率为 1.0。
荆棘伤害
启用 useEliteEnchantments 时,THORNS 伤害事件分支使用玩家对精英怪的基础伤害,而非完整武器公式。仅计算超过原版 III 的荆棘等级。该计算本身不会安排或保证一次荆棘触发。
eliteThornsLevel = totalThornsLevel - vanillaMaxThornsLevel (per armor piece, summed across all 4 pieces)
thornsDamage = baseDamage * eliteThornsLevel * 0.02
每个超出原版上限的荆棘等级贡献基础伤害的 2%。原版荆棘 III 不产生精英荆棘伤害。若 4 件护甲都有荆棘 V,每件贡献 2 级,总计 8 级,每次触发为 baseDamage * 8 * 0.02 = 16%,即玩家对精英怪基础伤害的 16%。
标准和归一化战斗使用怪物实际等级。缩放战斗使用玩家当前武器熟练度等级,再换算到 Boss 的真实 HP。此基础计算之后仍会应用 Boss 材质修饰、战斗倍率和暴击处理。
damageModifier
来自自定义 Boss 文件的、针对特定武器类型的 Boss 专属伤害修饰量(damageModifiers)。这允许 Boss 对特定武器材质承受更多或更少的伤害(例如,一个抗剑但弱于斧的 Boss)。对所有未明确配置的武器类型默认为 1.0。
近战读取当前主手材质。投射物只有在 EliteMobs 自定义投射物数据中登记了发射武器材质时才会使用它,否则走默认查询。单独保存的投射物武器等级不会提供此材质修饰。
combatMultiplier
来自 MobCombatSettings.yml 的全局倍率(根据战斗模式为 scaledDamageToEliteMultiplier、normalizedDamageToEliteMultiplier 或 damageToEliteMobMultiplierV2)。默认为 1.0。
critMultiplier
暴击将最终伤害乘以 1.5 倍。暴击几率由玩家精英装备的暴击几率属性在全部六个装备槽位(4 件护甲 + 主手 + 副手)上求和得出,然后被封顶:
critChance = min(sum of all six slots, maximumCriticalStrikeChance)
maximumCriticalStrikeChance 位于 MobCombatSettings.yml 中,默认为 0.40(40%)。若没有这个上限,在六个槽位上堆叠暴击几率可以达到 100%,此时每一次命中都是"暴击" —— 暴击不再读起来像一个事件,却仍然照付 1.5 倍的全额收益。正因如此,不建议使用高于 0.5 的值。无论配置成什么,该上限都会被钳制到 [0.0, 1.0] 范围内。
暴击是在伤害事件触发之前应用的,这使它与下文所述的加法式熟练度加成层保持为彼此独立的相乘步骤,因此再大的熟练度加成也永远不会吞掉暴击。
法杖与魔杖伤害
FMM 魔法武器的法杖火球、法杖近战打击和魔杖飞弹不使用上述近战或弓的公式。命中精英怪时,EliteMobs 按以下方式计算:
formulaLevel = scaled combat ? magicSkillLevel : mobLevel
magicDamage = baseDamage(formulaLevel)
* 2 ^ ((magicSkillLevel - formulaLevel) / 7.5)
* weaponAdjustment(itemLevel, formulaLevel)
* basePower * impactScale
* scaledCombatRescale
* damageModifier
* combatMultiplier
* (1 + 0.025 * (Sharpness + Power levels on the weapon))
magicSkillLevel是法杖或魔杖熟练度等级,在施放攻击时记录(在排除熟练度的世界中为 1 级)。baseDamage、熟练度调整、weaponAdjustment、damageModifier和combatMultiplier均为上文所述的组成部分。damageModifier查询的是武器载体物品的材质。basePower是 FMM 攻击配置的威力。直接命中时impactScale为 1;法杖爆炸则从中心的 1 递减到边缘的 0.35。- 在缩放战斗之外,
scaledCombatRescale为 1。缩放战斗下,它会把结果换算到 Boss 的真实 HP 池,与伤害(玩家对 Boss)相同。 - 暴击判定同样在施放时记录;暴击会将结果乘以 1.5。
这条路径没有攻击速度、蓄力、横扫或药水因子。命中随后会按伤害流程中的熟练度加成所述,运行法杖或魔杖的熟练度加成。对非精英目标时,命中造成 FMM 的独立伤害乘以同样的 Sharpness/Power 因子。
修饰量钳制
进攻和防御熟练度调整使用 2 ^ (levelDifference / 7.5),没有倍率限制。旧的 getLevelModifierFromDifference 辅助方法及其 0.125/8.0 边界已不存在,不应将它们用于当前战斗计算。
Boss HP 则受上述最大生命值上限约束。100 级是经验软上限,不会对任一种熟练度调整施加硬限制。
真正约束熟练度驱动输出的钳制,是暴击几率上限和两个防御减伤上限,全都在下一节中说明。
伤害流程中的熟练度加成
上面所有内容描述的都是不含加成的曲线。真实玩家每种武器类型最多还有三个生效的熟练度加成,它们叠加在公式之上。如果你仅凭这些曲线来平衡一场遭遇战,你就会一贯低估玩家实际造成的伤害。
熟练度加成的数值来源有所不同。skillbonuses/*.yml 包含显示名称、描述、解锁层级、加成类型、菜单图标、描述模板,以及 baseValue、scalingPerLevel、procChance、cooldownSeconds、maxStacks 和 stackBonus。读取配置的加成使用这些值,其余使用代码中的常量。部分加成,如 Harvester、Legion's Discipline、Depth Charge,会将配置值限制在既定曲线内,因此只能通过配置削弱它们。
共享的可配置触发几率辅助方法使用 min(1, procChance + 0.002 * skillLevel)。冷却辅助方法将 cooldownSeconds * (1 - 0.005 * skillLevel) 的下限设为配置值的一半,调用方通常再取整到秒,至少 1 秒。使用独立公式的加成可能不同。各项详情见熟练度加成。
这一层在哪里运行(进攻侧)
普通进攻熟练度加成在 EliteMobs 事件期间应用:
... formula → damageModifier × combatMultiplier → critical hit (×1.5)
→ EliteMobDamagedByPlayerEvent listeners run
→ HIGH-priority skill-bonus listener applies bonuses
→ remaining listeners can modify or cancel
→ final damage set
熟练度监听器运行时已经包含暴击倍率,所以加法倍率会保留暴击。玩家自定义或绕过公式的伤害会跳过普通武器熟练度监听器,以防递归触发。法杖或魔杖自身的命中是例外:它属于自定义伤害,但仍会运行其法杖或魔杖加成。职业能力有各自的规则。
进攻型加成按加法叠加
每个生效的加成只贡献它自己的加成部分,然后把这些部分相加:
totalMultiplier = 1.0 + (m1 - 1.0) + (m2 - 1.0) + (m3 - 1.0) + ...
因此三个各为 1.2 倍的加成得到的是 1.6 倍,而不是相乘复利会给出的 1.73 倍。这对每一种武器类型都一致适用。
这与此前的行为不同:以前只有斧使用"最大者胜"的规则 —— 只有最大的那一个加成生效,并且任何一次熟练度超过 1.5 倍的斧类命中都会静默地把暴击整个丢弃。让某一个武器族系跑在不同的叠加规则上,也让斧类伤害无法与其他一切进行比较。
同一加法合并也包含从目标读取的跨技能减益:Hunter's Mark、Death Mark、Judgment、Expose Weakness、Hex Brand 和 Unravel。已就绪的 Riposte 单独处理,直接乘算事件伤害,再将合并后的加法倍率乘到该结果上。
实际影响: 一名带着三个精挑细选的进攻型加成的玩家,在触发特效之前实际输出大致在已公布曲线的 1.4 倍到 2 倍之间,冷却类能力命中时还会更高。"3 次剑击"这个设计目标描述的是一名没有选择任何加成的玩家。
防御型加成有两个上限
护甲熟练度加成会降低受到的伤害,而与进攻侧不同,它们是按相乘方式复合的 —— 每一个都把已经减免过的伤害再送进 damage * (1 - reduction)。这正是需要两个独立限制的原因:
| 限制 | 数值 | 作用范围 |
|---|---|---|
| 单技能钳制 | 80% | 约束任何单个技能的减伤 |
| 总量上限 | 85% | 约束每次命中中所有技能来源的合计减伤 |
仅有单技能钳制是不够的:三个各自处于 80% 的来源相乘后会得到 0.2 x 0.2 x 0.2 = 99.2% 的总减伤 —— 实际上就是免疫,而每一个单独的钳制却仍然完好无损。
总量上限堵住了这个缺口。它在最后一步只应用一次:比较进入熟练度流程之前的伤害与流程输出后的伤害,并拒绝让这个比值低于 1 - 0.85:
finalDamage = max(damageAfterSkills, incomingDamage * 0.15)
基于比值而不是基于减伤量的累加求和,正是它稳健的原因。各个分支的形态各不相同 —— 有的相乘、有的直接赋值、有的叠层、有的读取配置 —— 而贡献者的顺序和数量对结果都毫无影响。一套堆满防御的构筑,每次受击都至少要吃下 15%。
完全免伤不受此上限约束。 Evasion、Last Stand、Spell Mirror、Death's Embrace、Divine Shield 和 Phoenix Mantle 直接取消伤害事件,而非部分减伤。85% 限制仅覆盖此熟练度处理流程,不是药水、格挡、吸收和其他监听器处理后针对原始攻击的伤害下限。
合计减免达到上限后,再增加减免不能进一步降低该次伤害。
计算示例
以下示例特意排除熟练度加成,以展示基础曲线。实际计算还需应用上一节的加法熟练度倍率。
示例 1:Lv25 匹配剑 对 Lv25 精英怪(近战)
Player: weaponSkillLevel=25, weapon=elite sword (itemLevel=25)
Mob: level=25, healthMultiplier=1.0
Step 1 -- Base damage: mobHP(25) = 2.1875 * 2^5 = 70.0, baseDamage = 70.0/3 = 23.33
Step 2 -- Attack speed factor: sword speed=1.6, factor = 1.6/1.6 = 1.0
Step 3 -- Skill adjustment: 2^((25-25)/7.5) = 2^0 = 1.0
Step 4 -- Weapon adjustment: weaponLevel(25) == mobLevel(25), bonus=0.50, adj = 1.0
Step 5 -- Cooldown: full charge = 1.0
Step 6 -- Sweep: primary target = 1.0
formulaDamage = 23.33 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 = 23.33
Mob HP = 70.0 -> hits to kill = 70.0 / 23.33 = 3.0
示例 2:Lv25 斧 对 Lv25 精英怪(受抑制的爆发补偿)
Player: weaponSkillLevel=25, weapon=elite axe (itemLevel=25)
Mob: level=25, healthMultiplier=1.0
Step 1 -- Base damage: 23.33 (same as above)
Step 2 -- Legacy attack speed factor: 1.6/1.0 = 1.6
Step 3 -- Axe burst damping: sqrt(1.6) = 1.265
Step 4 -- Skill adjustment: 1.0 (matched)
Step 5 -- Weapon adjustment: 1.0 (matched)
Step 6 -- Cooldown: full charge = 1.0
formulaDamage = 23.33 * 1.265 * 1.0 * 1.0 * 1.0 = 29.52
Hits to kill = 70.0 / 29.52 = 2.37
示例 3:Lv25 锄 对 Lv25 精英怪(传统快速武器因子)
Player: weaponSkillLevel=25, weapon=elite hoe (itemLevel=25)
Mob: level=25, healthMultiplier=1.0
Step 1 -- Base damage: 23.33 (same as above)
Step 2 -- Attack speed factor: hoe speed=4.0, factor = 1.6/4.0 = 0.4
Step 3 -- Skill adjustment: 1.0 (matched)
Step 4 -- Weapon adjustment: 1.0 (matched)
Step 5 -- Cooldown: full charge = 1.0
formulaDamage = 23.33 * 0.4 * 1.0 * 1.0 * 1.0 = 9.33
Hits to kill = 70.0 / 9.33 = 7.5
示例 4:Lv20 弓 对 healthMultiplier=2.0 的 Lv25 精英怪(远程,等级偏低)
Player: weaponSkillLevel=20, weapon=elite bow (itemLevel=20)
Mob: level=25, healthMultiplier=2.0, actual HP = 70.0 * 2 = 140.0
Step 1 -- Base damage: 23.33 (from normalized HP, NOT actual HP)
Step 2 -- Attack speed factor: ranged, N/A = 1.0
Step 3 -- Skill adjustment: 2^((20-25)/7.5) = 2^(-0.667) = 0.63
Step 4 -- Weapon adjustment: weaponLevel(20) < mobLevel(25), bonus = 0.5*(20/25) = 0.4, adj = 0.9
Step 5 -- Arrow velocity: full draw = 1.0
formulaDamage = 23.33 * 1.0 * 0.63 * 0.9 * 1.0 = 13.23
Hits to kill = 140.0 / 13.23 = 10.6 hits
(Under-leveled skill AND weapon, fighting a healthMultiplier=2.0 mob)
DamageBreakdown 调试工具
拥有 elitemobs.debug 的玩家可执行 /em debug 切换战斗诊断。复现命中后再次执行即可停止。公式、选中的战斗模式与配置倍率、格挡/绕过路径及事件结果会出现在聊天和服务器日志中。日志可搜索 [EM-Debug: 与 [EM-Damage:。
开发工具使用的独立内部辅助类 DamageBreakdown 可以输出:
- 完整的格式化分解,显示所有等级、公式组成部分、倍率以及最终计算出的伤害。
- 紧凑的单行摘要,便于游戏内快速参考。
- 预期值与实际值的对比,标记出大于 10% 的差异,有助于诊断插件冲突或配置错误的 Boss 文件。
其重建结果不是最终实际伤害的权威测量。它将公式伤害提升到至少 1,未包含后续熟练度倍率,也未完整重现缩放换算与监听器改动。差异本身不能证明插件冲突。调查真实战斗时,应结合实时诊断与实际生命值变化。
熟练度经验进度
武器和护甲熟练度通过击杀精英怪赚取经验来升级。经验系统使用三次方的等级需求,以创造平滑的进度,并在 100 级以上设有软上限。
击杀经验: mobLevel^2 是应用 Boss 倍率、贡献份额、奖励等级限制与特权之前的初始值。参见熟练度系统。
升到下一级所需经验:
对于 1 到 100 级:
xpToNextLevel = floor(8.5 * L^3)
对于 100 级以上(软上限):
xpToNextLevel = floor(floor(8.5 * L^3) * (1 + ((L - 100)^2 / 100)))
软上限倍率在 100 级处为 1.0,之后连续地按二次方增长。150 级时约为 26 倍,继续成长非常困难。100 级不是硬上限,超过后会将三次方经验需求乘以上述二次方软上限因子。
其他战斗机制
防止秒杀
普通 Boss 伤害公式的上限是实际最大生命值减 1。启用 [Alpha] Advanced Combat System 时,为 max(1, actualMaxHealth - 30) - 1,只排除该模式固定增加的 30 HP。其他最大生命值修饰仍计入。由于使用最大生命值而非当前 HP,受伤玩家仍可能被一击杀死。直接伤害可绕过上限,后续监听器也可修改数值。
盾牌格挡
非投射物攻击在玩家格挡时进入此处理器,会默认减少 80% 公式伤害,由 MobCombatSettings.yml 的 blockingDamageReduction 控制。绕过公式的直接伤害会替换减免后的数值。被格挡的投射物会被移除,处理器在应用公式前返回,但此分支本身不会取消 Bukkit 伤害事件或将其伤害归零。因此不能假设它保证免疫所有投射物或插件生成的攻击。
每次处理的格挡都会尝试扣除盾牌 5 点耐久,原版 Unbreaking 降低实际扣除频率。主手盾牌优先于副手盾牌。
自定义伤害与吸收
部分 Boss 技能提交直接伤害,在 EliteMobs 伤害事件之前替换普通公式结果,包括单次伤害上限和盾牌减免。防御熟练度监听器仍可降低或取消它。相反,玩家的自定义/绕过伤害跳过普通武器公式、Boss 材质与全局倍率、武器熟练度触发。已保存的魔法武器暴击或明确保证的职业暴击仍可能生效,法杖或魔杖自身的命中也仍会运行其武器加成(参见法杖与魔杖伤害)。
普通精英怪对玩家事件结束后,系统根据最终伤害及玩家当前吸收值分配吸收量。原版护甲和抗性修饰会清除,因为 EliteMobs 公式已自行计算这些减免。玩家对精英怪的公式同样清除原版减免,因此该路径上的 Boss 护甲仅作外观用途。
快速近战命中
独立的自动点击限制默认启用。滚动一秒窗口内对精英怪的主要近战命中超过 5 次,会在此路径触发 5 秒惩罚。参数为 MobCombatSettings.yml 中的 autoclickerThrottleMaxHitsPerSecond 和 autoclickerThrottlePenaltySeconds,autoclickerThrottleEnabled 控制开关。空点、横扫、投射物、荆棘、自定义/绕过攻击不计数,也不经过此惩罚检查。重新连接不会清除正在生效的惩罚。
护甲熟练度生命值加成
护甲熟练度每超过 1 级增加 2 HP,即 1 颗心的最大生命值。此属性修饰遵循 skills.yml 的启用设置、排除世界,以及上文所述的受管理战斗世界资格。
等级缩放总结
下表总结了应用生命值上限及其他战斗修饰之前的等级修饰量。达到任一生命值上限后,表中的 Boss 生命值比例便不再成立。
| 等级差 | Boss 生命值修饰量 | Boss 伤害修饰量 | 难度 |
|---|---|---|---|
| -10(玩家越级) | 0.25x 生命值 | 约 0.4x 伤害 | 微不足道 |
| -5(玩家越级) | 0.5x 生命值 | 约 0.6x 伤害 | 非常简单 |
| 0(同级) | 1.0x 生命值 | 1.0x 伤害 | 平衡 |
| +5(玩家欠级) | 2.0x 生命值 | 约 1.6x 伤害 | 有挑战 |
| +10(玩家欠级) | 4.0x 生命值 | 约 2.5x 伤害 | 非常困难 |
缩放战斗
缩放战斗将 Boss 模拟为攻击玩家的武器熟练度等级,或防守玩家的护甲熟练度等级,从普通伤害缩放中移除 Boss 存储等级。装备、武器族系、加成、技能和生命值修饰仍会使不同玩家的战斗不同。它适用于自然精英怪和部分事件 Boss;事件 Boss 需要自身设置 scaledCombat: true。
缩放战斗与归一化战斗有何不同
EliteMobs 有三种战斗模式:
| 模式 | 用于 | 等级是否重要? | 配置键 |
|---|---|---|---|
| 标准 | 没有特殊标志的基础怪物 | 是——伤害和生命值随怪物的实际等级缩放 | damageToEliteMobMultiplierV2 / damageToPlayerMultiplierV2 |
| 归一化 | 副本和区域 Boss(normalizedCombat: true) | 是,使用相同基础曲线,但有独立配置倍率 | normalizedDamageToEliteMultiplier / normalizedDamageToPlayerMultiplier |
| 缩放 | 自然的主世界精英怪和事件 Boss(scaledCombat: true 或全局配置) | 否——Boss 被模拟为玩家的等级 | scaledDamageToEliteMultiplier / scaledDamageToPlayerMultiplier |
标准和归一化攻击都使用怪物实际等级。当前指数生命值公式忽略旧参数 normalizedBaselineDamageV3 与 normalizedRegionalBossBaselineHealthV3。缩放攻击改用玩家熟练度等级,存储等级仍保留供其他系统使用。
工作原理
伤害(Boss 对玩家)
当一个缩放战斗的 Boss 伤害玩家时,伤害公式将 Boss 的等级设为等于玩家的护甲熟练度等级:
mobLevel = armorSkillLevel (instead of the boss's actual level)
这意味着熟练度调整变为 1.0(因为 bossLevel - armorSkillLevel = 0),并且伤害完全取决于玩家的装备和护甲熟练度——而非怪物存储的等级。公式的其余部分(基础伤害、装备调整、药水等)与上文各节所述完全相同。
伤害(玩家对 Boss)
当玩家攻击一个缩放战斗的 Boss 时,公式会:
- 将 Boss 模拟为玩家的武器熟练度等级 —— 暂时把怪物当作与玩家武器熟练度同等级来对待。
- 针对该模拟等级运行标准伤害公式 —— 产生一个“对抗同等级怪物的伤害”结果。
- 重新缩放到 Boss 的实际生命值 —— 将公式伤害从模拟怪物生命值的百分比转换为 Boss 实际生命值池的相同百分比。
simulatedMobLevel = playerWeaponSkillLevel
formulaDamage = playerToEliteDamageFormula(player, eliteEntity at simulatedMobLevel)
simulatedMobHP = baseHPAtSimulatedLevel * bossHealthMultiplier
damagePercentage = formulaDamage / simulatedMobHP
actualDamage = damagePercentage * actualBossMaxHP
此计算从百分比换算中移除 Boss 存储等级。Boss 生命值倍率、武器与熟练度修饰、生命值上限和取整仍影响所需击数。healthMultiplier: 1.0 的参考值约为 3 次剑击,其他武器族系遵循上文的攻击速度因子。
战利品与奖励
缩放奖励计算使用玩家战斗等级,而非怪物存储等级。普通掉落、职业掉落、熟练度 XP 和额外金币会使用此等级,再应用各自规则。固定自定义物品、明确编写的奖励、概率、资格与等级上限并不会自动消失。参见战利品表和熟练度系统。
等级显示
缩放战斗的实体在其名牌中显示一个符号而非数字等级,因为它们的实际等级对玩家而言无关紧要:
- 标准缩放实体(healthMultiplier 1.0 或更低):显示一个剑符号(默认:
「⚔」) - 高威胁缩放实体(healthMultiplier 高于 1.0):显示一个骷髅符号(默认:
☠)
这些符号可在 MobCombatSettings.yml 中通过 scaledStandardLevelSymbol 和 scaledHighThreatLevelSymbol 自定义。
启用缩放战斗
用于所有自然精英怪(全局配置)
在 MobCombatSettings.yml 中:
useScaledCombatForNaturalElites: true
此设置默认启用,适用于符合条件世界中的自然精英怪,不限于主世界维度。使用 useDistanceBasedNaturalEliteLevels 的世界中,自然精英怪仍使用实际等级,即使此开关为 true。使用 normalizedCombat 的副本 Boss 不受影响,自定义和事件 Boss 也不会仅因在室外生成就继承此设置。
用于单个自定义 Boss
在自定义 Boss 配置文件中:
scaledCombat: true
这会强制某个特定的自定义 Boss 使用缩放战斗,无视全局设置。适用于事件 Boss 或应对所有玩家都同样公平的自定义主世界遭遇战。
注意: 如果一个 Boss 有 normalizedCombat: true(或者它是一个在全局启用了归一化的区域/实例 Boss),归一化战斗优先,该 Boss 将不会使用缩放战斗——除非在 Boss 文件中明确设置了 scaledCombat: true,在这种情况下缩放战斗获胜。
配置键
以下 MobCombatSettings.yml 键控制缩放战斗的行为:
| 键 | 默认值 | 描述 |
|---|---|---|
useScaledCombatForNaturalElites | true | 为自然精英怪启用缩放战斗,但使用距离等级的除外 |
scaledDamageToEliteMultiplier | 1.0 | 玩家对缩放战斗 Boss 伤害的全局倍率 |
scaledDamageToPlayerMultiplier | 1.0 | 缩放战斗 Boss 对玩家伤害的全局倍率 |
scaledStandardLevelSymbol | 「⚔」 | 标准缩放实体名牌中显示的符号 |
scaledHighThreatLevelSymbol | ☠ | healthMultiplier 高于 1.0 的缩放实体显示的符号 |
useRecommendedHealthScaling | true | 为自然精英怪使用 EliteMobs 10 的指数式生命值缩放(false = 传统线性值,见下文) |
何时使用各种战斗模式
- 归一化战斗(
normalizedCombat: true):用于副本、实例和区域 Boss,在这些场合你希望对难度进行精确控制,且 Boss 有一个期望玩家与之匹配的固定等级。 - 缩放战斗(
scaledCombat: true或全局设置):用于希望普通攻击按匹配熟练度等级计算的内容。装备和能力仍影响难度。 - 标准战斗(两个标志都不设):用于那些原始等级应直接决定难度的怪物,例如出生点附近随距离缩放的精英怪。
传统生命值缩放(useRecommendedHealthScaling: false)
当 MobCombatSettings.yml 中的 useRecommendedHealthScaling 设为 false 时,自然精英怪(非副本或区域 Boss)会使用一个简化的传统公式,而非指数缩放:
baseDamage = level * 2
mobHealth = baseDamage * 3 (TARGET_HITS_TO_KILL_MOB)
这里 level 至少为 1。公式替换自然精英怪的生命值及玩家攻击它们的基础伤害,不替换玩家受伤时的护甲熟练度公式。线性数值更接近 EliteMobs 9,在部分低等级高于指数值,而在高等级低得多。最终实体生命值仍应用生命倍率和服务器上限。自定义区域 Boss 不受影响。
将这些数据用于副本
注意:这里假设你正在使用 normalizedCombat 数值! 那些数值是专门为更轻松地平衡副本而设的。
Boss 难度的一部分在于让它拥有适合该遭遇战的生命值和伤害。然而,请记住这只是其中一部分,技能同样重要。
以下内容以自定义 Boss 文件的正确格式呈现。
简易快速算法
借助指数缩放系统,healthMultiplier 和 damageMultiplier 会直接缩放基础值:
-
healthMultiplier为 1.0 意味着同等级玩家大约需要 3 次剑击才能杀死该 Boss。其他近战武器因攻击速度因子而异:受抑制的爆发武器(如斧、重锤和近战三叉戟)所需击数比剑少,而锄所需击数更多,因为它们保留了传统的快速武器因子。倍率为 2.0 时生命值翻倍,0.5 时减半,以此类推。 -
damageMultiplier为 1.0 意味着该 Boss 大约 5 击就能杀死一名装备恰当的同等级玩家。倍率越高 Boss 越致命,倍率越低则越安全。
这些攻击次数估算要求装备与技能等级匹配,且未触及最终生命上限。例如,healthMultiplier: 2.0 仅在乘算结果未超过上限时使基础生命值翻倍,并不保证所有等级都需要六次剑击。
请记住,玩家往往优先升级武器,最终常常装备远逊于武器的护甲。除非你设计非常特定的远程战斗竞技场,否则你大概不会想让每次受击造成大量伤害。 请试玩测试你的内容!
这些击数还没有计入以下因素:
- 熟练度加成。 上面每一个击数都假设没有任何加成生效。带着三个进攻型加成的玩家明显杀得更快,而带着三个防御型加成的玩家明显活得更久(直到 85% 的总量上限)。请把这些数字当作玩家战力的下限,而不是预测值。
- Advanced Combat 生命值。 额外 30 HP 提高生存能力,不增加受到的基础伤害。
- 最大生命值上限。 超过 Minecraft 的最大生命值上限中列出的等级之后,
healthMultiplier就完全不再增加生命值了。尤其是世界 Boss 预设,在默认服务器上从 23 级起就会被钳制。
创建一个普通副本怪物
借助 normalizedCombat 的缩放,你可以应用一个极其简约的配置:
normalizedCombat: true
healthMultiplier: 1.0 #~3 sword hits to slay
damageMultiplier: 1.0 #survives ~5 hits
两个倍率默认都是 1.0,可以省略。除非 Boss 已通过区域、实例或竞技场设置启用归一化,否则保留 normalizedCombat: true。
创建杂兵群
杂兵群数量众多但不太危险:
normalizedCombat: true
healthMultiplier: 0.7 #~2 sword hits to slay
damageMultiplier: 0.5 #survives ~10 hits
创建增援
增援应该很容易死亡,但在伤害上构成威胁(这些数值推荐用于 4 个以上的近战实体,实际使用可能有所不同):
normalizedCombat: true
healthMultiplier: 0.25 #~1 sword hit to slay
damageMultiplier: 0.6 #survives ~8 hits
创建小 Boss
小 Boss 应能稳住阵脚,对玩家构成机制上的挑战。它应该是一场持续片刻的技术考验,但不至于极其致命:
normalizedCombat: true
healthMultiplier: 3.0 #~9 sword hits to slay
damageMultiplier: 1.2 #survives ~4 hits
创建 Boss
Boss 是真正的挑战,是副本中层层铺垫的高潮,是一场倾其所有的真正技术考验。遭遇战应该漫长,死亡应是当下的威胁。
normalizedCombat: true
healthMultiplier: 7.0 #~21 sword hits to slay
damageMultiplier: 1.4 #survives ~3.5 hits
创建世界 Boss
世界 Boss 很危险,但最重要的是它们拥有大量生命值,并召唤大量增援/拥有大量范围攻击。它们旨在让大批玩家用一场精英遭遇战所应持续的最长时间来对抗。它们不太致命,但拥有大量能让准备不足的玩家应接不暇的机制。
normalizedCombat: true
healthMultiplier: 40.0 #~120 sword hits to slay
damageMultiplier: 1.5 #survives ~3 hits
这些只是粗略的推荐值,任何最终数值都应围绕遭遇战本身进行调整。