伤害系统
这是对 EliteMobs 中生命值/伤害如何缩放的全面解析。在设计副本时应将其用作参考。
它聚焦于自定义 Boss,但普通精英怪也以相同方式缩放。
在开始之前!
如果你只是想做一些快速调整,并不需要把这些全部读完。直接跳到“将这些数据用于副本”一节,查看极其简化的快速算法以及一系列预设的推荐配置!
缩放(总体而言)
EliteMobs 使用一套指数缩放系统,每相差 5 级,有效战力就翻倍(或减半)。Boss 生命值、玩家伤害和 Boss 伤害都呈指数缩放,从而使战斗在每个等级区间内的体验保持一致——一名 10 级玩家对抗一个 15 级 Boss 的感受,与一名 50 级玩家对抗一个 55 级 Boss 的感受是相同的。
玩家战力来自两个来源,按 50/50 的比例划分:
- 武器熟练度等级 —— 通过用特定武器类型(剑、斧、弓、弩、三叉戟、锄、重锤或长矛)击杀精英怪获得。
- 物品等级 —— 玩家所装备的武器或护甲件的精英等级。
玩家还拥有一项护甲熟练度,它在战斗中被动升级(速率为武器熟练度的 1/3)。护甲熟练度等级会授予额外的最大生命值(每超过 1 级 +1 颗心),并决定玩家对抗 Boss 伤害的防御缩放。
武器熟练度
EliteMobs 10 引入了一套熟练度系统,玩家通过在战斗中使用各类武器来独立地为每种武器类型升级。击杀一个精英怪会向所持武器对应的武器熟练度授予经验值,同时以较低的速率向护甲熟练度授予经验值。
可用的武器熟练度有:
| 熟练度 | 武器 |
|---|---|
| 剑(Swords) | 所有剑类 |
| 斧(Axes) | 所有斧类 |
| 弓(Bows) | 弓 |
| 弩(Crossbows) | 弩 |
| 三叉戟(Tridents) | 三叉戟 |
| 锄(Hoes) | 所有锄类 |
| 重锤(Maces) | 重锤(1.21+) |
| 长矛(Spears) | 所有长矛类(1.21.11+) |
| 护甲(Armor) | 所有护甲件(被动升级) |
从一个怪物获得的熟练度经验等于 mobLevel^2,因此等级越高的怪物按比例授予越多经验。最高熟练度等级为 100,此后一道软上限会使进一步进度呈指数级地更难。
熟练度加成
每项武器熟练度(以及护甲熟练度)都有一组熟练度加成——随玩家升级而解锁的特殊能力。玩家可以选择激活哪些加成。熟练度加成分为五种类型:
- 被动(Passive) —— 装备时始终生效(例如,固定的伤害提升)。
- 条件(Conditional) —— 仅在满足特定条件时生效(例如,目标生命值低于 30% 时的额外伤害)。
- 触发(Proc) —— 在特定事件上基于几率触发(例如,命中时有几率造成流血)。
- 叠加(Stacking) —— 在连续动作中不断累积(例如,连续命中提高伤害)。
- 冷却(Cooldown) —— 带有内部冷却的强力效果(例如,每 60 秒一次免疫致命伤害)。
来自武器熟练度的进攻型熟练度加成会作为加法伤害倍率叠加在对 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. [如适用,爆炸距离衰减]
7. 来自抗性效果的 potionMultiplier
8. finalDamage = max(scaledDamage, 1) * potionMultiplier * customBossDamageMultiplier * specialMultiplier * configMultiplier
9. finalDamage = min(finalDamage, actualMaxHealth - 1)
这三个层级是:
- 基础伤害 —— 玩家预期每次受击会损失多少生命值(
playerMaxHealth / 5)。 - 熟练度调整 —— 来自 Boss 等级与玩家护甲熟练度等级之差的指数缩放。
- 装备调整 —— 基于玩家所装备护甲与保护附魔的、感知伤害类型的减免(见下方“装备防御系统”)。
注意: 伤害被限制在(玩家实际最大生命值 - 1),以防止秒杀。该上限使用 generic_max_health 属性,它包含所有修饰量(护甲熟练度加成、药水效果等)。
playerMaxHealth
玩家的最大生命值由其护甲熟练度等级决定。基础生命值为 20(10 颗心),护甲熟练度每超过 1 级增加 2 点生命值(1 颗心)。护甲熟练度为 50 级的玩家拥有 118 点生命值(59 颗心)。
baseDamage
基础伤害就是 playerMaxHealth / 5.0。这是装备恰当的同等级玩家每次受击预期承受的伤害量。与旧系统不同,这里没有预补偿——基础值就是目标伤害,而非一个被夸大的原始值。
skillAdjustment
熟练度调整使用指数缩放,使 Boss 与玩家护甲熟练度之间的等级差具有意义:
skillAdjustment = 2 ^ ((bossLevel - armorSkillLevel) / 7.5)
每相差 7.5 级,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 = (4 个护甲槽位 armorLevel 之和) / 4
+ (全部 6 个槽位 enchantBonus 之和) / 4
护甲等级按每件物品确定:
- 精英物品使用其存储的精英等级(该物品被创建时的等级)。
- 原版物品使用基于材质的查表:
| 材质 | 护甲等级 |
|---|---|
| 皮革 | 1 |
| 金 | 2 |
| 锁链 | 3 |
| 铁 | 4 |
| 海龟壳 | 4 |
| 钻石 | 5 |
| 下界合金 | 7 |
只有 4 个护甲槽位(头盔、胸甲、护腿、靴子)会贡献护甲等级。
附魔加成将保护附魔等级转换为等效的护甲等级单位:
enchantBonus = (通用保护等级 + 类型专属保护等级) * (1/3)
全部 6 个装备槽位(4 个护甲 + 主手 + 副手)都会贡献附魔加成。这意味着带有保护附魔的盾牌或武器会提供额外防御。对总和进行 /4 归一化意味着,在全部 6 个槽位上都有附魔,相比仅在 4 件护甲上有附魔,最多可提供多 50% 的附魔贡献。
计算示例:Lv25 匹配装备 + 保护 IV 对 Lv25(近战)
玩家: armorSkillLevel=25, maxHP = 20 + 24*2 = 68
4 件精英护甲,每件 armorLevel=25,每件带有保护 IV
怪物: level=25, 近战攻击
步骤 1 -- 每件护甲等级: 25(精英物品,存储值)
步骤 2 -- 每件附魔加成: 保护 IV = 4 * (1/3) = 1.333
(近战伤害类型,所以仅通用保护生效)
步骤 3 -- 装备分数:
armorLevelSum = 25*4 = 100, /4 = 25.0
enchantBonusSum = 1.333*4 = 5.333(无主手/副手附魔), /4 = 1.333
gearScore = 25.0 + 1.333 = 26.333
步骤 4 -- 装备减免(高于匹配):
reduction = 0.50 + (26.333 - 25) * 0.025 = 0.533(53.3%)
步骤 5 -- 装备调整: 2.0 * (1 - 0.533) = 0.933
步骤 6 -- 最终伤害: baseDamage(13.6) * skillAdj(1.0) * gearAdj(0.933) = 12.69
击杀所需击数: 68 / 12.69 = 5.36, 约 5.4 击
计算示例:Lv1 原版钻石 对 Lv5 骷髅(弹射物)
玩家: armorSkillLevel=1, maxHP = 20
全套原版钻石护甲(无附魔),无主手/副手附魔
怪物: level=5, 骷髅箭矢(PROJECTILE 伤害类型)
步骤 1 -- 每件护甲等级: 5(查表得到的原版钻石)
步骤 2 -- 附魔加成: 0(任何护甲件均无附魔)
步骤 3 -- 装备分数: (5+5+5+5)/4 + 0/4 = 5.0
步骤 4 -- 装备减免(匹配): 0.50 * (5/5) = 0.50(50%)
步骤 5 -- 装备调整: 2.0 * (1 - 0.50) = 1.0
步骤 6 -- 最终伤害: baseDamage(4) * skillAdj(1.447) * gearAdj(1.0) = 5.79
击杀所需击数: 20 / 5.79 = 3.45, 约 3.5 击
如果钻石护甲还带有弹射物保护 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 |
场景表
下表展示了一系列场景下的预期战斗结果:
| 场景 | 熟练度调整 | 装备减免 | 装备调整 | 击数 |
|---|---|---|---|---|
| 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 击。
- 顶级装备上限为 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 技能施加的临时伤害倍率。某些 Boss 能力会在技能持续期间提高 Boss 的伤害。无技能生效时默认为 1.0。
爆炸伤害衰减
苦力怕爆炸和其他爆炸伤害(恶魂火球)会根据距爆炸中心的距离而减少。伤害倍率随距爆炸点的距离线性递减,使爆炸在远处不那么致命。
自定义 Boss 的最大生命值
EliteMobs 10 中的 Boss 生命值使用指数缩放而非线性缩放。每 5 级,Boss 生命值就精确翻倍。这确保了无论绝对等级如何,等级差的感受都保持一致。
自定义 Boss 的生命值公式为:
health = 2.1875 * 2^(bossLevel / 5) * customBossHealthMultiplier
指数缩放
基础常数(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 倍) |
customBossHealthMultiplier
这是自定义 Boss 文件中的倍率。默认为 1。
对自定义 Boss 造成的伤害
玩家伤害使用指数缩放和线性缩放的相乘层级,以在各等级间保持战斗一致,同时仍让不同武器族系有不同的手感。该公式将玩家战力分为两个独立的轴——武器熟练度等级(指数式熟练度调整)和武器物品等级(线性式武器调整)——使熟练度投入和装备都对战斗力有所贡献。
相比旧版本的重要变化是,近战武器速度不再试图让每种武器类型都拥有相同的理论 DPS。剑仍然是基准点,而斧、重锤和近战三叉戟会获得受抑制的爆发补偿。本就测试表现良好的武器族系,如锄和长矛,则保留旧的攻击速度因子。
伤害公式
完整的玩家对精英怪伤害公式为:
formulaDamage = baseDamage * attackSpeedFactor * skillAdjustment * weaponAdjustment * cooldownOrVelocity * sweepMultiplier * potionMultiplier * enchantmentMultiplier * arrowDamageMultiplier
finalDamage = max(formulaDamage, 1) * damageModifier * combatMultiplier * critMultiplier
下面将描述每个组成部分。
baseDamage
每次受击的基础伤害由怪物的归一化生命值(在 healthMultiplier=1.0 时)除以击杀目标击数推导得出:
baseDamage = normalizedMobHP / 3.0
其中 normalizedMobHP = 2.1875 * 2^(mobLevel / 5)(见上方“自定义 Boss 的最大生命值”一节)。常数 3.0(TARGET_HITS_TO_KILL_MOB)意味着匹配玩家在任何等级下都恰好用 3 次剑击杀死一个标准精英怪。
注意: 自定义 Boss 文件中的 healthMultiplier 会乘以实际怪物生命值,但不影响 baseDamage。带有 healthMultiplier: 2.0 的 Boss 拥有双倍生命值,需要 6 击而非 3 击。
attackSpeedFactor
这是近战攻击速度的节奏层。它从旧的传统因子开始:
legacyFactor = 1.6 / actualAttackSpeed
1.6 的参考速度是剑的攻击速度。最终因子随后取决于武器族系:
剑、锄、长矛、未知近战,以及弓/弩的近战:
attackSpeedFactor = legacyFactor
斧、重锤和近战三叉戟:
attackSpeedFactor = sqrt(legacyFactor)
远程弹射物攻击:
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 生命值缩放的通用等级修饰量(会被钳制)不同,进攻型熟练度调整在当前代码中未被钳制。实际上,非常大的等级差(超过 +/-22 级)可能产生极端值,但在正常游戏中这不太可能发生,因为武器熟练度上限为 100。
weaponAdjustment
基于武器物品等级相对于怪物等级的两段式线性曲线。这与装备防御系统中的防御型装备减免曲线相对应。
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 个武器等级才能达到上限。
| 武器场景 | bonus | 武器调整 | 对击数的影响 |
|---|---|---|---|
| 赤手空拳(无武器) | 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 击 |
cooldownOrVelocity
对于近战武器,这是 Minecraft 的攻击冷却倍率(0.0 到 1.0)。在冷却重置前攻击会按比例减少所有公式伤害。蓄满时,cooldown = 1.0。
对于远程/弹射物攻击(弓、弩、投掷的三叉戟,以及技能生成的箭矢),这是归一化的发射速度。满拉弓速度约为 3.0;该值被归一化为 min(velocity / 3.0, 1.0),钳制在 [0, 1] 范围内。
sweepMultiplier
当剑的横扫通过 ENTITY_SWEEP_ATTACK 命中次要目标时,那些目标承受主命中伤害的 25%:
sweepMultiplier = 0.25 (次要横扫目标)
sweepMultiplier = 1.0 (主目标)
potionMultiplier(进攻)
力量和虚弱药水效果会修改玩家输出的伤害:
potionMultiplier = 1.0 + strengthBonus - weaknessPenalty
其中 strengthBonus = (strengthAmplifier + 1) * strengthDamageMultiplier,weaknessPenalty = (weaknessAmplifier + 1) * weaknessDamageMultiplier。两个配置值均默认为 0.2,与原版行为一致(力量 I = +20% 伤害,虚弱 I = -20% 伤害)。等级相同的力量和虚弱会恰好抵消。该倍率的下限为 0。
MobCombatSettings.yml 中的配置键为:
| Key | 默认值 | 描述 |
|---|---|---|
strengthDamageMultiplierV2 | 0.2 | 每级力量的额外伤害 |
weaknessDamageMultiplierV2 | 0.2 | 每级虚弱的伤害惩罚 |
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(对抗亡灵生物时 7.5% 加成)。
arrowDamageMultiplier
由武器熟练度能力(如多重射击、箭雨等)生成的箭矢会携带一个存储在弹射物数据容器中的伤害倍率。这使技能生成的箭矢相比标准箭矢命中能造成更低的伤害。对于玩家正常射出的箭矢,此倍率为 1.0。
荆棘伤害
荆棘伤害使用基于怪物基础伤害的独立公式,而非标准攻击公式。只有仅精英的荆棘等级(超过原版上限 III 的等级)才会被计入:
eliteThornsLevel = totalThornsLevel - vanillaMaxThornsLevel(按每件护甲计,并对全部 4 件求和)
thornsDamage = baseDamage * eliteThornsLevel * 0.02
每个超过原版上限的精英荆棘等级贡献基础伤害的 2%。原版荆棘 III 不会触发精英荆棘伤害。例如,如果全部 4 件护甲都有荆棘 V(每件 2 个精英等级),则精英荆棘总等级为 8:每次触发为怪物基础伤害的 baseDamage * 8 * 0.02 = 16%。
damageModifier
来自自定义 Boss 文件的、针对特定武器类型的 Boss 专属伤害修饰量(damageModifiers)。这允许 Boss 对特定武器材质承受更多或更少的伤害(例如,一个抗剑但弱于斧的 Boss)。对所有未明确配置的武器类型默认为 1.0。
combatMultiplier
来自 MobCombatSettings.yml 的全局倍率(根据战斗模式为 scaledDamageToEliteMultiplier、normalizedDamageToEliteMultiplier 或 damageToEliteMobMultiplierV2)。默认为 1.0。
critMultiplier
暴击将最终伤害乘以 1.5 倍。暴击几率由玩家的精英装备暴击几率属性决定。
修饰量钳制
通用等级修饰量(用于 Boss 生命值缩放和标准战斗)被钳制在 MIN_MODIFIER = 0.125 和 MAX_MODIFIER = 8.0 之间,以防止在非常大的等级差下出现极端值。这些上下限在大约 +/-15 级差时达到。
然而,玩家对精英怪和精英怪对玩家伤害公式中使用的进攻型和防御型熟练度调整(calculateOffensiveSkillAdjustment 以及 eliteToPlayerDamageFormula 中的熟练度调整)在当前代码中未被钳制。实际上,熟练度等级受最高熟练度等级(100)限制,这自然地限制了这些值的范围。
计算示例
示例 1:Lv25 匹配剑 对 Lv25 精英怪(近战)
玩家: weaponSkillLevel=25, weapon=精英剑 (itemLevel=25)
怪物: level=25, healthMultiplier=1.0
步骤 1 -- 基础伤害: mobHP(25) = 2.1875 * 2^5 = 70.0, baseDamage = 70.0/3 = 23.33
步骤 2 -- 攻击速度因子: 剑速度=1.6, factor = 1.6/1.6 = 1.0
步骤 3 -- 熟练度调整: 2^((25-25)/7.5) = 2^0 = 1.0
步骤 4 -- 武器调整: weaponLevel(25) == mobLevel(25), bonus=0.50, adj = 1.0
步骤 5 -- 冷却: 蓄满 = 1.0
步骤 6 -- 横扫: 主目标 = 1.0
formulaDamage = 23.33 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 = 23.33
怪物 HP = 70.0 -> 击杀所需击数 = 70.0 / 23.33 = 3.0
示例 2:Lv25 斧 对 Lv25 精英怪(受抑制的爆发补偿)
玩家: weaponSkillLevel=25, weapon=精英斧 (itemLevel=25)
怪物: level=25, healthMultiplier=1.0
步骤 1 -- 基础伤害: 23.33(同上)
步骤 2 -- 传统攻击速度因子: 1.6/1.0 = 1.6
步骤 3 -- 斧爆发抑制: sqrt(1.6) = 1.265
步骤 4 -- 熟练度调整: 1.0(匹配)
步骤 5 -- 武器调整: 1.0(匹配)
步骤 6 -- 冷却: 蓄满 = 1.0
formulaDamage = 23.33 * 1.265 * 1.0 * 1.0 * 1.0 = 29.52
击杀所需击数 = 70.0 / 29.52 = 2.37
示例 3:Lv25 锄 对 Lv25 精英怪(传统快速武器因子)
玩家: weaponSkillLevel=25, weapon=精英锄 (itemLevel=25)
怪物: level=25, healthMultiplier=1.0
步骤 1 -- 基础伤害: 23.33(同上)
步骤 2 -- 攻击速度因子: 锄速度=4.0, factor = 1.6/4.0 = 0.4
步骤 3 -- 熟练度调整: 1.0(匹配)
步骤 4 -- 武器调整: 1.0(匹配)
步骤 5 -- 冷却: 蓄满 = 1.0
formulaDamage = 23.33 * 0.4 * 1.0 * 1.0 * 1.0 = 9.33
击杀所需击数 = 70.0 / 9.33 = 7.5
示例 4:Lv20 弓 对 healthMultiplier=2.0 的 Lv25 精英怪(远程,等级偏低)
玩家: weaponSkillLevel=20, weapon=精英弓 (itemLevel=20)
怪物: level=25, healthMultiplier=2.0, 实际 HP = 70.0 * 2 = 140.0
步骤 1 -- 基础伤害: 23.33(来自归一化 HP,而非实际 HP)
步骤 2 -- 攻击速度因子: 远程,不适用 = 1.0
步骤 3 -- 熟练度调整: 2^((20-25)/7.5) = 2^(-0.667) = 0.63
步骤 4 -- 武器调整: weaponLevel(20) < mobLevel(25), bonus = 0.5*(20/25) = 0.4, adj = 0.9
步骤 5 -- 箭矢速度: 满拉弓 = 1.0
formulaDamage = 23.33 * 1.0 * 0.63 * 0.9 * 1.0 = 13.23
击杀所需击数 = 140.0 / 13.23 = 10.6 击
(熟练度和武器都等级偏低,对抗 healthMultiplier=2.0 的怪物)
DamageBreakdown 调试工具
EliteMobs 内置了一个 DamageBreakdown 调试工具,可实时追踪并显示伤害公式的每个组成部分。为某玩家启用后,它会记录每一层(基础伤害、攻击速度因子、熟练度调整、武器调整、冷却、横扫、荆棘等),并可输出:
- 完整的格式化分解,显示所有等级、公式组成部分、倍率以及最终计算出的伤害。
- 紧凑的单行摘要,便于游戏内快速参考。
- 预期值与实际值的对比,标记出大于 10% 的差异,有助于诊断插件冲突或配置错误的 Boss 文件。
这主要是一个开发和测试工具。服务器管理员可以用它来验证特定遭遇战中的战斗是否按预期运作。
熟练度经验进度
武器和护甲熟练度通过击杀精英怪赚取经验来升级。经验系统使用三次方的等级需求,以创造平滑的进度,并在 100 级以上设有软上限。
击杀获得的经验: 从一个怪物获得的经验等于 mobLevel^2。等级越高的怪物按比例授予越多经验。
升到下一级所需经验:
对于 1 到 100 级:
xpToNextLevel = 8.5 * L^3
对于 100 级以上(软上限):
xpToNextLevel = 8.5 * L^3 * (1 + ((L - 100)^2 / 100))
软上限倍率在 100 级处是连续的(倍率 = 1.0),并在其之上呈二次方增长。在 150 级时,倍率约为 26 倍,使进一步进度几乎不可能。出于实用目的,最高熟练度等级为 100,尽管系统允许以指数级递增的代价超越它继续进度。
其他战斗机制
防止秒杀
EliteMobs 防止 Boss 一击秒杀玩家。无论伤害计算结果如何,伤害都被限制在(玩家的 generic_max_health 属性 - 1),确保玩家总能以至少 1 点生命值存活。该上限使用 generic_max_health 属性而非当前生命值,因此它考虑了所有最大生命值修饰量(护甲熟练度加成、药水效果等)。
盾牌格挡
当玩家用盾牌格挡时,传入伤害减少 80%(在 MobCombatSettings 中配置为 blockingDamageReduction)。格挡会完全抵消远程弹射物攻击(弹射物会被移除)。
护甲熟练度生命值加成
玩家根据其护甲熟练度等级获得额外的最大生命值。每超过 1 级授予 +2 点生命值(+1 颗心)。这作为属性修饰量应用,是玩家在更高等级提高生存能力的主要方式。
等级缩放总结
下表总结了等级差如何在两个方向上影响战斗:
| 等级差 | 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 模拟成与玩家同等级,使装备和熟练度仍然重要,但怪物显示的等级并不重要。其结果是,无论进度等级如何,每位玩家面对同一只主世界怪物时都面临一场同样公平的战斗。
缩放战斗与归一化战斗有何不同
EliteMobs 有三种战斗模式:
| 模式 | 用于 | 等级是否重要? | 配置键 |
|---|---|---|---|
| 标准 | 没有特殊标志的基础怪物 | 是——伤害和生命值随怪物的实际等级缩放 | damageToEliteMobMultiplierV2 / damageToPlayerMultiplierV2 |
| 归一化 | 副本和区域 Boss(normalizedCombat: true) | 是——但 Boss 使用单独的归一化基准,以实现一致的副本平衡 | normalizedDamageToEliteMultiplier / normalizedDamageToPlayerMultiplier |
| 缩放 | 自然的主世界精英怪和事件 Boss(scaledCombat: true 或全局配置) | 否——Boss 被模拟为玩家的等级 | scaledDamageToEliteMultiplier / scaledDamageToPlayerMultiplier |
关键区别:在归一化战斗中,50 级 Boss 比 10 级 Boss 更难。在缩放战斗中,两者都感觉像同等级战斗,因为系统假装 Boss 就是玩家所处的任意等级。
工作原理
伤害(Boss 对玩家)
当一个缩放战斗的 Boss 伤害玩家时,伤害公式将 Boss 的等级设为等于玩家的护甲熟练度等级:
mobLevel = armorSkillLevel (而非 Boss 的实际等级)
这意味着熟练度调整变为 1.0(因为 bossLevel - armorSkillLevel = 0),并且伤害完全取决于玩家的装备和护甲熟练度——而非怪物存储的等级。公式的其余部分(基础伤害、装备调整、药水等)与上文各节所述完全相同。
伤害(玩家对 Boss)
当玩家攻击一个缩放战斗的 Boss 时,公式会:
- 将 Boss 模拟为玩家的武器熟练度等级 —— 暂时把怪物当作与玩家武器熟练度同等级来对待。
- 针对该模拟等级运行标准伤害公式 —— 产生一个“对抗同等级怪物的伤害”结果。
- 重新缩放到 Boss 的实际生命值 —— 将公式伤害从模拟怪物生命值的百分比转换为 Boss 实际生命值池的相同百分比。
simulatedMobLevel = playerWeaponSkillLevel
formulaDamage = playerToEliteDamageFormula(player, eliteEntity at simulatedMobLevel)
damagePercentage = formulaDamage / simulatedMobHP
actualDamage = damagePercentage * actualBossMaxHP
这意味着,无论 Boss 被存储为什么等级,装备恰当的玩家总能以相同的、与武器相关的击数击杀一个缩放战斗的 Boss。对于 healthMultiplier: 1.0,基准大约是 3 次剑击;其他武器族系遵循上文所述的攻击速度因子。
战利品与奖励
对于缩放战斗的怪物,战利品奖励基于玩家的战斗等级而非怪物的等级。这意味着高等级玩家击杀一个缩放的主世界精英怪会获得与其进度相称的战利品,而低等级玩家击杀同一只怪物则获得相应较低等级的战利品。
等级显示
缩放战斗的实体在其名牌中显示一个符号而非数字等级,因为它们的实际等级对玩家而言无关紧要:
- 标准缩放实体(healthMultiplier 1.0 或更低):显示一个剑符号(默认:
「⚔」) - 高威胁缩放实体(healthMultiplier 高于 1.0):显示一个骷髅符号(默认:
☠)
这些符号可在 MobCombatSettings.yml 中通过 scaledStandardLevelSymbol 和 scaledHighThreatLevelSymbol 自定义。
启用缩放战斗
用于所有自然精英怪(全局配置)
在 MobCombatSettings.yml 中:
useScaledCombatForNaturalElites: true
这在 EliteMobs 10 中默认启用。启用后,主世界中所有自然生成的精英怪会自动使用缩放战斗。使用 normalizedCombat 的副本 Boss 不受此设置影响。
用于单个自定义 Boss
在自定义 Boss 配置文件中:
scaledCombat: true
这会强制某个特定的自定义 Boss 使用缩放战斗,无视全局设置。适用于事件 Boss 或应对所有玩家都同样公平的自定义主世界遭遇战。
注意: 如果一个 Boss 有 normalizedCombat: true(或者它是一个在全局启用了归一化的区域/实例 Boss),归一化战斗优先,该 Boss 将不会使用缩放战斗——除非在 Boss 文件中明确设置了 scaledCombat: true,在这种情况下缩放战斗获胜。
配置键
以下 MobCombatSettings.yml 键控制缩放战斗的行为:
| Key | 默认值 | 描述 |
|---|---|---|
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或全局设置):用于主世界内容、事件 Boss,以及任何应让所有等级玩家拥有相同体验的遭遇战。 - 标准战斗(两个标志都不设):用于那些原始等级应直接决定难度的怪物,例如出生点附近随距离缩放的精英怪。
传统生命值缩放(useRecommendedHealthScaling: false)
当 MobCombatSettings.yml 中的 useRecommendedHealthScaling 设为 false 时,自然精英怪(非副本或区域 Boss)会使用一个简化的传统公式,而非指数缩放:
baseDamage = level * 2
mobHealth = baseDamage * 3 (TARGET_HITS_TO_KILL_MOB)
这会产生小得多的生命值和伤害数值,更接近 EliteMobs 9 的行为。此设置的存在是为了向后兼容那些围绕旧版 EliteMobs 战斗数值构建集成的服务器。不推荐使用,因为它会使玩家进度感觉更平淡。此设置不影响归一化的区域 Boss 战斗。
将这些数据用于副本
注意:这里假设你正在使用 normalizedCombat 数值! 那些数值是专门为更轻松地平衡副本而设的。
Boss 难度的一部分在于让它拥有适合该遭遇战的生命值和伤害。然而,请记住这只是其中一部分,技能同样重要。
以下内容以自定义 Boss 文件的正确格式呈现。
简易快速算法
借助指数缩放系统,healthMultiplier 和 damageMultiplier 会直接缩放基础值:
-
healthMultiplier为 1.0 意味着同等级玩家大约需要 3 次剑击才能杀死该 Boss。其他近战武器因攻击速度因子而异:受抑制的爆发武器(如斧、重锤和近战三叉戟)所需击数比剑少,而锄所需击数更多,因为它们保留了传统的快速武器因子。倍率为 2.0 时生命值翻倍,0.5 时减半,以此类推。 -
damageMultiplier为 1.0 意味着该 Boss 大约 5 击就能杀死一名装备恰当的同等级玩家。倍率越高 Boss 越致命,倍率越低则越安全。
由于缩放是指数式的,这些与武器相关的击数无论 Boss 等级如何都保持一致——一个 healthMultiplier: 2.0 的 10 级 Boss,被同等级玩家攻击时,所需的相对于剑的击数与一个 healthMultiplier: 2.0 的 80 级 Boss 相同。
请记住,玩家往往优先升级武器,最终常常装备远逊于武器的护甲。除非你设计非常特定的远程战斗竞技场,否则你大概不会想让每次受击造成大量伤害。 请试玩测试你的内容!
创建一个普通副本怪物
借助 normalizedCombat 的缩放,你可以应用一个极其简约的配置:
normalizedCombat: true
healthMultiplier: 1.0 #约 3 次剑击杀死
damageMultiplier: 1.0 #存活约 5 击
注意:由于 1.0 是默认值,这意味着你也可以什么都不定义。
创建杂兵群
杂兵群数量众多但不太危险:
normalizedCombat: true
healthMultiplier: 0.7 #约 2 次剑击杀死
damageMultiplier: 0.5 #存活约 10 击
创建增援
增援应该很容易死亡,但在伤害上构成威胁(这些数值推荐用于 4 个以上的近战实体,实际使用可能有所不同):
normalizedCombat: true
healthMultiplier: 0.25 #约 1 次剑击杀死
damageMultiplier: 0.6 #存活约 8 击
创建小 Boss
小 Boss 应能稳住阵脚,对玩家构成机制上的挑战。它应该是一场持续片刻的技术考验,但不至于极其致命:
normalizedCombat: true
healthMultiplier: 3.0 #约 10 次剑击杀死
damageMultiplier: 1.2 #存活约 4 击
创建 Boss
Boss 是真正的挑战,是副本中层层铺垫的高潮,是一场倾其所有的真正技术考验。遭遇战应该漫长,死亡应是当下的威胁。
normalizedCombat: true
healthMultiplier: 7.0 #约 23 次剑击杀死
damageMultiplier: 1.4 #存活约 3.5 击
创建世界 Boss
世界 Boss 很危险,但最重要的是它们拥有大量生命值,并召唤大量增援/拥有大量范围攻击。它们旨在让大批玩家用一场精英遭遇战所应持续的最长时间来对抗。它们不太致命,但拥有大量能让准备不足的玩家应接不暇的机制。
normalizedCombat: true
healthMultiplier: 40.0 #约 120 次剑击杀死
damageMultiplier: 1.5 #存活约 3 击
这些只是粗略的推荐值,任何最终数值都应围绕遭遇战本身进行调整。