Буду плодить "сущности". Сразу отвечу на первый вопрос: потому что дополнительный показатель блокирования от умения Блок щитом диминишингу не подвергается (парадокс, но получается что если Блок щитом увеличит показатель на значение больше капа, например на 4к, то все 4 к прибавятся в урон Мощного удара щитом в полном объеме).
Итак, у нас два кода расчета урона Мощного удара щитом.
DrDamage
self.Calculation["Shield Slam"] = function( calculation, ActiveAuras, Talents )
local dr = 24.5 * calculation.playerLevel --1960 at level 80
local cap = 39.5 * calculation.playerLevel --3160 at level 80
local bv = calculation.blockValue
local bonus = 0
if ActiveAuras["Shield Block"] then
local mult = self.MetaGem_BlockBonus + (Talents["Shield Mastery"] or 0) + (ActiveAuras["Glyph of Blocking"] and 0.1 or 0)
bonus = bv / (2 + mult)
bv = bonus * (1 + mult)
--TODO: Improve this?
if Talents["Shield Mastery"] and bv > dr then
bonus = bonus * (1 + math_min(0.13,(bv - dr) * 0.055))
end
end
if bv > dr then
--At level 80 true bonus is 2072 with 3160 blockvalue. 112 effective block value from 1200 block value.
bv = math_min(cap, bv)
bv = dr + (bv - dr) * (112/1200)
end
calculation.minDam = calculation.minDam + bv + bonus
calculation.maxDam = calculation.maxDam + bv + bonus
calculation.coeff = (bv + bonus) / calculation.blockValue
calculation.coeffv = calculation.blockValue
if self:GetSetAmount("T7 - Prot") >= 2 then
calculation.dmgM_Add = calculation.dmgM_Add + 0.1
end
if self:GetSetAmount( "T10 - Prot" ) >= 2 then
calculation.dmgM_Add = calculation.dmgM_Add + 0.2
end
end
[свернуть]
http://evanskikassaddons.googlecode.com/svn/trunk/addons/DrDamage/Data/Warrior.lua
self.Calculation["Shield Slam"] = function( calculation, ActiveAuras, Talents )
local dr = 24.5 * calculation.playerLevel --1960 at level 80
local cap = 39.5 * calculation.playerLevel --3160 at level 80
local bv = calculation.blockValue
local bonus = 0
if ActiveAuras["Shield Block"] then
local mult = (Talents["Shield Mastery"] or 0) + (self:HasGlyph(58375) and 0.1 or 0) + self.MetaGem_BlockBonus
local bonus = bv / (2 + mult)
bv = bonus * (1 + mult)
end
--TODO: Fix this to 3.3.2 values, for now assuming linear diminishing returns
if bv > dr then
--At level 80 true bonus is 2072 with 3160 blockvalue
bv = math_min(cap, bv)
local c = (bv - dr)/(cap - dr) * (2072/3160)
bv = dr + (bv - dr) * (1 - c)
end
calculation.minDam = calculation.minDam + bv + bonus
calculation.maxDam = calculation.maxDam + bv + bonus
if self:GetSetAmount("T7 - Prot") >= 2 then
calculation.dmgM_Add = calculation.dmgM_Add + 0.1
end
if self:GetSetAmount( "T10 - Prot" ) >= 2 then
calculation.dmgM_Add = calculation.dmgM_Add + 0.2
end
end
[свернуть]
Оба кода почти идентичны. Однако в первом коде есть странная часть
if Talents["Shield Mastery"] and bv > dr then
bonus = bonus * (1 + math_min(0.13,(bv - dr) * 0.055))
end
Как и Zhekich'а наверное, меня интересует откуда она вообще взялась. Это первое наблюдение.
Теперь пройдемся по тому, что дают нам оба кода.
Умение Блок щитом увеличивает базовый показатель блокирования на 100% (т.е. до применения таланта, символа, метакамня) - другими словами, талант, символ и умение аддитивны, и этот дополнительный показатель блокирования не подвергается диминишингу при переводе в урон Мощного удара щитом (т.е. сохраняется коэф. перевода 1). Вместе с тем диминишингу подвергается дополнительный показатель блокирования от таланта, символа или метакамня. На это указывают вот какие строки обоих кодов:
if ActiveAuras["Shield Block"] then
local mult = (Talents["Shield Mastery"] or 0) + (self:HasGlyph(58375) and 0.1 or 0) + self.MetaGem_BlockBonus
local bonus = bv / (2 + mult)
bv = bonus * (1 + mult)
end
В данном алгоритме bonus как раз и есть дополнительный показатель блокирования, полученный от умения Блок щитом. Допустим у нас 3160 базового показателя блокирования. Если наше предположение верно, то итоговый показатель блокирования при наличии таланта, символа и активном умении будет равен 3160*(1+0,3+0,1+1) = 7584. Это значение будет входящим в алгоритм bv.
local mult = 0,3+0,1+0 = 0,4
local bonus = 7584/(2+0,4) = 3160
bv = 3160*(1+0,4)
В дальнейшем этот бонус не подвергается никаким операциям (кроме той, на которую я указал в самом начале) и прибавляется в полном объеме к урону Мощного удара щитом.
calculation.minDam = calculation.minDam + bv + bonus
calculation.maxDam = calculation.maxDam + bv + bonus
А вот оставшаяся часть общего показателя блокирования, в которую входит базовое его значение и полученное от таланта, символа или метакамня - это у нас bv = bonus * (1 + mult), уже подвергается диминишингу. Который в коде как раз и не диминишинг
Всем известно, что диминишинг - это спадающая эффективность прироста показателя. Т..е. каждая следующая его единица дает все меньший прирост итогового показателя. Однако достоверно неизвестно, какова изначальная формула димишинга перевода показателя блокирования в урон Мощного удара щитом, поэтому игроками проводились попытки на основе имеющихся данных построить уравнение регресси (т.е. предположить, какова эта функция на самом деле). В данном случае, для обоих кодов данная функция была предположена как линейная, на что кстати намекает --TODO: Fix this to 3.3.2 values, for now assuming linear diminishing returns в коде. Вот часть кода, которая и содержит эту функцию.
if bv > dr then
--At level 80 true bonus is 2072 with 3160 blockvalue
bv = math_min(cap, bv)
local c = (bv - dr)/(cap - dr) * (2072/3160)
bv = dr + (bv - dr) * (1 - c)
end
Здесь игрокам были известны две определяющие точки функции (показатель блокирования; дополнительный урон Мощного удара щитом): (1960;1960) и (3160;2072). Как заметил Zhekich, функция составлена неточно, поскольку из ее выпадает точка (3160;2072). Скорее всего авторы кода ошиблись в построении этой функции. Как и в следующем - для линейной функции димишинга не существует, каждая единица ее аргумента дает постоянный прирост значения функции.
А вот еще один источник информации.
http://www.tankspot.com/showthread.p...lam-DR-Formula
Автор этой темы верен в одном - если есть диминишинг, значит функция должа быть кривой, а не линейной. Его предположение относительно нее
X * (Block-1960) - Y * (Block-1960)^2
З.Ы. Я могу и ошибатся в аддитивности умения Блок щитом при расчете показателя блокирования. Вполне возможно, что он все таки действительно увеличивает уже имеющися показатель блокирования в два раза (т.е. мультипликативен), но та чать урона Мощного удара щитом, которую он добавляет, согласно обоим кодам будет равна все таки именно базовому показателю блокирования и у нее нет ни диминишнга, ни капа.
Оригинальные профили на форуме - Зороастр и Зоро. Остальные похожие профили являются плагиатом.
Про симкрафт.
файл sc_warrior.cppКод:// warrior_t::composite_block_value ========================================== double warrior_t::composite_block_value() SC_CONST { double bv = player_t::composite_block_value(); if ( talents.shield_mastery ) { bv *= 1.0 + 0.15 * talents.shield_mastery; } if ( buffs_shield_block -> up() ) bv *= 2.0; return bv; }
P.S. Неужели никто тесты до сих пор сделать не может? Я вот не могу - не пускают меня за комп.
Это я в симкрафте видел. Потому и сказал, что могу ошибатся в влиянии умения именно на показатель блокирования. Но в расчете Мощного удара щитом оба кода утверждают - при активном умении берется не добавленный показатель блокирования, а именно его базовая часть.
- - - Updated - - -
Ну и еще момент. Вполне возможно, что под "диминишингом" имеелось ввиду то, что при переходе показателем блокирования точки 1960 единиц каждая следующая его единица начинает давать не 1 ед дополнительного урона для Мощного удара щитом, а 0,093 (112/1200) единиц урона - т.е. как бы меньше, но все равно это не диминишинг. Нечто похожее у влиянии интеллекта на манапул - первые его 20 единиц дают по 1 ед. маны, а все последующие по 15.
Оригинальные профили на форуме - Зороастр и Зоро. Остальные похожие профили являются плагиатом.
У нас ведь есть официальные патчноты. Вот например эта запись гласит:
Что дает нам основание считать что BV для расчета урона, никак не может быть выше чем 34.5 * 80 = 2760Shield Slam: The benefit from additional block value this ability gains is now subject to diminishing returns. Diminishing returns occur once block value exceeds 30 times the player's level and caps the maximum damage benefit from shield block value at 34.5 times the player's level.
Из описания абилки, мы знаем что она увеличивает показатель БВ на 100%.
Из описания таланта мы знаем что он увеличивает показатель БВ на 30%
Из описания глифа мы знаем что он увеличивает показатель БВ на 10%
И согласно доктору они все идут аддитивно, я прав?
Фактический БВ игрока, от статов, увеличивается всем этим. Затем это значение может быть использовано для блокирования урона или для наненесения урона. В случае нанесения урона у нас есть кап, который не позволит использовать больше БВ чем 2760.
Далее, уже идет добавление процентных модификаторов на урон.
А теперь скажи, что дает тебе основание утверждать, что абилка, талант или глиф должны увеличивать значение БВ уже после того как был отмерян кап?
http://s019.radikal.ru/i615/1409/b6/d86a458716f3.gif
Kre4eT такой Kre4eTКстати, учитывая что аддону уже около 6 лет, и ты единственный вбиваешься в крит...
Ты либо гений, либо даун.
там карочи ближе к концу 34к от шилд слема
UmbrellaRain (09.11.2013)