Автор: MySte
Оригинал: тут
Карта: Dota Allstars

Функция DamageTarget
Тот кто видел скрипты из Доты (скажем натыкался на то что я здесь выкладывал), знает, что для нанесения урона используется функция UnitDamageTargetBJ(). Не вдаваясь в подробности, скажу, что в редакторе эта функция проходит под названием
"Боевая единица - Order _1_ to damage _2_ for _3_ using attack type _4_ and damage type _5_".

1 и 2 - юниты, повреждающий и цель соответственно (надо заметить, что данной функции не требуется атака, то есть цель (2) не обязательно должна быть в радиусе атаки (1), у (1) не обязательно должен быть сброшен кулдаун атаки, более того, атакующий юнит (1) может ВООБЩЕ не иметь атаки, но повреждать юнитов...)

3 - количество урона

4 и 5 - тип атаки и тип повреждения. Вот это самые пожалуй важные и загадочные компоненты функции, с которыми я постарался разобраться.

Тип атаки
В коде он описывается как ATTACK_TYPE_х. Этот самый х может принимать значения Обычный, дальний бой, хаос, итд. Наверняка все уже догадались, что это есть типы атак, изображаемые иконками рядом с цифрами повреждений . В эту группу кроме всего входит и ATTACK_TYPE_NORMAL. При этом ATTACK_TYPE определяет только коэффициент (!) на который множится урон, этот самый коэффициент зависит от типа брони (!), но не от ее количества (!). ATTACK_TYPE_NORMAL, который имеют все стандартные заклинания дополнительно может резистится Ability Spell Resistance.

Извинения
Я тут недавно, помнится, говорил, что ATTACK_TYPE_NORMAL - это типа обычный тип атаки (мили, как у гуль и треантов), меня сбило с толку то, что в игровых константах заклининия описаны как spell, мили атака - как normal. У ATTACK_TYPE же NORMAL - это спеллы, а мили - это именно MELEE. Извиняюсь...

Ability Spell Resistance
Естественно, что Ability Spell Resistance НИКАК не стыкуется(в смысле "не складывается", а не "не работает") с обычным коэффициентом на уменьшение урона, поэтому урон после ATTACK_TYPE_NORMAL будет Damage*ArmorCoefficient*(1-Ability Spell Resistance). Кроме того, различные источники Ability Spell Resistance не стыкуются между собой. То есть нет смысла брать 2xPlaneswalker's cloak.

Благословение Элуны
Об этом отдельно. Как известно на этой абилке также есть спелл резист. Однако когда герой одевает шмотку со спелл резистом, начинает действовать ТОЛЬКО резист со шмотки, вне зависимости от того меньше он или больше, чем резист с элуны. Вопрос на засыпку - нафига нам эта элуна? Все просто - Flesh Heap у Pudge 2.0 унаследован от благословения элуны, поэтому на него распространяются элуновские правила стыковки. То есть брать Planeswalker's Cloak - не имеет смысла (там на 1% меньше резист), а собирать аэгис (там 25%, а не 16% от Flesh Heap) - глупо из-за дороговизны. Так что пользуйтесь BKB.

Укрыться за щитом
Как-то вот забыл про эту способность. Ну что же, с утречка пораньше протестировал... И что вы думаете? Правила стыковки - как у Благословления Элуны. То есть резисты с вещей (Planeswalker's Cloak, etc) - делают этому скиллу злобный override, то есть начинают действовать вместо него. Я в ужасе! Кто-нибудь задумывался над тем, в какую задницу он попадал, когда докупал к своим 60% Magic Resist на Spell Shield (а он и унаследован от "Укрыться за щитом") якобы "дополнительно" 15% с Planeswalker's Cloak? На самом деле 60% убирались...

Исходя из исследований двух скилов можно с 90% уверенностью сказать, что Item'ы будут всегда убирать резист от любых скиллов... (Не может не радовать! )

Дотовские коэффициенты
Поскольку всех интересует только дамаг по героям, то выкладываю только по ним:
Chaos: 100%
Melee: 75% (!)
Hero: 100%
Siege: 63%
Pierce: 50%
Normal: 75% (!) [УРОН ОТ СПЕЛЛОВ]
Константы на модификацию спелл-урона не затронуты, значит они оставлены такими как есть. А что значит "такими как есть"? Это значит, такими, как указано в наборе "базовых игровых правил", который близзард меняет в каждом патче. В 1.15 сопротивление сменилось с 75% до 70%, поэтому есть шанс что и в доте оно 70%. Это зависит от того что выставлено в стрчке "набор игровых правил" (обычно там выставлена 1-я версия, то есть с коэффициентом 75%), только вот узнать, что там выставлено для меня проблематично. Поэтому полагаясь исключительно на свои глаза и мозги я протестил, сколько урона наносится прямо в доте. Если меня не плющило, то именно 75%.

Тип повреждения
Вот здесь начинается нечто более запутанное. Открывая список доступных типов повреждения мы обнаруживаем там кучи всего крайне непонятного. (Обычный, улучшеный, огонь, холод, яд, отравления, молния, болезнь, ... ИТД...)

Реально в триггерах Доты используются UNKNOWN, DEMOLITION, NORMAL, SONIC, DIVINE, MAGIC, ENCHANCED, FIRE, MIND, COLD. Все остальное тоже используется, только в рамках стандартных спеллов... Протестировав все повреждения, я пришел к выводу, что несмотря на то, что по идее все они должны чем то различаться, для героев все воздействия одинаковы (!), хотя возможно для зданий/крипов/итп они чем то и различаются. Есть правда одно чрезвычайно важное исключение - DAMAGE_TYPE_NORMAL. Оно дополнительно резистится... (!) ...количеством брони. Вот так...

Глупость (?) кодеров доты, и чем она нам грозит
В связи со всем вышеописанным происходит (не)прикольная ситуация - если в функцию передается ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, то на дамаг влияют и шмотки со Spell Resistance и количество брони. Это уменьшает урон очень сильно, особенно для агильщиков, которые частенько обладают 40%+ снижения урона от брони. Стоит ли считать это балансом? По моему - нет. По-моему - это глупость, хотя кто знает... Примерами таких корявых триггерных спеллов являются (хвала богам, список хорошенько уменьшился):
LVL? Death (дополнительный урон при уровне делящемся нацело)
Purification (урон)
Diabolic Edict
Nether Strike
Баш
Баш относится к DAMAGE_TYPE_NORMAL, а значит резистится количеством брони. Коэффициент рассчитывается из атаки базового юнита/защиты цели (герой->герой = 100%). При этом если атакует не-герой (юнит, неважно с каким типом атаки) - дамаг баша резистится Ability Spell Resistance.

Стрелы
Огненные стрелы работают в точности как дамаг с баша. Они резистятся типом брони и её количеством. Разница с башем в том, что если атакует не-герой, то Ability Spell Resistance не действует.
Темные Стрелы (и наследованный от них Soul Assumption) действуют подобно Огненным Стрелам.
Perdition наносит магический дамаг.
Про Impetus - ниже.

Скиллы с немагическим дамагом
Скилл - герой - тип:
Backstab - SA - Hero
Blink Strike - PA, SA, Chaos Knight - Melee
Counter Helix - Axe - Hero
Omnislash - Juggernaut - Hero
Enrage - Ursa Warrior - Hero
Morph Attack - Morphling (Agile form) – Hero
Scattershot – Dwarven Sniper – Pierce*
Return - Centaur Warchief - Hero
Empowering Haste - Spiritbreaker - Chaos
Вышеперечисленное резистится количеством брони.
Laser - Tinker - Melee
Impetus - Enchantress - Hero
Эти два скилла не резистятся количеством брони.

*Примечание: В связи с исключительными математическими способностями людей из TDA в описании Scattershot написано «14-40 physical damage», на самом деле наносится 14-50, но ATTACK_TYPE_PIERCE (Максимальный конечный урон по герою таким образом, без учета кол-ва брони – 500, при везении.).

Следует также отметить, что несмотря на коэффициент 0,5 (pierce->hero ), Scattershot остается очень эффекивным против крипов (!) из-за коэффициента 1,5 (pierce->unarmored).

При этом Impetus наносит по героям 100% урона, а Laser - 75% (За счет коэффициента melee->hero. То есть вроде бы и резистится как спелл, но вот Ability Spell Resistance на него то не влияет!)

Неменяемое
Double Edge на кастера вообще действует через SetUnitLifeBJ (то есть ничем в принципе изменяться не может), а на цель - обыкновенным магическим дамагом.

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

Через SetUnitLifeBJ действует и Static Field Зевса. Также ничем не меняется.

ВСЕ ОСТАЛЬНОЕ НАНОСИТ ОБЫКНОВЕННЫЙ МАГИЧЕСКИЙ ДАМАГ, ТАК КАК РЕАЛИЗОВАНО ЧЕРЕЗ СТАНДАРТНЫЕ СКИЛЛЫ. ЛИБО ИЗ-ЗА КОРЕКТНОЙ НАСТРОЙКИ ТРИГГЕРОВ.