Механика работы Кансела и ему подобных скиллов, включая стил дивинити и баны.
Эти скиллы снимают баффы с цели. С каким шансом какой бафф падает - это мы сейчас и узнаем.
Кансел работает по следующему принципу: он проходит по списку баффов, начиная с конца (разумеется, дебаффы кансел не трогает, делать ему больше нечего) и просчитывает вероятность того, снимется ли бафф или нет. Когда число снятых баффов достигло предела у скилла - то просчет останавливается. Скажем, стил дивинити не может скансельнуть больше 7 баффов, хотя из формулы будет ясно, что шанс установлен в 100% и смысла просчитывать как бы и нету.
Тач оф дез, крашер у ДА, талик на кансел и на бафф-стил - все имеет идентичную природу.
Варриор баны и меджик баны(включая массовые) просчитывают только те баффы, которые имеют abnormal_type, равный соответствующей характеристике. То есть акумен, хаст, эмп, комбик на шилд + майт, скролы, эмп саммону - это все имеет определенный abnormal_type.
Сперва считается предварительный шанс удаления дебаффов
prelim_chance = (2 * dml + cancel_chance_adder + buff_duration / 120) * cancel_res_multiplier
dml - разница magic_level Кансел-подобного скилла и уровнем текущего баффа, для которого введется расчет. Скажем, ТОД +0 - имеет меджик левел, равный 78, меджик бан - 77 и так далее. Это понятно каждому, кто играет в линейку и знает скиллы своего персонажа. Infinity Spear имеет меджик левел, равный 80. Кансел-пвп бонус, скилл пантеры и талик - пока не определено.
cancel_chance_adder - константа.
Cancel - 25
Touch of Death/Insane Crusher - 25
Mage/Warrior Bane - 80
Mass Mage/Warrior Bane - 40
Infinity Spear - 10
Для стилов как-бы это не важно -).
buff_duration - время баффа в секундах. Деление - целочисленное, то есть округляется вниз, как вообще все в линейке (поэтому часто ЛС +0.2 еваги поднимает ее на единичку, ведь у вас было округление не самое удачное). Заточили на время - больше шанс потерять бафф. Точим кисс оф еву? Возможно. Но заточка поднимает и меджик левел баффа, так что в тоже время его шанс его отмены падает - что перевесит, считать вам. На каком уровне скилл прокачали - примерно таков его и меджик левел.
Возрастание уровня скилла от заточки:
Для второпрофных: +1..+3 - 76, +4..+6 - 77, +7..+9 - 78, +10..+12 - 79, +13..+15 - 80, +16..+18 - 81, +19..+21 - 82, +22..+24 - 83, +25..+27 - 84, +28..+30 - 85.
Для третьепрофных: +1..+3 - 81, +4..+6 - 82, +7..+9 - 83, +10..+12 - 84, +13..+15 - 85.
cancel_res_multiplier - резисты. По умолчанию равен 1. Разные скиллы (на них написано) уменьшают вероятность отмены каждого из конкретных баффов.
Arcane Protection: 0.7
Chant of Spirit: 0.7
Zealot: 0.6
И так далее. Бафф снижает шанс отмены положительных эффектов на 30%? Значит, получаем число (1 - 30%/100%) = 0.7. Это для тех, кто уже решил шпилить прямо из детского садика.
Если баффов несколько - то мы просто перемножаем эти числа. Получаем одно число и это и есть cancel_res_multiplier.
Важный момент: если кансел снял бафф-резист от кансела, то бафф-резист по прежнему продолжает действовать на остальные баффы. Так что не важно, куда его бафать - в конец или в начало, если вашей целью стоит максимизировать кансел-резист.
После prelim_chance считаем реальный шанс удаления баффа.
1) Для Cancel и других не бан и не стил скиллов (включая кансел стик):
Если prelim_chance < 25 то real_chance = 25
Если prelim_chance > 75 то real_chance = 75
Если 25 < prelim_chance < 75 то real_chance = prelim_chance
Реальный шанс для Cancel не может быть меньше 25 и больше 75.
2) Для Bane-скиллов:
Если prelim_chance < 40 то real_chance = 40
Если prelim_chance > 95 то real_chance = 95
Если 40 < prelim_chance < 95 то real_chance = prelim_chance