Пытаюсь сделать комбинацию для разбойника: одна абилка даёт комбо-очки, другая за эти комбо-очки наносит урон.
Так как мне исключительно впадлу ждать время каста за рогу, я поставил ему нулевой каст-тайм в "Канале", следовательно, абилку он применяет мнгновенно, но очень грустно то, что spell_cast регистрирует применение абилки до её применения, т.е.:
У юнита 100хп, абилка наносит 200 урона => юнит умирает мнгновенно => цели для абилки нет => мана не тратится, абилка в кд не уходит. Я потихоньку полез в 2к19 изучать мемхак, т.к. наконец-то нашёл для этого время. Нашёл там AddAbilityCooldownConverted(a, r), решил кинуть хоть через код кулдаун. Но почему-то вар фаталит. Собственно, вопрос комплексный: почему вар фаталит, и чем детектить каст, чтобы он не фаталил?
код

function Trig_Eviscerate_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A00J' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Eviscerate_Actions takes nothing returns nothing
    call UnitDamageTargetBJ( GetSpellAbilityUnit(), GetSpellTargetUnit(), ( I2R(udg_ComboPoints) * ( 3.00 + ( 2.00 * I2R(GetUnitAbilityLevelSwapped('A00J', GetSpellAbilityUnit())) ) ) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call AddAbilityCooldownConverted('A00J', 10)
    set udg_ComboPoints = ( udg_ComboPoints + ( GetUnitAbilityLevelSwapped('A00I', GetSpellAbilityUnit()) * 10 ) )
endfunction

function InitTrig_Eviscerate takes nothing returns nothing
    set gg_trg_Eviscerate = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Eviscerate, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Eviscerate, Condition( function Trig_Eviscerate_Conditions ) )
    call TriggerAddAction( gg_trg_Eviscerate, function Trig_Eviscerate_Actions )
endfunction

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

этот ивент отслеживает сам факт каста, а не его завершение
используйте EVENT_PLAYER_UNIT_SPELL_EFFECT
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
26
5 лет назад
2
событие какое используете?
0
16
5 лет назад
0
Hate:
событие какое используете?
spell_cast

EVENT_PLAYER_UNIT_SPELL_CAST

Раньше проблем не было, т.к. не было необходимости в нулевом каст-тайме.
3
26
5 лет назад
3
этот ивент отслеживает сам факт каста, а не его завершение
используйте EVENT_PLAYER_UNIT_SPELL_EFFECT
Принятый ответ
0
16
5 лет назад
Отредактирован Naadir
0
Hate, вылет всё равно есть. Да и другое событие не помогло.
У юнита 100хп, абилка наносит 200 урона => юнит умирает мнгновенно => цели для абилки нет => мана не тратится, абилка в кд не уходит.
2
32
5 лет назад
2
Naadir, А почему не StartAbilityCD ?
0
16
5 лет назад
0
Bergi_Bear, я так понимаю, корень проблем не в этом, а в том, что убийство юнита происходит раньше применения абилки. Я не понимаю механику. Я применяю "Канал" с нулевыми значениями везде, отслеживаю его применение, наношу урон. Урон наносится, а "Канал" в кд не уходит.
2
28
5 лет назад
2
юнит умирает мнгновенно => цели для абилки нет
используй другое событие
тогда дамаг будет наносится после каста и необходимости в задании кд не будет
EVENT_PLAYER_UNIT_SPELL_EFFECT
0
16
5 лет назад
Отредактирован Naadir
0
nvc123, истечение таймера 0.00 подойдёт?
EVENT_PLAYER_UNIT_SPELL_EFFECT не помог. Но сейчас протестирую ещё раз.
2
28
5 лет назад
2
Naadir, зачем таймер когда есть соответствующие события?
на каст спела есть 4 или 5 событий
ты используешь не правильное
EVENT_PLAYER_UNIT_SPELL_EFFECT
EVENT_PLAYER_UNIT_SPELL_FINISH
попробуй эти события
0
16
5 лет назад
Отредактирован Naadir
0
nvc123, хренова магия. Теперь работает. Спасибо.
0
28
5 лет назад
0
Имей в виду, что EVENT_PLAYER_UNIT_SPELL_FINISH срабатывает только если спел был скастован до конца. EVENT_PLAYER_UNIT_SPELL_ENDCAST срабатывает, когда каст был завершён или прерван.
0
23
5 лет назад
0
Помню такую трабла если близко стоять с мобом каст убивает моментально а кд не сработал даже на все событии так как 0.03 быстрее чемловил события.. Поэтому перешел на полный триггерный дамаг.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.