Рекламушка :)

Дело о пропавших рубинах или "красные" против "зеленых".

Итак, загрузившись теорией по самое "не балуйся", а именно:

1. Баги, Близзы, ДПС. К вопросу расчетов урона оружия, далее по тексту "статья-1"

2. Главная формула D3 или как считается общий DPS, далее по тексту "статья-2"

мы переходим к заключительной части трилогии. В целом, задача у нас одна - постараться выяснить, или хотя бы прикинуть, Маркиза какого цвета (из двух, потому что аметистовая и топазовая Маркизы снялись с забега еще в момент регистрации его участников) более уместна в нашей пушке. Или пушках, если их две. Однако, прежде чем переходить к этой основной задаче, нам совершенно необходимо выяснить, что менялось в каждой из ПТР-сборок патча 1.0.7 по отношению к рубинам. Может показаться, что вопрос не стоит выеденного яйца и что все очевидно. Сначала, мол, у Сияющих Звездчатых было по +20 к урону, а потом это дело апнули до +120, дабы разрыв с Маркизой не был совсем уж умопомрачительным. Да, это верно, такой "ап" имел место быть, но! Гораздо интереснее, и важнее, автор вас в этом уверяет, тихий "даун" тех же рубинов, что прошел совершенно незаметно для игроков не интересующихся теор-крафтом D3. Кстати им, чтение статьи текущей противопоказано ровно в той же степени, как и чтение двух предыдущих. В D3 вполне можно "просто взрывать монстров" не заморачиваясь математикой. Если этим гражданам совсем уж невтерпеж, они могут ограничится чтением раздела "Выводы" статьи текущей. Однако, такие игроки пропускают оооочень интересные истории. А подчас и просто детективные. Да, у этих историй нет богатого графического оформления, что, с точки зрения автора, не мешает им быть столь же захватывающими, как и поход на уберов на СМ10. В общем - поехали...

Эволюция рубинов на 1.0.7 PTR-серверах.

Стало быть, как же развивалась эта "полу-детективная" история с рубинами? Для начала вспомним, как вообще вычисляется DPS отдельно взятой пушки (формула и все параметры такого расчета сверхподробно описаны в "статье-1"):

MIN_DAMAGE = (base_min+bonus_min) * (1+%dmg) + bonus_min_color

bonus_min > base_delta? => YES:Max_P=bonus_min+1/NO:Max_P=base_delta

MAX_DAMAGE = (base_min+bonus_delta+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color

Далее, каждый рубин увеличивает минимальный бонус и его дельту, т.е. апает именно физический урон. Но не базу, а бонус. Иными словами любой рубин воздействует на параметры bonus_min/bonus_delta, что однозначно следует из XML/Json data этого самого рубина (кстати - любой камень рассматривается игрой как независимый предмет, и имеет свой собственный набор XML/Json данных). Вот вам, для примера, ссылка на "1.0.6.-топовый" (Сияющий Звездчатый) рубин: http://us.battle.net/api/d3/data/item/ChEIABIHCAQVZvWLXzAJOABAARjM1d_4Cw А вот самое интересное по этой ссылке:

"Damage_Weapon_Bonus_Min#Physical" : {

"min" : 20.0,

"max" : 20.0

}

"Damage_Weapon_Bonus_Delta#Physical" : {

"min" : 20.0,

"max" : 20.0

}

После выхода патча 1.0.7 в релиз все числа 20 будут заменены на 120, но названия параметров останутся без изменений. Как показано в "статье-1", Damage_Weapon_Bonus_Min#Physical - это именно bonus_min, а Damage_Weapon_Bonus_Delta#Physical - это именно bonus_delta. То есть рубин апает два указанных значения и дело с концом.

Обозначим "ап" минимального бонуса уже имеющегося на оружии (bonus_min) приходящего к  нам "от рубина" как Rbm, а тоже самое относящееся к дельте бонуса (bonus_delta) как Rbd. Тогда упомянутые формулы перепишутся таким образом:

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color

bonus_min+Rbm > base_delta? => YES:Max_P=bonus_min+Rbm+1/NO:Max_P=base_delta

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color

Что мы видим и наблюдаем? А наблюдаем мы такой вот финт: если вычисление промежуточного параметра Max_P пойдет по ветке YES, то рубин в определении дамага пушки сыграет роль ТРИЖДЫ, Rbm+Rbm+Rbd. Это потому, что при вычислении "больших белых цифр" (среднее DPS) MIN_DAMAGE приплюсуется к MAX_DAMAGE (и сумма разделится пополам, разумеется). А если вычисление пойдет по ветке NO? А тогда рубин отыграет лишь дважды, как легко это видеть: Rbm+Rbd. Учтем так же, что для абсолютно всех рубинов выполняется равенство Rbm=Rbd, различаются только значения этих параметров. И тогда обозначив Rbm=Rbd=R мы можем утверждать, что "профит" от вставленного рубина:

  • для ветки YES: 3R, а средний "профит"=3R/2=1.5R
  • для ветки NO: 2R, а средний "профит"=2R/2=R

Это было замечено игроками активно юзающими ПТР (здесь и далее имеется в виду тот ПТР, на котором обкатывался патч 1.0.7). Например, комрад KirusAlufras в ветке Ruby bonus need to be fixed справедливо отметил: если вставить новый топ-рубин (Маркиза) в пушку с чисто "черным" дамагом, то средний "ап" будет размером 1.5R=1.5*150=225. А это все потому, что подавляющее большинство таких пушек пойдет в своих расчетах по ветке YES, как отмечалось автором еще в "статье-1". А если пушка "цветная", то тот же "ап" будет просто R, то бишь 150. Справедливо это? Ну, с учетом, что и без всяких рубинов "черные" пушки давят "цветные" именно за счет юзания более выгодной ветки YES, а тут еще на ровном месте бонусный множитель 1.5 к той же ветке - нифига это не справедливо… Но - случилось чудо! Крик рядового геймера был услышан!! Сине-голубые на него ответили (Update on Upcoming Changes to Rubies) и сказали, что аж настолько прониклись словами праведного гнева, что - таки да - поправят код игры(!). И поправили! В очередной тест-сборке патча 1.0.7 формулы были изменены вот на такое:

bonus_min > base_delta? => YES:Max_P=bonus_min+1/NO:Max_P=base_delta

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color

Ферштейн? Параметр Max_P стал вычисляться ДО применения всяких плюшек от рубинов и достигнутый резалт вполне понятен и очевиден: любая пушка вне зависимости от цвета получит средний "ап" от рубина ровно R без всяких этих ваших "умножить на 1.5". Во что это вылилась в цифрах DPS для конкретных пушек? Ну, пушки "цветные", как легко понять, ничего не почувствовали. А вот "черные"… Допустим, была у нас вот такая булава, абсолютно "черная":

  • Damage_Weapon_Min#Physical=base_min=186
  • Damage_Weapon_Delta#Physical=base_delta=158
  • Damage_Weapon_Bonus_Min#Physical=bonus_min=268
  • Damage_Weapon_Bonus_Delta#Physical=bonus_delta=321
  • Damage_Weapon_Percent_Bonus#Physical=dmg%=34%=0.34
  • attacksPerSecond=APS=1.2

И мы пихаем туда пред-топовый (по ранжиру 1.0.7, т.е. Сияющий Звездчатый) рубин, который:

  • Damage_Weapon_Bonus_Min#Physical=Rbm=120
  • Damage_Weapon_Bonus_Delta#Physical=Rbd=120

Тогда на "старой" сборке:

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color = (186+268+120)*1.34+0 = 769.16 ~= 769

bonus_min+Rbm(268+120) > base_delta(158)? => YES:Max_P=bonus_min+Rbm+1 = 268+120+1 = 389

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color = (186+321+120+389)*1.34+0+0 = 1361.44 ~= 1361

И, до кучи, "большие белые цифры", они же средний ДПС:

DPS=(MIN_DAMAGE+MAX_DAMAGE)/2 * APS = (769.16+1361.44)/2 * 1.2 = 1278.36 ~= 1278.4

А на "новой" сборке:

bonus_min(268) > base_delta(158)? => YES:Max_P=bonus_min+1 = 268+1 = 269

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color = (186+268+120)*1.34+0 = 769.16 ~= 769

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color = (186+321+120+269)*1.34+0+0 = 1200.64 ~= 1201

DPS=(MIN_DAMAGE+MAX_DAMAGE)/2 * APS = (769.16+1200.64)/2 * 1.2 = 1181.88 ~= 1181.9

Итого, данная "черная" пушечка лишилась 1278.36-1181.88=96.48 среднего урона. Или вот еще пример, взятый из ветки местного форума Маркиза-рубин VS. Маркиза-изумруд. Один из персонажей игрока MadPumpkin обладает вот таким неплохим одноручным арбалетом "Катастрофой":

Пушка с сокетом, ясное дело. И имеет такие XML/Json данные:

  • Damage_Weapon_Min#Physical=base_min=48
  • Damage_Weapon_Delta#Physical=base_delta=227
  • Damage_Weapon_Bonus_Min#Physical=bonus_min=221
  • Damage_Weapon_Bonus_Delta#Physical=bonus_delta=317
  • Damage_Weapon_Percent_Bonus#Physical=dmg%=46%=0.46
  • attacksPerSecond=APS=1.76

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

--в "старой" сборке:--

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color = (48+221+120)*1.46+0 = 567.94 ~= 568

bonus_min+Rbm(221+120) > base_delta(227)? => YES:Max_P=bonus_min+Rbm+1 = 221+120+1 = 342

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color = (48+317+120+342)*1.46+0+0 = 1207.42 ~= 1207

DPS=(MIN_DAMAGE+MAX_DAMAGE)/2 * APS = (567.94+1207.42)/2 * 1.76 = 1562.3168 ~= 1562.3

--в "новой" сборке:--

bonus_min(221) > base_delta(227)? => NO:Max_P=base_delta=227

MIN_DAMAGE = (base_min+bonus_min+Rbm) * (1+%dmg) + bonus_min_color = (48+221+120)*1.46+0 = 567.94 ~= 568

MAX_DAMAGE = (base_min+bonus_delta+Rbd+Max_P) * (1+%dmg) + bonus_min_color + bonus_delta_color = (48+317+120+227)*1.46+0+0 = 1039.52 ~= 1040

DPS=(MIN_DAMAGE+MAX_DAMAGE)/2 * APS = (567.94+1039.52)/2 * 1.76 = 1414.5648 ~= 1414.6

И эта пушка лишается 1562.3-1414.6=147.7 среднего дамага. Что еще более ощутимо, чем в предыдущей булаве. Впрочем, именно с данной "Катастрофой" случилась именно она - катастрофа. Смена формулы привела расчеты на "рельсы" куда как менее выгодной ветки NO, вместо используемой дотоле ветки YES. Со всеми вытекающими. Насколько справедлива смена формулы уравнивающая в "правах" "черные" и "цветные" пушки (как минимум, с точки зрения "ап-рубина") автор оставляет судить читателю. Что бы ни решил последний, для дальнейших наших рассуждений важен лишь такой факт: жить, в 1.0.7, мы будем по НОВОЙ формуле. Столь прискорбной для "черных" пушек, но, с другой стороны, не позволяющей им уйти в совсем уж космический отрыв от своих незадачливых "цветных" собратьев.

"Зеленые" VS. "Красные".

Разобравшись в эволюциях рубинов переходим ко второй большой теме статьи текущей. Как повествует нам "статья-2", для анализа темы "что выгоднее?", следует переключиться с формулы расчёта DPS отдельной пушки на формулу расчета общего DPS. Последняя приведена и подробнейше разобрана во все той же "статье-2", здесь она просто напоминается для удобства читателя уже без всяких "разжевываний":

Total_DPS = (1 + PA/100) * (1 + CC * CD) * Total_APS * [(WAPD + Gear_AD) * (1+Gear_ED) + WAED] * (1+BD)

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

  • вставить любой (по уровню) изумруд(-ы), заменив имеющиеся там рубин(-ы)
  • вставить любой (по уровню) рубин(-ы), заменив имеющиеся там изумруд(-ы)

Все! Мы точно не меняем ни шмот, ни билд, ни сами пушки - это уж как-нибудь сами… Мы ТОЛЬКО "рокируем" самоцветы. И более того, нас, строго говоря, НЕ интересует точное конечное значение Total_DPS ни в том, ни в другом случае. Нас интересует лишь РАЗНИЦА (дельта) между двумя потенциально возможными Total_DPS. В первую очередь нам интересен знак этой дельты, ибо он однозначно ответит на вопрос "что выгоднее вставить?". Не откажемся мы и узнать значение этой дельты как ответ на вопрос "а насколько конкретно это выгоднее?". Так вот с учетом крайней ограниченности доступных нам в рамках описанной задачи действий, мы можем сделать вывод - множители формулы общего ДПС:

  • (1 + PA/100)
  • Total_APS
  • (1+BD)

никак не могут измениться вследствие "рокировок" самоцветов, а значит, в нашем анализе, мы имеем право переключиться на формулу частичного ДПС (Part_DPS), ибо только последний способен оказать влияние на знак и значение упомянутой дельты:

Part_DPS = (1 + CC * CD) * [(WAPD + Gear_AD) * (1+Gear_ED) + WAED]

При этом параметр WAPD рассчитывается по только что разобранной нами "новой" формуле, которая автоматически учитывает "ап" рубинов. А если у нас система 1H+1H, то мы рассчитываем по той же самой формуле WAPD1/WAPD2 для каждой пушки независимо, и затем WAPD=(WAPD1+WAPD2)/2.

Далее, на какие из оставшихся параметров влияет изумруд, и на какие - рубин? Ну, очевидно, что первый способен воздействовать лишь на CD (Critical Hit Damage %), а второй как раз-таки на WAPD (Weapon Average Physical Damage). Таким образом, обозначив (1 + CC * CD) как просто A, и [(WAPD + Gear_AD) * (1+Gear_ED) + WAED] как просто B мы приходим к совсем уж вырожденному варианту,

Part_DPS = A * B

При этом изумруд способен апать только A, рубин - только B. Если читатель заметит, что переменные CC, Gear_AD, Gear_ED, WAED в рамках нашей задачи являются вовсе и не переменными, а константами (снова, ни один самоцвет не может повлиять на их значения) - то такой читатель будет совершенно прав. Однако - можем ли мы просто выкинуть эти "константо-переменные" из формулы

Part_DPS = (1 + CC * CD) * [(WAPD + Gear_AD) * (1+Gear_ED) + WAED]

дабы упростить ее без вырождения? Увы, нет. Все эти константы оказывают непосредственное влияние на два "главных множителя", A и B. Экстремальный пример: пусть у нашего персонажа шанс крит-удара (CC) равен 0. Читатели "статьи-2" знают, что на практике это исключено по определению, но, на секунду, допустим что это так. Тогда множитель A совершенно точно равен 1 и изумруд просто-напросто "снимается с соревнований" пусть он апает крит-дамаг хоть на 1000%. Так что в вашем конкретном и частном случае вы действительно можете подставить вместо четырех указанных констант их значения и существенно упростить формулу, однако в общем случае такой "финт" не проходит. Итого, не вызывает сомнения тот факт, что существует некая "точка перелома", а именно, такое отношение A/B выше которого становится выгоднее вставлять изумруд, ниже - рубин. Однако вывести общую формулу однозначного нахождения такой точки весьма непросто, если вообще возможно (именно для общего случая). А поэтому практический совет автора будет таким: воспользуйтесь для оценки "профита" от того или иного самоцвета отличным калькулятором http://www.d3rawr.com/d. Вставка изумруда в нем эмулируется выставлением нужного значения в поле "% Crit Damagе" относящегося к оружию в любой руке, а вставка рубина эмулируется отдельной кнопкой, так же имеющейся в слоте любого оружия. Имейте в виду, что если вы импортировали своего персонажа в калькулятор и на пушке/пушках оного уже стоят изумруды, то эмулируя вставку рубинов вам не нужно понижать значение в упомянутом поле "% Crit Damagе" вручную. Что кажется само-собой разумеющимся - ведь подавляющее большинство оружия имеет ровно 1 сокет, не правда ли? Так вот упомянутый калькулятор столь великолепен, что сам распознает наличие изумруда в сокете, "извлекает" его, и лишь после этого "вставляет" на его место рубин. В общем, совсем не зря автор в "статье-2" назвал данный калькулятор идеальным. Для интереса, автор попробовал заменить в "Презрении" своего варвара текущий пред-топовый (теперь уже, т.е. тот что дает 100% крит-урона, а не 110%) изумруд, на топовый (именно Маркиза!) рубин. Результат? Вполне ожидаем: -3.6k к урону. Так что в его персональном случае вопрос "какую из Маркиз ставить" решается сверхочевидно. Но, кстати говоря, отсутствие общей формулы для "точки перелома" не может остановить нас от некоторых умозаключений и выводов.

Выводы.

1. В противостоянии "зеленые" VS. "красные" ни скорость атаки на оружии, ни она же на шмоте не играет никакой роли. Множитель Total_APS начисто отсутствует в формуле для Part_DPS.

2. Мысль о том, что в системе 1H+1H изумруд повышает "общий" крит-урон, а каждый рубин повышает "частный" дамаг не совсем верна. Или даже совсем не верна. Каждый из самоцветов повышает или множитель A, или множитель B в вырожденом варианте формулы Part_DPS, вот и все. Ни один не может повысить и тот, и другой. Так что вот в этом смысле оба самоцвета полностью равнозначны.

3. Снова вырожденная формула,

Part_DPS = A * B

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

Примечание: случаи двух-сокетных Мантикор остаются для разбора энтузиастам этих самых Мантикор.

Возьмем сверх-упрощенный случай, оба множителя могут принимать значения из диапазона 3-5, причем только целые. Изначально A=B=4 и повышение одного множителя автоматически понижает другой. Спрашивается: в какой точке Part_DPS будет максимальна?

  • A=3, B=5 или A=5, B=3 => Part_DPS=15
  • A=4, B=4 => Part_DPS=16

Можно взять более широкий диапазон типа 1-10 и убедиться, что и тут точка максимума будет ровно в середине, A=5, B=5. Вывод? Очень простой: нужно поднимать тот множитель, который у вас "просажен". Т.е. идеальный вариант, когда A и B оба замаксены, но не в ущерб другому множителю. "Презрение" автора блестяще подтвердило этот посыл. На данном топоре, очевидно, и так все нормально с дамагом (множитель B), а значит следует вкладываться в крит-урон (множитель A). Несомненно, что для пушек системы "низкий ДПС" ситуация будет прямо противоположной. Отсюда вытекает правило "большого пальца": чем выше ваш персонаж к топ-персонажам (читай - чем круче у него пушка), тем скорее ему нужен именно изумруд, а не рубин. Это правило будет справедливым не в 100% случаев, но очень часто.

4. Перипетии изложенные в разделе "Эволюция рубинов" текущей статьи лишь усиливает правило предыдущего пункта. Ведь большинство топ-пушек носимых топ-персонажами именно "черные", а не "цветные". И для них уточненная "новая" формула совсем не выгодна.

P.S. Кстати говоря, как выяснилось лишь сегодня, топ-рубины (Маркизы) будут давать прирост урона не 150, а 160. А пред-топ - не 120, а 130. Любопытно, хотя автор на 100% уверен, что столь мизерная добавка никак не повлияет на концепции и общее положение дел, изложенные в данной статье и она остается полностью релевантной по отношению и к релизной версии патча 1.0.7.


Понравился материал? Расскажи о нем!

Чтобы получать "пати бонусы", выставлять рейтинги и комментировать, регистрируйтесь на Horadric.RU!

Комментарии

Аватар пользователя DimonamoN

Суперово! Спасибо большое!!

Аватар пользователя Whatson

Вот теперь хоть какие-то задатки задачи на отыскание экстремумов. Осталось производные выписать для общего выходящего урона по аргументам и смотреть, что больше влияет на него =)

Аватар пользователя ReyMysterio

вот бы еще для мантикоры ) хотя если зеленый больше красного то и в двойном количестве надеюсь так же и остается :D

Аватар пользователя Ажган

Автору огромное спасибо очень, любопытные темы.
Проделанный труд будет еще кучу месяцев приводиться в примеры на разных ресурсах как инфа 100%

Аватар пользователя Зверь77

Ребята, объясните нубу, что такое "черные", а что такое "цветные" пушки?

Аватар пользователя bubb

это пушки без стихийного урона (черные) и, соответственно со стихийным уроном (цветные*)

*яд - зеленый, холод - синеватый, тайная магия - фиолетовый, огонь - желтый и т.д.

Аватар пользователя SamMan
bubb написал(а):
это пушки без стихийного урона (черные) и, соответственно со стихийным уроном (цветные*)

*яд - зеленый, холод - синеватый, тайная магия - фиолетовый, огонь - желтый и т.д.

Абсолютно верно. Кроме того, точно эту самую же информацию можно было бы почерпнуть из первой статьи цикла, где она изложена практически этими же словами. Нужно просто не лениться. ;)

Аватар пользователя POMA316

Прочел вывод и нечего не понял, что лучше втыкать в кровь воина булкатоса, красный или зеленый?
профиль http://eu.battle.net/d3/ru/profile/M0KUJiN-2790/hero/11214689

Аватар пользователя OCEMEHuTEJIb

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