Можно ли захватить или внести в переменную минимальный и/или максимальный текущий урон от простой атаки юнита, включая бонусы? Средний урон с бонусами тоже подойдет.
DamageTaken не подходит, так как он захватывает урон после модификаторов типа и количества брони, а также хватает любой урон юнитом (огненный плащ и т.д.).
Текущий вариант от мейнстата+базовый, но он не включает бонусы на чисто урон, типа аур, когтей и т.д.

бд
иначе никак

added by Clamp: пример базы данных по броне, по урону логика абсолютно такая же, только надо ещё основную характеристику учитывать (она тоже в базе данных хранится).
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
бд
иначе никак

added by Clamp: пример базы данных по броне, по урону логика абсолютно такая же, только надо ещё основную характеристику учитывать (она тоже в базе данных хранится).
Принятый ответ
11
И отследить, чем юнит наносит урон (атака, предмет, спелл, если он не прописан триггерно) тоже нельзя?(
28
Impertus, можно определить урон нанесённый атакой но тогда перестанут работать орбы
придётся писать их триггерную замену
11
С помощью какой строки? И не переводить ли весь урон атак на триггерную основу?
(Можно из DamageTaken + Attacking unit мб?)
28
Impertus, с помощью нескольких строк
создаём в ро способность на основе отравляющей атаки/сферы льда/любого другого орба с бафом со временем действия 0,01 сек
пихаем её в спелбук
запрещаем этот спелбук и даём его всем юнитам
если при получении урона на юните есть баф нашего орба значит урон нанесён рукой
иначе не рукой
11
А, не, не критично.
Хотел сделать триггерные криты, а откуда цифири базового дамага для них брать - хз. Будет значит рандом между мин.дмг+стат и макс.дмг+стат * множитель.
А по дамагтайпу не отследить? У обычной атаки вроде тип Физ-обычный, у других такого нет вроде.
28
Impertus, а как ты дамагтайп узнаешь?
Хотел сделать триггерные криты, а откуда цифири базового дамага для них брать - хз
зачем базовый?
цифры у крита идут с учётом резиста брони и прочего
то есть просто урон выводи
GetEventDamage()
в статьях даже пример на гуи есть вроде
11
Делал с DamageTaken*X, только при таком расчете крит сильно занижается.
Допустим, крит х3, дамаг 100. У цели снижение получаемого урона на 50%. Т.е. крит будет считаться от 50 дмг = 150 дамага всего будет наноситься триггерно, а получать - 150*0.5=75 урона всего. Вместо (100*3)/50=150. И цифирь крита будет отображаться не 300!, а 150!. Хотя базовые криты отображаются как раз в виде 300!.
28
if GetUnitAbilityLevel(dc,'B00P') > 0 and IsCritTarget(t,dc) and Dm > 0. and GetRandomInt(1,100) <= 50 and cl == false and (GetUnitAbilityLevel(t,'A086') > 0 or GetUnitTypeId(s) == 'h00B') then
call Crit(dc,Dm*1.8) texttag
call UnitDamageTarget(udg_NDCD[q+1],t,Dm*.8,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_DEMOLITION,WEAPON_TYPE_WHOKNOWS)
endif
ну вот допустим это 1.8-х крит из моей карты. Думаю тут ясно, что где
11
Суть критов была каждый 5й удар 100% крит.
Делал через AttackingUnit, но там настроить убирание спелбука с критом тяжело, так как для юнита с долгим замахом (тот же блейдмастер, у него от события Attacking до нанесения урона 1.15 сек) спелбук убирается до собственно нанесения урона и крита нет. Ставить вейты можно, но ненужно+влияет скорость атаки, будет успевать сделать по 2 крита при статичном вейте.
16GB:
ну вот допустим это 1.8-х крит из моей карты. Думаю тут ясно, что где
А Dm чему равен? Вне куска кода, сама суть вопроса)
28
Impertus,
ну это урон отловленный
Я не скидывал всё потому что там 100500 проверок разных, например урон нанесён с руки , урон нанесём не даммиком для критического удара и т .д
11
И чистый урон, у самого так сделано, но не нравится что все портит Огненный плащ, например, а ломать орбы не хочется юниту, он милишный.
И отображается крит неполный, попробую с GetEventDamage()
28
Impertus,
как ты отлавливаешь урон с руки? Я не понял вообще причём тут орбы и огненный плащ.
11
nvc123:
создаём в ро способность на основе отравляющей атаки/сферы льда/любого другого орба с бафом со временем действия 0,01 сек
пихаем её в спелбук
запрещаем этот спелбук и даём его всем юнитам
если при получении урона на юните есть баф нашего орба значит урон нанесён рукой
иначе не рукой
Вот тут про орбы
16GB:
как ты отлавливаешь урон с руки? Я не понял вообще причём тут орбы и огненный плащ.
Сейчас у меня счетчик срабатывает от любого урона через DamageTaken, в том числе и от огненного плаща, чего я хочу избежать. Через AttackingUnit работает криво-косо.
З.Ы. В ГУИ по быстрому посмотрел, нет условий на переменную с типом атаки, а сама переменная-то есть.
28
Impertus,
чтобы отловить урон именно с руки юзай яд (если при получении урона на юните баф яда то это урон с руки, ну и потом удаляешь баф тут же), правда в дальнем бою яд перекрываться как минимум критом, но можно триггерный сделать
11
Нашел вот такой подобный кусок, правда он основан на библиотеках и с- или vJass и для предмета, но буду на его основе чего-то думать.
function OnAttack takes Item itm returns nothing 
    local Tower tower = itm.getCarrier() 
    set itm.userInt = itm.userInt +1 
    if itm.userInt == 5 then 
        call tower.addAttackCrit() 
        set itm.userInt = 0 
    endif 
endfunction
28
Impertus,
я тебе сказал как реализовать. В чём проблема?
32
Криты раз в N сек, изи же, курите доту там у бх вроде норм сделана Джинада.
Узнать ударил ли юнит цель или нет можно благодаря всяким клифам, сплешам, отлавливая урон полученный дамми юнитом рядом с целью атаки, при этом сплшеши и клифы не портят орб эффекты.
30
можно определить урон нанесённый атакой но тогда перестанут работать орбы
Если все способности наносят урон через код, то вводится глобальная boolean IsSpellDamage = false и в нанесении урона образуется такая конструкция:
IsSpellDamage = true
DOTONSOFDAMAGE(9001)
IsSpellDamage = false
Теперь при событии "юнит получает урон" проверка IsSpellDamage показывает, спелами нанесён урон, или автоатакой.

А простой способ ловить урон безо всяких буферов и таймеров тут.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.