Перейти к основному содержимому

Система урона

Это подробный разбор того, как масштабируются здоровье / урон в EliteMobs. Его следует использовать как справочник при проектировании подземелий.

Здесь рассматриваются обычные атаки с участием пользовательских боссов. Природные элиты используют те же основные кривые с описанными ниже настройками масштабированного боя и старого здоровья. Прямой урон скриптов, магическое оружие и способности классов могут обрабатываться иначе; см. Пользовательский урон и поглощение.

Прежде чем начать!

Вам не нужно читать всё это, если вы просто хотите внести быстрые правки. Перейдите к разделу «Использование этих данных для подземелий», чтобы увидеть очень упрощённую быструю математику и набор готовых рекомендуемых настроек!

Масштабирование (в целом)

EliteMobs сочетает экспоненциальные поправки навыков с модификаторами снаряжения. Формула здоровья босса без ограничений удваивается каждые 5 уровней, а атакующие и защитные поправки навыков удваиваются каждые 7,5 уровней разницы. Здоровье босса и базовый урон игрока перестают расти только от уровня моба при достижении настроенного предела здоровья Minecraft. Поэтому эти кривые не гарантируют одинаковый бой во всех диапазонах уровней.

Сила игрока объединяет два независимо рассчитываемых слоя:

  1. Уровень навыка оружия — зарабатывается убийством элитных мобов оружием определённого типа (мечи, топоры, луки, арбалеты, трезубцы, мотыги, булавы, копья, посохи или жезлы).
  2. Уровень предмета — элитный уровень оружия или элемента брони, экипированного игроком.

Игроки также получают XP навыка брони за подходящие убийства элитных мобов: треть базовой доли XP до собственных модификаторов и округления. Само получение ударов этого опыта не даёт. Навык брони увеличивает максимальное здоровье (+1 сердце за уровень выше 1), если это разрешают настройки здоровья и правила мира, и определяет защитное масштабирование против урона босса.

Навыки оружия

Опыт оружия распределяется по вкладу в урон между навыками, записанными при ударе или запуске снаряда. Смена оружия в момент смерти моба не перенаправляет опыт. Навык брони получает опыт с пониженным коэффициентом.

Доступные навыки оружия:

НавыкОружие
МечиВсе типы мечей
ТопорыВсе типы топоров
ЛукиЛук
АрбалетыАрбалет
ТрезубцыТрезубец
МотыгиВсе типы мотыг
БулавыБулава (1.21+)
КопьяВсе типы копий (1.21.11+)
ПосохиОружие с пользовательской моделью и меткой weaponType: STAVES
ЖезлыОружие с пользовательской моделью и меткой weaponType: WANDS
БроняЗащитный навык, растущий за подходящие убийства элитных мобов

Начальное значение XP равно mobLevel^2. Его изменяют множители здоровья и урона босса, вклад игрока, ограничения уровня наград и бонусы XP. Уровень 100 — мягкий предел, а не максимум: требуемый опыт продолжает расти и после него. Правила наград описаны в разделе Система навыков.

Бонусы навыков​

У всех десяти навыков оружия и навыка брони есть бонусы навыков — особые способности, открывающиеся с повышением уровня. Игрок выбирает, какие бонусы активировать. Они бывают пяти типов:

  • Пассивные (Passive) — всегда активны при экипировке (например, плоское увеличение урона).
  • Условные (Conditional) — активны только при выполнении определённого условия (например, бонус к урону, когда у цели меньше 30% здоровья).
  • Прок (Proc) — срабатывание на основе шанса при определённых событиях (например, шанс вызвать кровотечение при ударе).
  • Накопительные (Stacking) — накапливаются при последовательных действиях (например, последовательные удары увеличивают урон).
  • С перезарядкой (Cooldown) — мощный эффект с внутренней перезарядкой (например, пережить смертельный урон раз в 60 секунд).

Наступательные бонусы навыков от навыков оружия применяются как складывающиеся множители урона поверх базового урона, наносимого боссам. Защитные бонусы навыков от навыка брони снижают входящий урон босса с помощью различных механик (плоское снижение, уклонение, щиты урона и т.д.).

У игроков может быть до 3 активных бонусов на тип оружия или брони. Поскольку все кривые на этой странице построены без них, см. Бонусы навыков в конвейере урона, чтобы понять их вклад в реальный урон перед балансировкой боя.

Урон, наносимый пользовательскими боссами

Урон босса в EliteMobs 10 использует три мультипликативных слоя без предварительной компенсации. Система разработана так, чтобы правильно экипированный игрок переживал примерно 5 ударов от контента того же уровня.

Формула урона для пользовательских боссов:

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)

Три слоя:

  1. Базовый урон — сколько HP за удар, как ожидается, потеряет игрок (playerMaxHealth / 5).
  2. Корректировка навыка — экспоненциальное масштабирование от разницы между уровнем босса и уровнем навыка брони игрока.
  3. Корректировка снаряжения — снижение с учётом типа урона на основе экипированной брони игрока и зачарований защиты (см. систему защиты снаряжения ниже).

В обычном бою предел одного удара равен фактическому максимуму здоровья минус 1. При активном [Alpha] Advanced Combat System из него сначала вычитается фиксированная прибавка режима 30 HP. Она увеличивает запас здоровья, не повышая входящий базовый урон. Предел применяется внутри формулы, до блокирования и обработчиков событий. Прямой пользовательский урон обходит его, а раненый игрок всё ещё может погибнуть от одного удара.

playerMaxHealth​

При стандартных включённых настройках здоровья от брони база составляет 20 HP плюс 2 HP за каждый уровень навыка брони выше 1. На уровне 50 это 118 HP до остальных модификаторов. Бонус можно отключить в skills.yml; в исключённых мирах он не действует. База фиксирована на 20 HP: настройки базового здоровья в этом файле нет. При включённом [Alpha] Advanced Combat System область действия бонуса также зависит от правил управляемых боевых миров.

baseDamage​

Базовый урон — это просто playerMaxHealth / 5.0. Это количество урона, которое, как ожидается, получит за удар правильно экипированный игрок того же уровня. В отличие от старой системы, предварительной компенсации нет — базовое значение является целевым уроном, а не завышенным сырым значением.

skillAdjustment​

Корректировка навыка использует экспоненциальное масштабирование, чтобы сделать разницу в уровне между боссом и навыком брони игрока значимой:

skillAdjustment = 2 ^ ((bossLevel - armorSkillLevel) / 7.5)

Каждые 7.5 уровней разницы удваивают (или уменьшают вдвое) эффективный урон босса. Это немного более снисходительно, чем универсальный модификатор уровня (который удваивается каждые 5 уровней), потому что слой корректировки снаряжения уже обеспечивает дополнительное масштабирование.

Разница уровнейКорректировка навыкаПримерное число ударов до убийства (соответствующее снаряжение)
Тот же уровень (0)1.0x~5 ударов
+5 уровней~1.6x~3 удара
+10 уровней~2.5x~2 удара
+15 уровней4.0x~1.25 удара

Система защиты снаряжения​

Система защиты снаряжения заменяет старую систему нарастания снаряжения. Вместо предположения о плоском множителе предварительной компенсации на основе уровня навыка, система теперь считывает фактически экипированное снаряжение игрока и рассчитывает снижение от снаряжения с учётом типа урона.

Типы урона​

Система классифицирует входящий урон по пяти категориям. Тип урона определяет, какие зачарования защиты вносят вклад в оценку снаряжения:

Тип уронаПричины событияИспользуемые зачарования защиты
MELEEПрямая атака, размашистая атакаТолько Protection
PROJECTILEСтрелы, огненные шарыProtection + Projectile Protection
EXPLOSIONВзрыв крипера, гастаProtection + Blast Protection
FIREОгонь, тик огняProtection + Fire Protection
OTHERВсё остальноеТолько Protection

Оценка снаряжения (Gear Score)​

Оценка снаряжения объединяет уровень брони и бонусы зачарований в единое значение, которое можно сравнить с уровнем атакующего моба:

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 брони + основная рука + вторая рука) вносят вклад в бонус зачарования. Это означает, что щиты или оружие с зачарованиями Protection обеспечивают дополнительную защиту. Нормализация /4 от суммы означает, что наличие зачарований на всех 6 слотах даёт до 50% больше вклада зачарований, чем наличие их только на 4 элементах брони.

Разобранный пример: соответствующее снаряжение Lv25 + Prot 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

Если бы алмазная броня также имела Projectile Protection 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% за каждый уровень снаряжения выше моба. Достигает жёсткого лимита 75% при +10 уровнях снаряжения выше моба.

Корректировка снаряжения преобразует снижение в множитель урона:

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 без брони против Lv11.00%2.02.5
Lv1 без брони против Lv51.450%2.0~1.7
Lv1 ванильный алмаз против Lv51.4550%1.0~3.5
Lv25 соответствие против Lv251.050%1.05.0
Lv25 соответствие+ProtIV против Lv251.053.3%0.935.4
Lv25 соответствие против Lv301.5941.7%1.172.7
Lv25 пиковое снаряжение против Lv251.075%0.5010.0
Lv50 соответствие против Lv501.050%1.05.0

Ключевые проектные цели:

  • 5 ударов при соответствующем уровне: При обычном запасе здоровья, указанном выше, правильно экипированный игрок с полным здоровьем погибает примерно от 5 обычных ударов элитного моба того же уровня.
  • 2.5 удара без брони — отсутствие снаряжения означает двойной урон через корректировку снаряжения 2.0. Немедленный стимул экипировать любую броню.
  • Ванильная броня имеет значение — игрок 1 уровня в алмазной броне переживает ~3.5 удара от моба 5 уровня вместо ~1.7 без брони.
  • Зачарования значимы, но не доминируют — Protection IV на всех 4 элементах брони добавляет ~1.33 к оценке снаряжения, поднимая снижение с 50% до 53.3%. Заметно (~8% больше выживаемости), но не ломает игру.
  • Общая основа для разных уровней: При равных уровнях игрока и моба на уровнях 25 и 50 цель составляет примерно 5 ударов при этих условиях. Дополнительное здоровье [Alpha] Advanced Combat System меняет фактическое число.
  • Лимит пикового снаряжения в 10 ударов — даже с наилучшим возможным снаряжением (+10 уровней выше моба) игроки всё равно получают ощутимый урон.

potionMultiplier (защитный)​

Входящий урон объединяет множитель Strength/Weakness атакующего элитного моба со снижением от Resistance игрока. Часть Resistance рассчитывается так:

potionMultiplier = max(0, 1.0 - (resistanceAmplifier + 1) * resistanceDamageMultiplier)

Ключ конфигурации — resistanceDamageMultiplierV2 в MobCombatSettings.yml (по умолчанию: 0.2). Это соответствует ванильному поведению: Resistance I = снижение на 20%, Resistance V = снижение на 100% (иммунитет).

customBossDamageMultiplier​

Это множитель урона в файле пользовательского босса. По умолчанию 1.

configMultiplier (защитный)​

Это множитель в MobCombatSettings.yml. Для нормализованного боя он использует normalizedDamageToPlayerMultiplier (по умолчанию 1.0). Для масштабированного боя он использует scaledDamageToPlayerMultiplier (по умолчанию 1.0). Для стандартных мобов он использует damageToPlayerMultiplierV2 (по умолчанию 1.0).

specialMultiplier​

Это множитель, передаваемый способностью босса для конкретного вызова урона. Соответствующее событие использует его однократно; другие и последующие вложенные удары его не наследуют. Значение по умолчанию — 1.0.

Затухание урона взрыва​

Урон крипера ослабляется по расстоянию от крипера и радиусу его взрыва. Ветка гаста сейчас измеряет расстояние от гаста, используя силу взрыва огненного шара, а не расстояние от места попадания шара. Обе ветки используют max(0, 1 - distance / radius). Затем формула поднимает ослабленное значение как минимум до 1 перед остальными множителями, поэтому одно расстояние не гарантирует нулевой урон.

Максимальное здоровье пользовательских боссов

Формула здоровья босса без ограничений в EliteMobs 10 удваивается каждые 5 уровней. Фактическое здоровье ограничено максимумом Minecraft, применяемым до и после healthMultiplier, поэтому удвоение прекращается при достижении одного из пределов здоровья.

Формула здоровья для пользовательских боссов:

baseHealth = min(2.1875 * 2^(bossLevel / 5), minecraftMaxHealth)
health = max(1, min(baseHealth * customBossHealthMultiplier, minecraftMaxHealth))

Экспоненциальное масштабирование​

Базовая константа (2.1875) настроена так, чтобы у босса 25 уровня было примерно 70 HP. Примеры значений здоровья (до потолка максимального здоровья, описанного ниже):

Уровень боссаЗдоровье по формулеЗдоровье через +5 уровней
1~2.5~5 (2x)
5~4.4~8.75 (2x)
10~8.75~17.5 (2x)
25~70~140 (2x)
50~2,240~4,480 (2x)
100~2,293,760~4,587,520 (2x)

Потолок максимального здоровья Minecraft​

Сам Minecraft отказывается давать сущности больше здоровья, чем settings.attribute.maxHealth.max в spigot.yml. EliteMobs читает это значение при запуске и, если оно ниже 2048, поднимает его до 2048 и сохраняет файл. Назовём это значение MAX.

Потолок применяется дважды — один раз к чистой формуле уровня и ещё раз после применения healthMultiplier:

effectiveHealth = min( min(2.1875 * 2^(level / 5), MAX) * healthMultiplier, MAX )

Внутреннее ограничение — причина, по которой даже healthMultiplier ниже 1.0 в итоге перестаёт масштабироваться: чистая формула пересекает 2048 на уровне 50 независимо от используемого множителя, и всё дальше по цепочке работает уже с зафиксированным числом. Внешнее ограничение затем срабатывает ещё раньше для множителей выше 1.0.

На сервере по умолчанию (MAX = 2048):

healthMultiplierТипичное применениеHP перестаёт расти наЗафиксировано на
0.25ПодкрепленияУровень 50512 HP
0.7Пачка мелочиУровень 50~1 434 HP
1.0Стандартный моб подземельяУровень 502 048 HP
3.0МинибоссУровень 422 048 HP
7.0БоссУровень 362 048 HP
40.0Мировой боссУровень 232 048 HP

Выше этих уровней запас здоровья перестаёт расти: у мировых боссов уровней 60 и 90 одинаковое HP. Итоговый расчёт предупреждает в журнале, если умножение превышает потолок. Предыдущее ограничение базового здоровья происходит без предупреждения, поэтому отсутствие записи не доказывает, что босс ниже потолка. Используйте положительный конечный healthMultiplier; некорректные значения заменяются на 1.0.

Следствие для дизайна

Если вы создаёте контент выше примерно 35 уровня с большими значениями healthMultiplier, поднимите settings.attribute.maxHealth.max в spigot.yml самостоятельно. Иначе ваши уровни боссов сольются друг с другом — значения healthMultiplier, рекомендуемые далее на этой странице, перестанут различать столкновения, как только все они упрутся в одно и то же число.

Базовый урон игрока использует здоровье уровня после ограничения, делённое на 3, и перестаёт расти только от уровня моба после внутреннего предела. Множители оружия, навыков и прочие продолжают действовать. Высокий healthMultiplier теряет добавочную прочность при достижении итогового предела здоровья.

customBossHealthMultiplier​

Это множитель в файле пользовательского босса. По умолчанию 1.

Урон, наносимый пользовательским боссам

Урон игрока использует мультипликативные слои экспоненциального и линейного масштабирования, чтобы сохранять согласованность боя по уровням, при этом позволяя разным семействам оружия ощущаться по-разному. Формула разделяет силу игрока на две независимые оси — уровень навыка оружия (экспоненциальная корректировка навыка) и уровень предмета оружия (линейная корректировка оружия) — так что и вложение в навык, и снаряжение вносят вклад в боевую силу.

Важное изменение по сравнению со старыми версиями в том, что скорость ближнего оружия больше не пытается сделать так, чтобы каждый тип оружия имел одинаковый теоретический 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​

Базовый урон за удар получается из нормализованного HP моба (при healthMultiplier=1.0), делённого на целевое число ударов до убийства:

baseDamage = normalizedMobHP / 3.0

Здесь normalizedMobHP = min(2.1875 * 2^(mobLevel / 5), minecraftMaxHealth) (см. раздел Максимальное здоровье пользовательских боссов выше). Константа 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.61.00x3.0
Топор1.01.26x~2.4
Булава0.61.63x~1.8
Мотыга4.00.40x7.5
Трезубец, ближний бой1.11.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 уровней разницы удваивают (или уменьшают вдвое) урон игрока. Это соответствует скорости защитного масштабирования навыка, используемой в уроне босса по игроку, что даёт симметричный бой.

Разница навыкаКорректировка навыкаЭффект
-150.25xЧетверть урона
-7.50.50xПоловина урона
0 (соответствие)1.0xБазовый уровень
+7.52.0xДвойной урон
+154.0xЧетырёхкратный урон

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% за каждый уровень оружия выше моба, ограничено бонусом 0.75. Требует +10 уровней оружия выше моба для достижения лимита.

Сценарий оружияБонусКор. оружияЭффект на удары
Оружие уровня 0 (только эта корректировка)0.000.506 ударов (в 2 раза медленнее)
Оружие на половину уровня0.250.754 удара
Соответствующее оружие (weaponLevel = mobLevel)0.501.003 удара (базовый уровень)
+4 уровня выше моба0.601.10~2.7 удара
+10 уровней выше моба (лимит)0.751.25~2.4 удара

Удары голыми руками также используют навык уровня 1 и множитель скорости атаки без оружия. В таблице показана только корректировка оружия; остальные коэффициенты оставлены как у эталонного меча.

cooldownOrVelocity​

Для ближнего оружия EliteMobs считает игровые тики с предыдущего основного попадания и делит их на окно перезарядки 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 (наступательный)​

Эффекты зелий Strength и Weakness изменяют исходящий урон игрока:

potionMultiplier = 1.0 + strengthBonus - weaknessPenalty

Здесь strengthBonus = (strengthAmplifier + 1) * strengthDamageMultiplier, а weaknessPenalty = (weaknessAmplifier + 1) * weaknessDamageMultiplier. Обе настройки по умолчанию равны 0.2: в формуле EliteMobs Strength I даёт +20% урона, Weakness I — −20%. Это процентная модель EliteMobs, а не точное повторение ванильного расчёта. Равные уровни эффектов компенсируют друг друга. Минимальный множитель равен 0.

Ключи конфигурации в MobCombatSettings.yml:

КлючПо умолчаниюОписание
strengthDamageMultiplierV20.2Бонус к урону за уровень Strength
weaknessDamageMultiplierV20.2Штраф к урону за уровень Weakness

equipmentEnchantmentMultiplier​

Уровни Sharpness и Power на надетых предметах игрока дают процентный бонус к урону. Каждый уровень стоит 2.5%, и оба зачарования учитываются на каждом предмете:

perItemBonus = (Sharpness level + Power level) * 0.025
equipmentEnchantmentMultiplier = 1.0 + sum of perItemBonus across all six slots

Сумма охватывает все шесть слотов (4 предмета брони + основная рука + вторая рука), поэтому Sharpness на щите или на броне тоже вносит вклад. Это отдельный слой от enchantmentMultiplier ниже, который охватывает только зачарования по типам мобов (Smite, Bane of Arthropods).

enchantmentMultiplier​

Зачарования Smite и Bane of Arthropods дают небольшой бонус к урону против соответствующих типов мобов, но только когда useEliteEnchantments отключён в ItemSettings.yml. Когда элитные зачарования включены, этот множитель всегда равен 1.0.

Учитываются только уровни зачарования выше ванильного максимума (только элитные уровни):

enchantmentMultiplier = 1.0 + eliteLevelsAboveVanillaMax * 0.025

Каждый элитный уровень зачарования добавляет 2.5% урона. Например, Smite VIII при ванильном максимуме V даёт 3 элитных уровня: 1.0 + 3 * 0.025 = 1.075. Эта ветка читает текущую основную руку, в том числе при попадании снаряда. Для Bane проверяются Spider/Silverfish, для Smite — Zombie/Skeleton/Wither/SkeletonHorse/ZombieHorse/Zombified Piglin и подтипы этих Java-классов. Полный тег категории мобов Minecraft не используется.

arrowDamageMultiplier​

Стрелы, созданные способностями навыков оружия (такими как Multishot, Arrow Rain и т.д.), несут множитель урона, хранящийся в контейнере данных снаряда. Это позволяет стрелам, сгенерированным навыком, наносить сниженный урон по сравнению со стандартным попаданием стрелы. Для обычных стрел, выпущенных игроком, этот множитель равен 1.0.

Урон от Thorns​

При включённом useEliteEnchantments ветка события урона THORNS использует базовый урон игрока по элитному мобу, а не полную формулу оружия. Учитываются лишь элитные уровни thorns выше ванильного III. Сам этот расчёт не запускает и не гарантирует срабатывание шипов.

eliteThornsLevel = totalThornsLevel - vanillaMaxThornsLevel (per armor piece, summed across all 4 pieces)
thornsDamage = baseDamage * eliteThornsLevel * 0.02

Каждый элитный уровень thorns выше ванильного максимума даёт 2% базового урона. Ванильный Thorns III не даёт элитного урона шипов. Если все 4 элемента брони имеют Thorns V (по 2 элитных уровня), сумма равна 8: baseDamage * 8 * 0.02 = 16% базового урона игрока по элитному мобу за срабатывание.

Стандартный и нормализованный бой используют фактический уровень моба. Масштабированный бой использует текущий уровень навыка оружия игрока и пересчитывает результат на фактический запас HP босса. После этого базового расчёта по-прежнему действуют модификаторы материала босса, боевой множитель и обработка крита.

damageModifier​

Специфичный для босса модификатор урона по типу оружия из файла пользовательского босса (damageModifiers). Это позволяет боссам получать больше или меньше урона от определённых материалов оружия (например, босс, устойчивый к мечам, но уязвимый к топорам). По умолчанию 1.0 для всех типов оружия, не настроенных явно.

Ближняя атака использует материал текущей основной руки. Снаряды используют материал оружия стрелка только тогда, когда он зарегистрирован в данных пользовательского снаряда EliteMobs; иначе применяется стандартное значение. Один сохранённый уровень оружия снаряда не задаёт этот модификатор материала.

combatMultiplier​

Глобальный множитель из MobCombatSettings.yml (scaledDamageToEliteMultiplier, normalizedDamageToEliteMultiplier или damageToEliteMobMultiplierV2 в зависимости от режима боя). По умолчанию 1.0.

critMultiplier​

Критические удары умножают итоговый урон на 1.5x. Шанс крита суммируется по всем шести слотам снаряжения (4 предмета брони + основная рука + вторая рука) из характеристик шанса крита элитного снаряжения игрока, а затем ограничивается:

critChance = min(sum of all six slots, maximumCriticalStrikeChance)

maximumCriticalStrikeChance находится в MobCombatSettings.yml и по умолчанию равен 0.40 (40%). Без этого предела накопление шанса крита по шести слотам может достичь 100%, и тогда каждый удар становится «критическим» — крит перестаёт восприниматься как событие, но по-прежнему выплачивает полный множитель 1.5x. Значения выше 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 вне масштабированного боя. В масштабированном бою он переводит результат в реальный запас здоровья босса, как в разделе Урон (игрок по боссу).
  • Бросок крита тоже фиксируется в момент применения; критический удар умножает результат на 1,5.

В этом пути нет множителей скорости атаки, заряда, размашистого удара или зелий. Затем попадание запускает бонусы навыков Посохи или Жезлы, как описано в разделе Бонусы навыков в конвейере урона. По цели, не являющейся элитой, попадание наносит собственный урон FMM, умноженный на тот же множитель Остроты/Силы.

Ограничение модификаторов​

Наступательная и защитная корректировки навыка используют 2 ^ (levelDifference / 7.5) без ограничения множителя. Старого вспомогательного метода getLevelModifierFromDifference и его границ 0.125/8.0 больше нет. Не применяйте эти пределы к текущим расчётам боя.

HP босса ограничивается описанным выше потолком здоровья. Уровень 100 — мягкий предел XP, не задающий жёсткой границы ни одной корректировке навыка.

Ограничения, которые действительно задают границы вывода, зависящего от навыков, — это предел шанса крита и два потолка защитного снижения, все они описаны в следующем разделе.

Бонусы навыков в конвейере урона​

Всё изложенное выше описывает кривые без бонусов. У реального игрока также есть до трёх активных бонусов навыков на тип оружия, и они накладываются поверх формулы. Если вы балансируете столкновение по одним лишь кривым, вы будете стабильно недооценивать, сколько урона игроки наносят на самом деле.

Частично настраивается

Баланс бонусов задаётся несколькими способами. Файлы 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) снизу половиной настроенного значения; вызывающий код обычно округляет до целых секунд с минимумом в одну секунду. У бонусов с собственными формулами правила могут отличаться. Подробности по каждому приведены в разделе Бонусы навыков.

Где выполняется этот слой (наступательный)​

Обычные наступательные бонусы навыков выполняются во время события 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.2x каждый дают поэтому 1.6x, а не 1.73x, которые дало бы мультипликативное сложение. Это одинаково для каждого типа оружия.

Это изменение по сравнению с прежним поведением, когда для топоров действовало правило «побеждает максимум»: применялся только один наибольший бонус, и любой удар топором, где навык превышал 1.5x, молча полностью отбрасывал критический удар. Работа одного семейства оружия по другому правилу сложения также делала урон топоров невозможным для сравнения со всем остальным.

То же аддитивное объединение охватывает межнавыковые ослабления, считываемые с цели, а не с атакующего: Hunter's Mark, Death Mark, Judgment, Expose Weakness, Hex Brand и Unravel. Готовый Riposte действует отдельно: напрямую умножает урон события, после чего общий аддитивный множитель применяется к этому результату.

Практическое следствие: игрок с тремя удачно подобранными наступательными бонусами реально наносит примерно 1.4x-2x от опубликованной кривой до проков и больше, когда срабатывает способность с перезарядкой. Проектная цель «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 против элитного моба Lv25 с healthMultiplier=2.0 (дальний бой, недостаточный уровень)
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%, что полезно для диагностики конфликтов плагинов или неправильно настроенных файлов боссов.

Его восстановленный результат не является точным измерением окончательно нанесённого урона: он ограничивает урон формулы снизу единицей, не включает последующий множитель навыков и не воспроизводит каждый пересчёт масштабированного боя или изменение обработчиком. Одно расхождение не доказывает конфликт плагинов. При разборе реального боя используйте текущую диагностику и наблюдаемое изменение здоровья.

Прогрессия XP навыков​

Навыки оружия и брони повышаются за счёт получения XP от убийства элитных мобов. Система XP использует кубические требования к уровню для создания плавной прогрессии с мягким лимитом за пределами уровня 100.

XP за убийства: расчёт начинается с mobLevel^2, затем учитывает множители босса, вклад игрока, ограничения уровня наград и бонусы XP. См. Система навыков.

XP до следующего уровня:

Для уровней с 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 он составляет примерно 26x, делая дальнейшую прокачку крайне трудной. Жёсткого максимума на уровне 100 нет. Выше него кубическое требование умножается на показанный квадратичный коэффициент.

Дополнительные боевые механики

Предотвращение убийства с одного удара​

Обычная формула урона босса ограничена фактическим максимумом здоровья минус 1. При активном [Alpha] Advanced Combat System предел равен max(1, actualMaxHealth - 30) - 1: исключается только фиксированная прибавка режима 30 HP. Остальные модификаторы максимального здоровья учитываются. Предел использует максимальное, а не текущее здоровье, поэтому раненый игрок всё ещё может погибнуть от одного удара. Прямой урон может обходить предел, а обработчики событий — менять значение после него.

Блокирование щитом​

Если неснарядный удар достигает этого обработчика, пока игрок блокирует, EliteMobs по умолчанию снижает урон формулы на 80% (blockingDamageReduction в MobCombatSettings.yml). Прямой урон с обходом заменяет это уменьшенное значение. Заблокированный снаряд удаляется, и обработчик выходит до применения формулы, но сама эта ветка не отменяет и не обнуляет событие урона Bukkit. Она не гарантирует защиту от всех снарядов и созданных плагинами ударов.

Каждое обработанное блокирование пытается снять 5 единиц прочности щита; ванильный Unbreaking снижает частоту износа. Щит в основной руке выбирается раньше щита во второй.

Пользовательский урон и поглощение​

Некоторые способности босса передают прямой урон. Он заменяет результат обычной формулы, включая предел одного удара и снижение щитом, до запуска события урона EliteMobs. Защитные обработчики навыков всё ещё могут снизить или отменить его. Пользовательский урон игрока с обходом, в свою очередь, пропускает обычную формулу оружия, модификаторы материала босса и глобального урона, а также срабатывания навыков оружия. Сохранённый крит магического оружия или явно гарантированный крит класса всё ещё может применяться, а собственное попадание посоха или жезла всё равно запускает бонусы своего оружия (см. Урон посохов и жезлов).

После завершения обычного события урона элитного моба по игроку поглощение распределяется по итоговому урону с учётом текущего поглощения игрока. Ванильные модификаторы брони и Resistance очищаются, поскольку формула EliteMobs уже обрабатывает это снижение. Формула игрока по элитному мобу также очищает ванильные снижения, поэтому броня босса на этом пути имеет лишь декоративное значение.

Частые удары ближнего боя​

Отдельный ограничитель автокликера включён по умолчанию. Более 5 основных попаданий ближнего боя по элитам в скользящем окне одной секунды вызывают штраф на этом пути на 5 секунд. Значения задаются autoclickerThrottleMaxHitsPerSecond и autoclickerThrottlePenaltySeconds в MobCombatSettings.yml; переключатель — autoclickerThrottleEnabled. Пустые клики, размашистые удары, снаряды, шипы и пользовательский урон с обходом не учитываются и не проходят эту проверку штрафа. Переподключение не снимает действующий штраф.

Бонус к здоровью от навыка брони​

Игроки получают дополнительное максимальное здоровье от навыка брони. Каждый уровень выше 1 даёт +2 HP (+1 сердце). Этот модификатор атрибута следует описанным выше переключателям skills.yml, исключениям миров и правилам управляемых боевых миров.

Сводка масштабирования по уровням​

Следующая таблица показывает модификаторы уровня до применения пределов здоровья и прочих боевых модификаторов. Соотношения здоровья боссов перестают действовать при достижении любого из двух пределов.

Разница уровнейМодификатор HP боссаМодификатор урона боссаСложность
-10 (игрок выше уровнем)0.25x HP~0.4x уронаТривиально
-5 (игрок выше уровнем)0.5x HP~0.6x уронаОчень легко
0 (тот же уровень)1.0x HP1.0x уронаСбалансировано
+5 (игрок ниже уровнем)2.0x HP~1.6x уронаСложно
+10 (игрок ниже уровнем)4.0x HP~2.5x уронаОчень тяжело

Масштабированный бой

Масштабированный бой симулирует босса на уровне навыка оружия атакующего игрока или навыка брони защищающегося. Это исключает сохранённый уровень босса из обычного масштабирования урона. Снаряжение, семейство оружия, бонусы, способности и модификаторы здоровья по-прежнему меняют бой для разных игроков. Режим полезен для природных элит и выбранных боссов событий; боссу события нужна собственная настройка scaledCombat: true.

Чем масштабированный бой отличается от нормализованного боя​

В EliteMobs есть три режима боя:

РежимИспользуется дляИмеет ли значение уровень?Ключ конфигурации
СтандартныйБазовые мобы без специальных флаговДа — урон и здоровье масштабируются с фактическим уровнем мобаdamageToEliteMobMultiplierV2 / damageToPlayerMultiplierV2
НормализованныйБоссы подземелий и региональные боссы (normalizedCombat: true)Да; те же основные кривые с отдельными множителями конфигурацииnormalizedDamageToEliteMultiplier / normalizedDamageToPlayerMultiplier
МасштабированныйПриродные элиты верхнего мира и боссы событий (scaledCombat: true или глобальная конфигурация)Нет — босс симулируется на уровне игрокаscaledDamageToEliteMultiplier / scaledDamageToPlayerMultiplier

Стандартные и нормализованные атаки используют фактический уровень моба. Их текущая экспоненциальная формула здоровья игнорирует старые настройки normalizedBaselineDamageV3 и normalizedRegionalBossBaselineHealthV3. Масштабированные атаки подставляют уровень навыка игрока; сохранённый уровень остаётся доступным другим системам.

Как это работает​

Урон (босс по игроку)​

Когда босс масштабированного боя наносит урон игроку, формула урона устанавливает уровень босса равным уровню навыка брони игрока:

mobLevel = armorSkillLevel  (instead of the boss's actual level)

Это означает, что корректировка навыка становится 1.0 (поскольку bossLevel - armorSkillLevel = 0), и урон полностью зависит от снаряжения и навыка брони игрока, а не от сохранённого уровня моба. Остальная формула (базовый урон, корректировка снаряжения, зелья и т.д.) работает точно так же, как описано в разделах выше.

Урон (игрок по боссу)​

Когда игрок атакует босса масштабированного боя, формула:

  1. Симулирует босса на уровне навыка оружия игрока — временно рассматривает моба так, как если бы он был того же уровня, что и навык оружия игрока.
  2. Запускает стандартную формулу урона против этого симулированного уровня, давая результат «урон по мобу того же уровня».
  3. Пересчитывает на фактическое HP босса — преобразует урон по формуле из процента от HP симулированного моба в тот же процент от фактического запаса HP босса.
simulatedMobLevel = playerWeaponSkillLevel
formulaDamage = playerToEliteDamageFormula(player, eliteEntity at simulatedMobLevel)
simulatedMobHP = baseHPAtSimulatedLevel * bossHealthMultiplier
damagePercentage = formulaDamage / simulatedMobHP
actualDamage = damagePercentage * actualBossMaxHP

Это исключает сохранённый уровень босса из процентного расчёта. Множители здоровья босса, оружия и навыков, потолки здоровья и округление всё ещё влияют на число ударов. При healthMultiplier: 1.0 ориентир — примерно 3 удара мечом; другие семейства оружия следуют описанному выше множителю скорости атаки.

Добыча и награды​

Расчёт масштабированных наград использует боевой уровень игрока, а не сохранённый уровень моба. Обычная и классовая добыча, XP навыков и бонусные монеты используют этот уровень, затем применяют собственные правила. Фиксированные пользовательские предметы, явно заданные награды, шансы, условия получения и пределы уровней не исчезают автоматически; см. Таблицы добычи и Система навыков.

Отображение уровня​

Сущности масштабированного боя отображают символ вместо числового уровня на своей именной табличке, поскольку их фактический уровень не важен для игрока:

  • Стандартные масштабированные сущности (healthMultiplier 1.0 или меньше): отображают символ меча (по умолчанию: 「⚔」)
  • Высокоопасные масштабированные сущности (healthMultiplier выше 1.0): отображают символ черепа (по умолчанию: ☠)

Эти символы можно настроить в MobCombatSettings.yml через scaledStandardLevelSymbol и scaledHighThreatLevelSymbol.

Включение масштабированного боя​

Для всех природных элит (глобальная конфигурация)​

В MobCombatSettings.yml:

useScaledCombatForNaturalElites: true

Это включено по умолчанию и относится к природным элитам в подходящих мирах, не только в Верхнем мире. В мирах с useDistanceBasedNaturalEliteLevels природные элиты используют фактический уровень даже при включённом переключателе. Боссы подземелий с normalizedCombat не затрагиваются, а пользовательские боссы и боссы событий не наследуют настройку просто потому, что появились под открытым небом.

Для отдельных пользовательских боссов​

В конфигурационном файле пользовательского босса:

scaledCombat: true

Это заставляет конкретного пользовательского босса использовать масштабированный бой независимо от глобальной настройки. Полезно для боссов событий или пользовательских столкновений в верхнем мире, которые должны ощущаться одинаково честными для всех игроков.

Примечание: если у босса normalizedCombat: true (или это региональный/инстансовый босс с включённой глобально нормализацией), нормализованный бой имеет приоритет, и босс не будет использовать масштабированный бой — если только scaledCombat: true не задан явно в файле босса, в этом случае побеждает масштабированный бой.

Ключи конфигурации​

Следующие ключи MobCombatSettings.yml управляют поведением масштабированного боя:

КлючПо умолчаниюОписание
useScaledCombatForNaturalElitestrueВключить масштабированный бой для природных элит, кроме использующих уровни по расстоянию
scaledDamageToEliteMultiplier1.0Глобальный множитель урона игрока по боссам масштабированного боя
scaledDamageToPlayerMultiplier1.0Глобальный множитель урона боссов масштабированного боя по игрокам
scaledStandardLevelSymbol「⚔」Символ, показываемый на именной табличке для стандартных масштабированных сущностей
scaledHighThreatLevelSymbol☠Символ, показываемый для масштабированных сущностей с healthMultiplier выше 1.0
useRecommendedHealthScalingtrueИспользовать экспоненциальное масштабирование здоровья EliteMobs 10 для природных элит (false = унаследованные линейные значения, см. ниже)

Когда использовать каждый режим боя​

  • Нормализованный бой (normalizedCombat: true): для подземелий, инстансов и региональных боссов, где вам нужен точный контроль над сложностью, и у босса фиксированный уровень, которому игроки должны соответствовать.
  • Масштабированный бой (scaledCombat: true или глобальная настройка): для контента, где обычные атаки должны симулировать равные уровни навыков. Снаряжение и способности всё ещё влияют на сложность.
  • Стандартный бой (ни один флаг): для мобов, где сырой уровень должен напрямую определять сложность, например, масштабируемые по расстоянию элиты возле спавна.

Унаследованное масштабирование здоровья (useRecommendedHealthScaling: false)​

Когда useRecommendedHealthScaling установлен в false в MobCombatSettings.yml, природные элитные мобы (не боссы подземелий или региональные боссы) используют упрощённую унаследованную формулу вместо экспоненциального масштабирования:

baseDamage = level * 2
mobHealth = baseDamage * 3 (TARGET_HITS_TO_KILL_MOB)

Здесь level не меньше 1. Формула заменяет здоровье природных элит и базовый урон игрока по ним, но не формулу навыка брони для урона по игроку. Получаются линейные значения, близкие к EliteMobs 9: на некоторых низких уровнях они выше экспоненциальных, а на высоких — значительно ниже. Итоговое здоровье сущности всё ещё учитывает множитель здоровья и серверный потолок. Пользовательские региональные боссы не затрагиваются.

Использование этих данных для подземелий

ПРИМЕЧАНИЕ: ЭТО ПРЕДПОЛАГАЕТ, ЧТО ВЫ ИСПОЛЬЗУЕТЕ ЗНАЧЕНИЯ normalizedCombat! Эти значения были специально созданы для более лёгкого балансирования подземелий.

Часть сложности босса заключается в том, чтобы у него были подходящие здоровье и урон для столкновения. Однако помните, что это лишь часть, и что способности (powers) не менее важны.

Следующее представлено в правильном формате для файла пользовательского босса.

Простая быстрая математика​

С экспоненциальной системой масштабирования healthMultiplier и damageMultiplier напрямую масштабируют базовые значения:

  1. healthMultiplier, равный 1.0, означает, что босса можно убить примерно за 3 удара мечом игроком того же уровня. Другое ближнее оружие варьируется по множителю скорости атаки: оружие с приглушённым всплеском, такое как топоры, булавы и ближние трезубцы, требует меньше ударов, чем мечи, тогда как мотыги требуют больше ударов, потому что сохраняют унаследованный множитель быстрого оружия. Множитель 2.0 удваивает здоровье, 0.5 уменьшает его вдвое и так далее.

  2. damageMultiplier, равный 1.0, означает, что босс убивает правильно экипированного игрока того же уровня примерно за 5 ударов. Более высокие множители делают босса смертоноснее, более низкие множители делают его безопаснее.

Эти оценки числа ударов предполагают подходящие уровни снаряжения и навыков и запас до итогового предела здоровья. healthMultiplier: 2.0 удваивает базовое здоровье лишь пока результат ниже предела; шесть ударов мечом на любом уровне не гарантированы.

Помните, что игроки склонны отдавать приоритет оружию и часто заканчивают с гораздо худшей бронёй, чем оружием. Если вы не проектируете очень специфические типы арен с дальним боем, вам, вероятно, не стоит наносить много урона за удар. Тестируйте свой контент игрой!

Эти числа ударов также не учитывают:

  • Бонусы навыков. Каждое число выше предполагает нулевое количество активных бонусов. Игрок с тремя наступательными бонусами убивает заметно быстрее, а игрок с тремя защитными выживает заметно дольше (вплоть до совокупного потолка в 85%). Считайте эти числа нижней границей силы игрока, а не прогнозом.
  • Здоровье Advanced Combat. Дополнительные 30 HP повышают выживаемость игрока, не увеличивая базовый входящий урон.
  • Потолок максимального здоровья. Выше уровней, перечисленных в разделе Потолок максимального здоровья Minecraft, healthMultiplier вообще перестаёт увеличивать HP. В частности, пресет мирового босса упирается в потолок начиная с уровня 23.

Создание среднего моба подземелья​

С масштабированием normalizedCombat вы можете применить очень минималистичную конфигурацию:

normalizedCombat: true
healthMultiplier: 1.0 #~3 sword hits to slay
damageMultiplier: 1.0 #survives ~5 hits

Оба множителя по умолчанию равны 1.0 и могут быть опущены. Сохраняйте normalizedCombat: true, если босс ещё не нормализован настройкой региона, инстанса или арены.

Создание мусорных пачек (trash packs)​

Мусорные пачки многочисленны, но не очень опасны:

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

Создание мини-боссов​

Мини-боссы должны держать оборону и представлять механический вызов для игроков. Это должно быть испытание мастерства, длящееся некоторое время, но не что-то чрезвычайно смертоносное:

normalizedCombat: true
healthMultiplier: 3.0 #~9 sword hits to slay
damageMultiplier: 1.2 #survives ~4 hits

Создание боссов​

Боссы — это настоящий вызов, завершение нарастания в подземелье и настоящее испытание мастерства, когда на кону всё. Столкновения должны быть долгими, а смерть должна быть постоянной угрозой.

normalizedCombat: true
healthMultiplier: 7.0 #~21 sword hits to slay
damageMultiplier: 1.4 #survives ~3.5 hits

Создание мировых боссов​

Мировые боссы опасны, но прежде всего у них много здоровья, и они призывают много подкреплений / имеют много атак по области. Они предназначены для боя большими группами игроков в течение самого долгого времени, которое должно длиться элитное столкновение. Они не очень смертоносны, но имеют много механик, которые могут сокрушить неподготовленных игроков.

normalizedCombat: true
healthMultiplier: 40.0 #~120 sword hits to slay
damageMultiplier: 1.5 #survives ~3 hits

Это лишь приблизительные рекомендуемые значения, и любые финальные значения следует подгонять под сами столкновения.