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

Принятый ответ

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

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

added by Clamp: пример базы данных по броне, по урону логика абсолютно такая же, только надо ещё основную характеристику учитывать (она тоже в базе данных хранится).
Принятый ответ
0
11
8 лет назад
Отредактирован Impertus
0
И отследить, чем юнит наносит урон (атака, предмет, спелл, если он не прописан триггерно) тоже нельзя?(
0
28
8 лет назад
0
Impertus, можно определить урон нанесённый атакой но тогда перестанут работать орбы
придётся писать их триггерную замену
0
11
8 лет назад
0
С помощью какой строки? И не переводить ли весь урон атак на триггерную основу?
(Можно из DamageTaken + Attacking unit мб?)
0
28
8 лет назад
0
Impertus, с помощью нескольких строк
создаём в ро способность на основе отравляющей атаки/сферы льда/любого другого орба с бафом со временем действия 0,01 сек
пихаем её в спелбук
запрещаем этот спелбук и даём его всем юнитам
если при получении урона на юните есть баф нашего орба значит урон нанесён рукой
иначе не рукой
0
11
8 лет назад
0
А, не, не критично.
Хотел сделать триггерные криты, а откуда цифири базового дамага для них брать - хз. Будет значит рандом между мин.дмг+стат и макс.дмг+стат * множитель.
А по дамагтайпу не отследить? У обычной атаки вроде тип Физ-обычный, у других такого нет вроде.
0
28
8 лет назад
0
Impertus, а как ты дамагтайп узнаешь?
Хотел сделать триггерные криты, а откуда цифири базового дамага для них брать - хз
зачем базовый?
цифры у крита идут с учётом резиста брони и прочего
то есть просто урон выводи
GetEventDamage()
в статьях даже пример на гуи есть вроде
0
11
8 лет назад
0
Делал с DamageTaken*X, только при таком расчете крит сильно занижается.
Допустим, крит х3, дамаг 100. У цели снижение получаемого урона на 50%. Т.е. крит будет считаться от 50 дмг = 150 дамага всего будет наноситься триггерно, а получать - 150*0.5=75 урона всего. Вместо (100*3)/50=150. И цифирь крита будет отображаться не 300!, а 150!. Хотя базовые криты отображаются как раз в виде 300!.
0
29
8 лет назад
0
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-х крит из моей карты. Думаю тут ясно, что где
0
11
8 лет назад
0
Суть критов была каждый 5й удар 100% крит.
Делал через AttackingUnit, но там настроить убирание спелбука с критом тяжело, так как для юнита с долгим замахом (тот же блейдмастер, у него от события Attacking до нанесения урона 1.15 сек) спелбук убирается до собственно нанесения урона и крита нет. Ставить вейты можно, но ненужно+влияет скорость атаки, будет успевать сделать по 2 крита при статичном вейте.
16GB:
ну вот допустим это 1.8-х крит из моей карты. Думаю тут ясно, что где
А Dm чему равен? Вне куска кода, сама суть вопроса)
0
29
8 лет назад
0
Impertus,
ну это урон отловленный
Я не скидывал всё потому что там 100500 проверок разных, например урон нанесён с руки , урон нанесём не даммиком для критического удара и т .д
0
11
8 лет назад
0
И чистый урон, у самого так сделано, но не нравится что все портит Огненный плащ, например, а ломать орбы не хочется юниту, он милишный.
И отображается крит неполный, попробую с GetEventDamage()
0
29
8 лет назад
0
Impertus,
как ты отлавливаешь урон с руки? Я не понял вообще причём тут орбы и огненный плащ.
0
11
8 лет назад
Отредактирован Impertus
0
nvc123:
создаём в ро способность на основе отравляющей атаки/сферы льда/любого другого орба с бафом со временем действия 0,01 сек
пихаем её в спелбук
запрещаем этот спелбук и даём его всем юнитам
если при получении урона на юните есть баф нашего орба значит урон нанесён рукой
иначе не рукой
Вот тут про орбы
16GB:
как ты отлавливаешь урон с руки? Я не понял вообще причём тут орбы и огненный плащ.
Сейчас у меня счетчик срабатывает от любого урона через DamageTaken, в том числе и от огненного плаща, чего я хочу избежать. Через AttackingUnit работает криво-косо.
З.Ы. В ГУИ по быстрому посмотрел, нет условий на переменную с типом атаки, а сама переменная-то есть.
0
29
8 лет назад
0
Impertus,
чтобы отловить урон именно с руки юзай яд (если при получении урона на юните баф яда то это урон с руки, ну и потом удаляешь баф тут же), правда в дальнем бою яд перекрываться как минимум критом, но можно триггерный сделать
0
11
8 лет назад
Отредактирован Impertus
0
Нашел вот такой подобный кусок, правда он основан на библиотеках и с- или 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
0
29
8 лет назад
0
Impertus,
я тебе сказал как реализовать. В чём проблема?
0
32
8 лет назад
0
Криты раз в N сек, изи же, курите доту там у бх вроде норм сделана Джинада.
Узнать ударил ли юнит цель или нет можно благодаря всяким клифам, сплешам, отлавливая урон полученный дамми юнитом рядом с целью атаки, при этом сплшеши и клифы не портят орб эффекты.
0
30
8 лет назад
0
можно определить урон нанесённый атакой но тогда перестанут работать орбы
Если все способности наносят урон через код, то вводится глобальная boolean IsSpellDamage = false и в нанесении урона образуется такая конструкция:
IsSpellDamage = true
DOTONSOFDAMAGE(9001)
IsSpellDamage = false
Теперь при событии "юнит получает урон" проверка IsSpellDamage показывает, спелами нанесён урон, или автоатакой.

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