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

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

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

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

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

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

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

EliteMobs использует экспоненциальную систему масштабирования, где каждые 5 уровней разницы удваивают (или уменьшают вдвое) эффективную силу. Здоровье босса, урон игрока и урон босса масштабируются экспоненциально, чтобы бой ощущался одинаково на любом диапазоне уровней — игрок 10 уровня, сражающийся с боссом 15 уровня, ощущает то же самое, что и игрок 50 уровня, сражающийся с боссом 55 уровня.

Сила игрока складывается из двух источников в соотношении 50/50:

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

У игроков также есть навык брони, который пассивно повышается во время боя (со скоростью в 1/3 от навыков оружия). Уровень навыка брони даёт бонус к максимальному здоровью (+1 сердце за каждый уровень выше 1) и определяет защитное масштабирование игрока против урона босса.

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

EliteMobs 10 вводит систему навыков, где игроки независимо прокачивают каждый тип оружия, используя его в бою. Убийство элитного моба даёт XP навыку оружия, соответствующему держимому оружию, а также навыку брони по сниженной ставке.

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

НавыкОружие
МечиВсе типы мечей
ТопорыВсе типы топоров
ЛукиЛук
АрбалетыАрбалет
ТрезубцыТрезубец
МотыгиВсе типы мотыг
БулавыБулава (1.21+)
КопьяВсе типы копий (1.21.11+)
БроняВсе элементы брони (прокачивается пассивно)

XP навыка от моба равен mobLevel^2, поэтому мобы более высокого уровня дают пропорционально больше XP. Максимальный уровень навыка — 100, после чего мягкий лимит делает дальнейшую прогрессию экспоненциально сложнее.

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

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

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

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

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

Урон босса в 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. [затухание урона взрыва по расстоянию, если применимо]
7. potionMultiplier от эффекта Resistance
8. finalDamage = max(scaledDamage, 1) * potionMultiplier * customBossDamageMultiplier * specialMultiplier * configMultiplier
9. finalDamage = min(finalDamage, actualMaxHealth - 1)

Три слоя:

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

Примечание: урон ограничен значением (фактическое максимальное здоровье игрока - 1) для предотвращения убийств с одного удара. Лимит использует атрибут generic_max_health, который включает все модификаторы (бонус навыка брони, эффекты зелий и т.д.).

playerMaxHealth

Максимальное здоровье игрока определяется уровнем его навыка брони. Базовое здоровье — 20 (10 сердец), и каждый уровень навыка брони выше 1 добавляет 2 HP (1 сердце). У игрока с уровнем навыка брони 50 будет 118 HP (59 сердец).

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

Уровень брони определяется для каждого предмета:

  • Элитные предметы используют свой сохранённый элитный уровень (уровень, для которого предмет был создан).
  • Ванильные предметы используют поиск на основе материала:
МатериалУровень брони
Кожа1
Золото2
Кольчуга3
Железо4
Панцирь черепахи4
Алмаз5
Незерит7

Только 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 (elite item, stored value)
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

Таблица сценариев

В следующей таблице показаны ожидаемые исходы боя в ряде сценариев:

СценарийКор. навыкаСниж. снар.Кор. снар.Удары
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 ударов.
  • Лимит пикового снаряжения в 10 ударов — даже с наилучшим возможным снаряжением (+10 уровней выше моба) игроки всё равно получают ощутимый урон.

potionMultiplier (защитный)

Эффекты зелья 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, когда ни одна способность не активна.

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

Взрывы криперов и другой урон от взрывов (огненные шары гастов) снижается в зависимости от расстояния от центра взрыва. Множитель урона линейно уменьшается с расстоянием от взрыва, делая взрывы менее смертоносными на дистанции.

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

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

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

health = 2.1875 * 2^(bossLevel / 5) * customBossHealthMultiplier

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

Базовая константа (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)

customBossHealthMultiplier

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

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

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

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

Формула урона

Полная формула урона игрока по элитному мобу:

formulaDamage = baseDamage * attackSpeedFactor * skillAdjustment * weaponAdjustment * cooldownOrVelocity * sweepMultiplier * potionMultiplier * enchantmentMultiplier * arrowDamageMultiplier

finalDamage = max(formulaDamage, 1) * damageModifier * combatMultiplier * critMultiplier

Каждый компонент описан ниже.

baseDamage

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

baseDamage = normalizedMobHP / 3.0

Где normalizedMobHP = 2.1875 * 2^(mobLevel / 5) (см. раздел Максимальное здоровье пользовательских боссов выше). Константа 3.0 (TARGET_HITS_TO_KILL_MOB) означает, что соответствующий игрок убивает стандартного элитного моба ровно за 3 удара мечом на любом уровне.

Примечание: healthMultiplier из файла пользовательского босса умножает фактическое HP моба, но НЕ влияет на baseDamage. У босса с healthMultiplier: 2.0 вдвое больше HP, и он требует 6 ударов вместо 3.

attackSpeedFactor

Это слой ритма скорости ближней атаки. Он начинается со старого унаследованного множителя:

legacyFactor = 1.6 / actualAttackSpeed

Эталонная скорость 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

Двухчастная линейная кривая на основе уровня предмета оружия против уровня моба. Это отражает защитную кривую снижения снаряжения из системы защиты снаряжения.

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.000.506 ударов (в 2 раза медленнее)
Оружие на половину уровня0.250.754 удара
Соответствующее оружие (weaponLevel = mobLevel)0.501.003 удара (базовый уровень)
+4 уровня выше моба0.601.10~2.7 удара
+10 уровней выше моба (лимит)0.751.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 (наступательный)

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

potionMultiplier = 1.0 + strengthBonus - weaknessPenalty

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

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

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

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 (бонус 7.5% против нежити).

arrowDamageMultiplier

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

Урон от Thorns

Урон от Thorns использует отдельную формулу на основе базового урона моба, а не стандартную формулу атаки. Учитываются только только элитные уровни thorns (уровни выше ванильного максимума III):

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

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

damageModifier

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

combatMultiplier

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

critMultiplier

Критические удары умножают итоговый урон на 1.5x. Шанс крита определяется характеристиками шанса крита элитного снаряжения игрока.

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

Универсальный модификатор уровня (используемый для масштабирования HP босса и стандартного боя) ограничивается между MIN_MODIFIER = 0.125 и MAX_MODIFIER = 8.0 для предотвращения экстремальных значений при очень большой разнице уровней. Эти лимиты достигаются примерно при разнице уровней +/-15.

Однако наступательные и защитные корректировки навыка, используемые в формулах урона игрок-по-элитному и элитный-по-игроку (calculateOffensiveSkillAdjustment и корректировка навыка в eliteToPlayerDamageFormula), не ограничиваются в текущем коде. На практике уровни навыка ограничены максимальным уровнем навыка (100), что естественным образом ограничивает диапазон этих значений.

Разобранные примеры

Пример 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 включает встроенный инструмент отладки DamageBreakdown, который отслеживает и отображает каждый компонент формулы урона в реальном времени. Когда он включён для игрока, он записывает каждый слой (базовый урон, множитель скорости атаки, корректировку навыка, корректировку оружия, перезарядку, размах, thorns и т.д.) и может выводить:

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

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

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

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

XP за убийства: XP, полученный от моба, равен mobLevel^2. Мобы более высокого уровня дают пропорционально больше XP.

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

Для уровней с 1 по 100:

xpToNextLevel = 8.5 * L^3

Для уровней выше 100 (мягкий лимит):

xpToNextLevel = 8.5 * L^3 * (1 + ((L - 100)^2 / 100))

Множитель мягкого лимита непрерывен на уровне 100 (множитель = 1.0) и растёт квадратично за его пределами. На уровне 150 множитель составляет примерно 26x, что делает дальнейшую прогрессию почти невозможной. Максимальный уровень навыка — 100 для практических целей, хотя система позволяет прогрессию за его пределами по экспоненциально возрастающей стоимости.

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

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

EliteMobs не позволяет боссам мгновенно убивать игроков одним ударом. Независимо от результата расчёта урона, урон ограничен значением (атрибут generic_max_health игрока - 1), гарантируя, что игроки всегда выживают как минимум с 1 единицей здоровья. Лимит использует атрибут generic_max_health, а не текущее HP, поэтому он учитывает все модификаторы максимального здоровья (бонус навыка брони, эффекты зелий и т.д.).

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

Когда игроки блокируют щитом, входящий урон снижается на 80% (настраивается как blockingDamageReduction в MobCombatSettings). Блокирование полностью нейтрализует дальние атаки снарядами (снаряд удаляется).

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

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

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

В следующей таблице обобщается, как разница в уровнях влияет на бой в обоих направлениях:

Разница уровнейМодификатор 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 уронаОчень тяжело

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

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

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

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

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

Ключевое различие: при нормализованном бое босс 50 уровня сложнее, чем босс 10 уровня. При масштабированном бое оба ощущаются как бои с равным уровнем, потому что система делает вид, что босс того уровня, что и игрок.

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

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

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

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)
damagePercentage = formulaDamage / simulatedMobHP
actualDamage = damagePercentage * actualBossMaxHP

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

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

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

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

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

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

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

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

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

В MobCombatSettings.yml:

useScaledCombatForNaturalElites: true

Это включено по умолчанию в EliteMobs 10. Когда включено, все естественно появляющиеся элитные мобы в верхнем мире автоматически используют масштабированный бой. Боссы подземелий, использующие 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)

Это даёт гораздо меньшие числа HP и урона, более близкие к поведению EliteMobs 9. Эта настройка существует для обратной совместимости с серверами, которые построили интеграции вокруг старых боевых чисел EliteMobs. Она не рекомендуется, потому что делает прогрессию игрока более плоской. Эта настройка не влияет на нормализованный бой региональных боссов.

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

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

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

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

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

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

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

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

Поскольку масштабирование экспоненциально, эти относительные оружию числа ударов остаются согласованными независимо от уровня босса — босс 10 уровня с healthMultiplier: 2.0 требует того же относительного мечу числа ударов, что и босс 80 уровня с healthMultiplier: 2.0, при бое с игроком того же уровня.

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

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

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

normalizedCombat: true
healthMultiplier: 1.0 #~3 удара мечом до убийства
damageMultiplier: 1.0 #переживает ~5 ударов

Примечание: поскольку 1.0 — это значение по умолчанию, это означает, что вы также можете просто ничего не определять.

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

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

normalizedCombat: true
healthMultiplier: 0.7 #~2 удара мечом до убийства
damageMultiplier: 0.5 #переживает ~10 ударов

Создание подкреплений

Подкрепления должны умирать очень легко, но представлять опасность по урону (эти значения рекомендованы для 4+ ближних сущностей, фактическое использование может варьироваться):

normalizedCombat: true
healthMultiplier: 0.25 #~1 удар мечом до убийства
damageMultiplier: 0.6 #переживает ~8 ударов

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

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

normalizedCombat: true
healthMultiplier: 3.0 #~10 ударов мечом до убийства
damageMultiplier: 1.2 #переживает ~4 удара

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

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

normalizedCombat: true
healthMultiplier: 7.0 #~23 удара мечом до убийства
damageMultiplier: 1.4 #переживает ~3.5 удара

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

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

normalizedCombat: true
healthMultiplier: 40.0 #~120 ударов мечом до убийства
damageMultiplier: 1.5 #переживает ~3 удара

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