Предисловие
Главной причиной написания данной статьи является желание разобраться в некоторых аспектах боевой механики нашего сервера. Первая часть содержит все теоретические сведения о нюансах melee-PvE, что я сумел найти и счёл заслуживающими внимания. Так как я играю за разбойника и 99% игрового времени провожу в PvE, то все поднимаемые в тексте вопросы, так или иначе, будут рассматриваться с точки зрения рейдового рогалика. Вторая часть посвящена серии экспериментов на тестовом рилме, проведённой для подтверждения (или опровержения - это уж как получится) информации из первой части. Данный материал, возможно, содержит ошибки, сделанные по заблуждению или невнимательности, опечатки и неточности, но картинка, на мой взгляд, более-менее сложилась. Поэтому, если найдёте какую-либо оплошность, то, будьте добры, объясните мне, в чём дело. Мне будет очень интересно.
Часть первая
Attack table Статья "Attack table" на сайте vanilla-wow.wikia.com Пример расчёта по таблице атак в статье "Hit" на сайте vanilla-wow.wikia.com Пример расчёта атаки от разработчка валькирии Attack table - модель процесса определения типа атаки в боевой системе WoW. Необходимо отметить, что это не реальный алгоритм, а именно модель, позволяющая наглядным образом ответить на вопросы о том, например, почему хит не уменьшает шанс доджа противника и отчего зависит crit cap (потолок крита). В упрощённом виде, можно представить, что каждой строчке в таблице, означающей конкретный тип атаки, соответствует диапазон значений от X до Y, где X - верхняя граница диапазона предыдущего значения (или 0, в случае первой строчки), а Y = X + <шанс нанесения типа атаки текущей строки>. При совершении атаки генерируется случайное число от 1 до 100 и последовательно проверяется на вхождение в диапазон каждой из строк. Если число входит в диапазон текущего типа атаки, то проверка завершается и происходит нанесение атаки данного типа. Пример (числа произвольные): При нанесении атаки сгенерировалось число 75. Miss (9%): 1 - 9 Dodge (6%): 10 - 15 Parry (5%): 16 - 20 Glancing blow (40%): 22 - 61 Block* (5%): 62 - 66 Critical hit (20%): 67 - 86 Normal hit: 87 - 100 (на долю обычного удара остаётся 14%) Число 75 входит в диапазон 67 - 86. Наносится крит. * В случае жёлтых атак, при блоке совершается ещё один ролл, по итогам которого наносится заблокированный удар или заблокированный критический удар (экспериментальные данные отсутствуют) Порядок следования типов атак в таблице важен тем, что атаки, диапазоны значений которых начинаются со 101 и выше, никогда не наносятся. В такую ситуацию может попасть обычный удар, если суммарная вероятность промаха, уклонения, паррирования, скользящего удара, блока и критического удара превысит 100%. Glancing Blow (скользящий удар, он же "глансинг") В случае, если игрок атакует моба, уровень которого не уступает уровню игрока, наносимый удар может стать "скользящим". Скользящие удары:
[*]Наносят урон, уменьшенный пропорционально разнице между уровнем навыка защиты моба и уровнем навыка владения оружием (weapon skill) игрока.
[*]Не могут быть критическими
[*]Возникают только при т.н. "белой атаке"
[*]Не возникают в бою против игроков
Шанс нанесения скользящего удара равен 10 + 2 * <разница между рейтингом атаки игрока и уровнем навыка защиты моба>. Рейтинг атаки игрока равен его текущему уровню навыка владения оружием, но не может превышать 5 * <уровень игрока>. Например, если у игрока в руках кинжал и текущий уровень его навыка владения кинжалами составляет 310 за счёт таланта и бонуса экипированных перчаток из мк, то рейтинг атаки равен 300. Если текущий уровень владения кинжалами составляет 234, то рейтинг атаки равен 234. Базовый уровень навыка защиты моба равен 5 * <уровень моба> (вероятно, некоторые мобы могут иметь навык защиты, уровень которого не соответствует данной формуле). В бою против босса (63 уровень) у игрока 60 уровня с полностью прокачанным навыком владения оружием скользящий удар возникает с шансом в 40%. Штраф к урону скользящих ударов вычисляется по формуле (<разница между уровнем навыка защиты моба и уровнем навыка владения оружия игрока> - 5) * 3. Таким образом, в бою против босса, при уровне навыка владения оружием 300 скользящие удары будут наносить на 30% меньше урона (на практике штраф чуть больше), при уровне навыка владения оружием 305 - на 15% меньше, а при уровне 310 штраф к урону скользящих ударов исчезнет (на практике, при уровне в 310 и выше, штраф не исчезает полностью, а снижаётся до ~7%). См. также: Исследование Intrigan'а (Bumbarush, Orc Warrior) Hit Бонусы к hit chance (вероятность попадания) уменьшают вероятность промаха (miss) в бою, и не влияют на вероятность возникновения таких боевых событий, как dodge (уклонение) и parry (паррирование). Вероятность промаха белой атакой в PvE вычисляется следующим образом: - Если разница между уровнем навыка защиты моба и уровнем навыка владения оружием игрока меньше или равна десяти, то
[*]для одного оружия: 5 + (<уровень навыка защиты моба> - <уровень навыка владения оружием игрока>) * 0.1
[*]для двух оружий: 24 + (<уровень навыка защиты моба> - <уровень навыка владения оружием игрока>) * 0.1
- Если разница между уровнем навыка защиты моба и уровнем навыка владения оружием игрока больше десяти, то
[*]для одного оружия: 7 + (<уровень навыка защиты моба> - <уровень навыка владения оружием игрока> - 10) * 0.4
[*]для двух оружий: 26 + (<уровень навыка защиты моба> - <уровень навыка владения оружием игрока> - 10) * 0.4
Подставляя в эти формулы значения уровней навыков защиты и владения оружием, можно получить следующую таблицу: Касательно "жёлтых атак" (специальных ударов) не получилось найти сколько-либо подробной и достоверной информации. По некоторым сведениям, вероятность промаха жёлтой атакой в бою всегда составляет 8% (не удалось добыть нормальных экспериментальных данных относительно этого). Dodge В случае, если уровень навыка владения оружием игрока уступает или равен уровню навыка защиты моба, базовый шанс уклонения (dodge) моба определяется формулой 5% + (<уровень навыка защиты моба> - <уровень навыка владения оружием игрока>) * 0.1%. Вероятно, некоторые мобы могут иметь бонусы к доджу. Для игрока с уровнем навыка владения оружием 300 вероятность того, что босс уклонится от его атаки составит: 5 + (315 - 300) * 0.1 = 6.5% Соответственно, для атаки с уровнем навыка 305 вероятность уклонения будет равна 6%, для уровня 310 - 5.5%, а для уровня 315 - 5%. Иначе, если уровень навыка владения оружием игрока превышает уровень навыка защиты моба, то базовый шанс уклонения моба вычисляется по формуле 5% - (<уровень навыка владения оружием игрока> - <уровень навыка защиты моба>) * 0.04%. Для игрока с уровнем навыка владения оружием 321 вероятность того, что босс уклонится от его атаки составит: 5 - (321 - 315) * 0.1 = 4.76%. Weapon skill В случае, если навык владения оружием игрока превышает навык защиты противника, то за каждый пункт в разнице между уровнями навыков:
[*]шанс промаха игрока уменьшается на 0.04%
[*]шанс нанесения крита игроком увеличивается на 0.04%
[*]шанс парирования атаки противником уменьшается на 0.04%
[*]шанс противника на уклонение от атаки игрока уменьшается на 0.04%
Справедливо в бою против мобов и в world PvP, но не работает на БГ. Crit Критическим называют удар, наносящий удвоенный урон (бонус может увеличиваться различными талантами). Вероятность нанесения критического удара определяется ловкостью персонажа, бонусами вещей, талантами и т.д. Воссозданную формулу вычисления шанса критического удара можно посмотреть здесь: Melee crit chance Согласно сообщению Community Manager'а от 2005 года на форуме wow-europe, шанс крита основывается не только на нанесённых ударах, но и включает в себя промахи. Из этого факта выводится такое понятие, как crit cap. Crit cap (потолок крита) Вкратце, потолок шанса крита белой атаки вычисляется по формуле: crit cap = 100 - miss - dodge - parry - glancing - block (если удары наносятся со спины, parry и block нужно исключить) Представим ситуацию, когда игрок, не имеющий никаких бонусов к хиту, но собравший 35% крита от вещей и талантов, бьёт босса со спины двумя оружиями белой атакой: Miss: 28% Dodge: 6% Parry: 0% Glancing blow: 40% Block: 0% Critical hit: 26% Normal hit: 0% crit cap = 100 - 28 - 6 - 40 = 26. Потолок крита (и фактический шанс крита) в данном случае составляет 26%, несмотря на собранный бонус в 35% от вещей и талантов (лишние 9% крита собраны зря). Для жёлтой атаки необходимо исключить из таблицы атак Glancing blow, что, по большому счёту, закрывает тему потолка крита для жёлтых атак. Развивая ситуацию, представим, что тот же воображаемый игрок сменил экипировку, и теперь у него 5% хита и 30% крита: Miss: 23% Dodge: 6% Parry: 0% Glancing blow: 40% Block: 0% Critical hit: 30% Normal hit: 1% crit cap = 100 - 23 - 6 - 40 = 31. 30% всех атак будут критическими, и ещё 1% останется для нормальных ударов (не криты и не глансинги). Потолок крита в данном случае составляет 31%, и игрок может его достигнуть, раздобыв ещё 1% крита благодаря экипировке / точилу / талантам и т.д. Этот пример показывает, как увеличение хита на 5% дало ещё и увеличение на 5% реального шанса крита. Фактически, потолок крита - величина изменчивая, зависящая от многих факторов, среди которых позиция игрока относительно моба, характеристики моба (парирование, уклонение), уровень навыка защиты моба и уровень навыка владения оружием игрока (от которых зависит вероятнось промаха, доджа и т.д.).
Часть вторая
Чтобы проверить на практике собранные выше сведения о теории, я провёл на тестовом рилме серию опытов, в которых в качестве цели использовался дракон Anachronos, обитающий возле Пещер Времени в Танарисе. Босс, танкуемый специально обученным друидом, атаковался орком-разбойником в спину в течение нескольких продолжительных сеансов с различными наборами экипировки и талантов. Сбор данных осуществлялся с помощью двух аддонов: CombatStats и GlancingMeter. Общее количество атак, количество промахов, уклонений и их доли в общем количестве атак брались из отчёта CombatStats; количество обычных, скользящих и критических ударов бралось из отчёта GlancingMeter, а их доли вычислялись от общего количества атак, показанного аддоном CombatStats. Причина такого "разделения труда" заключается в том, что аддоны предназначены для выполнения разных задач и их функционал соответственно различается: - CombatStats не отслеживает глансинги (и, возможно, поэтому некорректно отображает количество критических ударов) - GlancingMeter не отслеживает уклонения и показывает доли обычных, скользящих и критических ударов без учёта сдодженных ударов По идее, для анализа подобных данных существуют специальные методики, позволяющие учесть влияние Случая, но, к сожалению, ими я не владею. Расхождение фактического шанса с теоретическим в 1-2% (числа взяты с потолка) представляется мне вполне допустимым, и я буду округлять значения, в большинстве случаев, до десятых. В основном, потому что так удобнее считать, но также и потому, что б`ольшая точность, думаю, здесь не нужна. Вообще, случайные числа - вещь коварная. Если долго подбрасывать монету, то когда-нибудь она упадёт орлом верх десять раз подряд. daggers 300 (0% hit, ~40% crit)
[*]атак: 2513
[*]промахов: 708 (28.2%) (в теории 28)
[*]уклонений: 153 (6.1%) (в теории 6.5)
[*]
[*]обычных ударов: 0
[*]скользящих ударов: 1002 (39.9%) (в теории 40)
[*]критических ударов: 650 (25.8%) (100 - 28.2 - 6.1 - 39.9 = 25.8)
daggers 305 (0 hit, ~40% crit)
[*]атак: 1640
[*]промахов: 388 (23.7%) (в теории 25)
[*]уклонений: 91 (5.5%) (в теории 6)
[*]
[*]обычных ударов: 0
[*]скользящих ударов: 623 (38.0%) (в теории 40)
[*]критических ударов: 538 (32.8%) (100 - 23.7 - 5.5 - 38.0 = 32.8)
daggers 310 (0 hit, ~40% crit)
[*]атак: 2731
[*]промахов: 657 (24.1%) (в теории 24.5)
[*]уклонений: 129 (4.7%) (в теории 5.5)
[*]
[*]обычных ударов: 0
[*]скользящих ударов: 1138 (41.6%) (в теории 40)
[*]критических ударов: 807 (29.5%) (100 - 24.1 - 4.7 - 41.6 = 29.6)
swords 309 (22 hit, 33.3 crit)
[*]атак: 1550
[*]промахов: 48 (3.1%) (в теории 24.6 - 22 = 2.6)
[*]уклонений: 74 (4.8%) (в теории 5.6)
[*]
[*]обычных ударов: 312 (20.1%)
[*]скользящих ударов: 600 (38.7) (в теории 40)
[*]критических ударов: 516 (33.3%)
[*]
[*]потолок крита: 100 - 3.1 - 4.8 - 38.7 = 53.4
[*]фактический шанс крита: 53.4 - 20.1 = 33.3, всё сходится
[*]
[*]штраф к урону скользящего удара: 11.3% (в теории 3)
daggers 300 (19 hit)
[*]атак: 2343
[*]промахов: 218 (9.3%) (в теории 28 - 19 = 9)
[*]уклонений: 119 (5.1%) (в теории 6.5)
[*]
[*]обычных ударов: 461 (19.8%)
[*]скользящих ударов: 943 (40.2%) (в теории 40)
[*]критических ударов: 602 (25.7%) (100 - 9.3 - 5.1 - 19.8 - 40.2 = 25.6)
[*]
[*]штраф к урону скользящего удара: 37.4% (в теории 30)
daggers 305 (19 hit)
[*]атак: 3091
[*]промахов: 190 (6.1%) (в теории 25 - 19 = 6)
[*]уклонений: 158 (5.1%) (в теории 6)
[*]
[*]обычных ударов: 695 (22.5%)
[*]скользящих ударов: 1263 (40.9%) (в теории 40)
[*]критических ударов: 785 (25.4%) (100 - 6.1 - 5.1 - 22.5 - 40.9 = 25.4)
[*]
[*]штраф к урону скользящего удара: 16.6% (в теории 15)
daggers 310 (19 hit)
[*]атак: 1142
[*]промахов: 66 (5.8%) (в теории 24.5 - 19 = 5.5)
[*]уклонений: 63 (5.5%) (в теории 5.5)
[*]
[*]обычных ударов: 246 (21.5%)
[*]скользящих ударов: 465 (40.7%) (в теории 40)
[*]критических ударов: 302 (26.4%) (100 - 5.8 - 5.5 - 21.5 - 40.7 = 26.5)
[*]
[*]штраф к урону скользящего удара: 7.7% (в теории 0)
daggers 316 (19 hit)
[*]атак: 1202
[*]промахов: 61 (5.1%) (в теории 24 - 0.04 - 19 = 4.96)
[*]уклонений: 66 (5.5%) (в теории 4.9)
[*]
[*]обычных ударов: 302 (25.1%)
[*]скользящих ударов: 480 (39.9%) (в теории 40)
[*]критических ударов: 293 (24.4%) (100 - 5.1 - 5.5 - 25.1 - 39.9 = 24.4)
[*]
[*]штраф к урону скользящего удара: 4.7% (в теории 0)
daggers 321 (18 hit)
[*]атак: 1114
[*]промахов: 64 (5.7%) (в теории 24 - 0.04 * 6 - 18 = 5.76)
[*]уклонений: 50 (4.5%) (в теории 4.76)
[*]
[*]обычных ударов: 302 (25.1%)
[*]скользящих ударов: 480 (39.9%) (в теории 40)
[*]критических ударов: 293 (24.4%) (100 - 5.1 - 5.5 - 25.1 - 39.9 = 24.4)
[*]
[*]штраф к урону скользящего удара: 7.4% (в теории 0)
daggers 327 (18 hit)
[*]атак: 1240
[*]промахов: 60 (4.8%) (в теории 24 - 0.04 * 6 - 18 = 5.52)
[*]уклонений: 43 (3.5%) (в теории 3.8)
[*]
[*]обычных ударов: 313 (25.2%)
[*]скользящих ударов: 501 (40.4%) (в теории 40)
[*]критических ударов: 323 (26.04%) (100 - 4.8 - 3.5 - 25.2 - 40.4 = 26.1)
[*]
[*]штраф к урону скользящего удара: 7.2% (в теории 0)
daggers 305 (28 hit)
[*]атак: 1058
[*]промахов: 0 (0.0%) (в теории базовый шанс промаха 25, и 28 хита полностью перекрывают его)
[*]уклонений: 57 (5.4%) (в теории 6)
[*]
[*]обычных ударов: 317 (30.0%)
[*]скользящих ударов: 417 (39.4%) (в теории 40)
[*]критических ударов: 267 (25.2%) (100 - 5.4 - 30.0 - 39.4 = 25.2)
[*]
[*]штраф к урону скользящего удара: 15.2% (в теории 15)
daggers 305 (25 hit)
[*]атак: 1062
[*]промахов: 0 (0.0%) (в теории 25 - 25 = 0)
[*]уклонений: 60 (5.6%) (в теории 6)
[*]
[*]обычных ударов: 327 (30.8%)
[*]скользящих ударов: 428 (40.3%) (в теории 40)
[*]критических ударов: 247 (23.4%) (100 - 5.6 - 30.8 - 40.3 = 23.3)
[*]
[*]штраф к урону скользящего удара: 15.4% (в теории 15)
daggers 305 (24 hit)
[*]атак: 423 (во время опыта количество хп Анахроноса дошло до 20% и он с бранью исчез)
[*]промахов: 2 (0.5%) (в теории 25 - 24 = 1)
[*]уклонений: 26 (6.1%) (в теории 6)
[*]
[*]обычных ударов: 141 (33.3%)
[*]скользящих ударов: 161 (38.06%) (в теории 40)
[*]критических ударов: 93 (21.98%) (100 - 0.5 - 6.1 - 33.3 - 38.06 = 22.04)
[*]
[*]штраф к урону скользящего удара: 14.4% (в теории 15)
daggers 310 (24 hit)
[*]атак: 1136
[*]промахов: 4 (0.4%) (в теории 24.5 - 24 = 0.5)
[*]уклонений: 59 (5.2%) (в теории 5.5)
[*]
[*]обычных ударов: 354 (31.2%)
[*]скользящих ударов: 457 (40.2%) (в теории 40)
[*]критических ударов: 262 (23.1%) (100 - 0.4 - 5.2 - 31.2 - 40.2 = 23)
[*]
[*]штраф к урону скользящего удара: 7.8% (в теории 0)
swords 309 (24 hit)
[*]атак: 1211
[*]промахов: 5 (0.4%) (в теории 24.6 - 24 = 0.6)
[*]уклонений: 58 (4.8%) (в теории 5.6)
[*]
[*]обычных ударов: 406 (33.5%)
[*]скользящих ударов: 475 (39.2%) (в теории 40)
[*]критических ударов: 261 (21.6%) (100 - 0.4 - 4.8 - 33.5 - 39.2 = 22.1)
[*]
[*]штраф к урону скользящего удара: 4.6% (в теории 3)
maces 300 (19 hit)
[*]атак: 1213
[*]промахов: 107 (8.8%) (в теории 28 - 19 = 9)
[*]уклонений: 59 (4.9%) (в теории 6.5)
[*]
[*]обычных ударов: 225 (18.5%)
[*]скользящих ударов: 488 (40.2%) (в теории 40)
[*]критических ударов: 334 (27.5%) (100 - 8.8 - 4.9 - 18.5 - 40.2 = 27.6)
[*]
[*]штраф к урону скользящего удара: 37.5% (в теории 30)
maces 305 (19 hit)
[*]атак: 1153
[*]промахов: 72 (6.2%) (в теории 25 - 19 = 6)
[*]уклонений: 71 (6.2%) (в теории 6)
[*]
[*]обычных ударов: 258 (22.4%)
[*]скользящих ударов: 431 (37.4%) (в теории 40)
[*]критических ударов: 321 (27.8%) (100 - 6.2 - 6.2 - 22.4 - 37.4 = 27.8)
[*]
[*]штраф к урону скользящего удара: 15.4% (в теории 15)
maces 309 (19 hit)
[*]атак: 1155
[*]промахов: 66 (5.7%) (в теории 24.6 - 19 = 5.6)
[*]уклонений: 55 (4.8%) (в теории 5.6)
[*]
[*]обычных ударов: 273 (23.6%)
[*]скользящих ударов: 466 (40.3%) (в теории 40)
[*]критических ударов: 295 (25.5%) (100 - 5.7 - 4.8 - 23.6 - 40.3 = 25.6)
[*]
[*]штраф к урону скользящего удара: 7.7% (в теории 3)
Жёлтые атаки К сожалению, CombatStats отказался считать промахи жёлтыми атаками. В случае хемо я видел в кобмат-логе около 10 промахов, а в случае бакстаба - ни одного, но какие-либо выводы без автоматизации сбора статистики сделать трудно. Так что вопрос о механике хита жёлтых атак для меня остаётся открытым. Предварительные итоги В ходе экспериментов было нанесено около 27000 белых атак за 18 боёв, в среднем по 1500 атак за сеанс. В целом, по сложившемуся впечатлению, ситуация примерно соответствует характеристике, данной разработчиком:
Некоторые соображения:
[*]Фактический шанс доджа странно колеблется, иногда заметно отличаясь от ожидаемого. Возможно, я руководствовался ошибочной формулой.
[*]Интересная ситуация сложилась со скользящими ударами. В случае, когда уровень навыка владения оружием игрока составляет 305, в бою против босса к урону скользящих ударов применяется ожидаемый в соответствии с теорией штраф в 15%. Но в иных случаях, когда уровень навыка владения оружием игрока составляет 300 или 310 и выше, фактический штраф к урону скользящих ударов в среднем на 7% превышает ожидаемый. Возможно, более подробные серии экспериментов (с уровнем навывка в 301, 302, 303, 304 и т.д.) помогут установить зависимость величины расхождения от уровня навыка (если, конечно, это кому-нибудь интересно).
Ссылки на использованные материалы:
[*]https://elysium-project.org/forum/?showtopic=14735#entry125068
[*]https://elysium-project.org/forum/?showtopic=9476&p=156144
[*]https://elysium-project.org/forum/index.php?showtopic=19108
[*]http://vanilla-wow.wikia.com/wiki/Attack_table
[*]http://vanilla-wow.wikia.com/wiki/Glancing_blow
[*]http://vanilla-wow.wikia.com/wiki/Hit
[*]http://www.vranx.com/forums/index.php?topic=5802.0
[*]http://www.wowwiki.com/Critical_strike
[*]http://www.wowwiki.com/Weapon_skill
[*]http://www.wow-one.com/forum/topic/37741-hit-vs-crit-the-holy-book-for-pve-rogues/
[*]http://www.wow-one.com/forum/topic/66284-rogue-pve-guide-by-oto-friends/
[*]http://vanilla-wow.wikia.com/wiki/Block
Изменения
[*]30.03.2015 - к сообщению о повторном ролле при блоке добавлен комментарий о применимости только к жёлтым ударам; в формулу вычисления потолка крита белой атаки добавлен блок