Хочу сделать ультимейт по типу высасывания жизни, но при этом врага кидало в сон. Ну вы поняли совместить две способности в одну. Расспишите подробно в триггерах как создать: Событие, Условие и Действие.

А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Короче, я закрою вопрос. Закажу в акции буйство спелмейкера.
ответ
Вот держи. За подробностями в вк можешь обратится и если такое дело помогу доработаю систему на jass ( мой вк - vk.com/id446544976 )
ответ
XGM Bot:
Похожие вопросы:

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

все необходимые действия и проверки есть в триггерах
если попытки действительно имели место - в студию

ответ
Macghoul, с помощью триггеров, конечно возможно - в доте же как то сделали?
Но если вы вчера уселись за редактор - вам рано думать о таком, по сути метеорит инвокера - это два юнита, один падающий камень, второй катящийся. Сама кнопка - основана на способности - Канал, т.е просто кнопка для тыканья, которая грубо говоря кроме как тратить ману и указывать цель ни на что ни годна. При нажатии кнопки создается юнит с моделю падающего метеорита (вроде модель лежит в архивах игры, для роликов кампании юзалось как эффект), потом стоит таймер 1.35 сек, который как раз формирует задержку чтобы метеорит визуально упал, после пеовый метеорит удаляется и создается второй, которого двигают и наносят урон всем юнитам вокруг, отдельная система из триггера формирует дебафф горения от метеорита. Там все на jass и средний уровень кодерства, вокер не очень простой герой для копипаста, лучше скопируйте леорика или ликана.
ответ
Всё по старому, даммикаст + способов реализаци куча. Самое главное это отследить событие ядовидой ловушки, тут 3 самых очевидных варианта:
  1. Ловушка умерла, значит активировалась, если же сделано на основе колдовской оглушающей ловушки
  2. Вражеский юнит вошел в зону ловушки
  3. Периодическим триггером перебираем юнитов вокруг ловушки в момент её установки и до тех пор пока они жива, как только найден враг ловушка активирована.
Все 3 варианта в свей степени верны и имеют место быть, тут уже зависит от того в какой врубишься
Ну и действие.
Даммикаст отравленного ножа или любого другого яда на каждого юнита в зоне поражения
О дамми кастах всё находим через поиск

32
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
Принятый ответ
28
quq_CCCP, разве юнитов в паузе можно продамажить и вообще как-либо с ними взаимодействовать? + вроде таймеры баффов/дебаффов тоже паузятся вместе с юнитом. Если пауза на это не влияет, то зачем я морфил юнитов, станил их, отбирал абилку атаки ._.
32
rsfghd, конечно можно, то что баффы паузятся - ну кроме мемхака особо ниче не сделать. Тут увы, нужно это учитывать.
1
quq_CCCP:
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
Тоесть таким образом союзный вражеский юнит не собьёт ульт?
32
ну почему, собьет, только он ударит - или нанесет урон спеллом, жертва проснется и высасывание прекратится, реализовать конечно можно и иначе.
1
quq_CCCP:
ну почему, собьет, только он ударит - или нанесет урон спеллом, жертва проснется и высасывание прекратится, реализовать конечно можно и иначе.
Ну quq_CCCP:
ну почему, собьет, только он ударит - или нанесет урон спеллом, жертва проснется и высасывание прекратится, реализовать конечно можно и иначе.
Ну ударит и собьется ульт, как это сделать, чтоб не сбивался?

Anariys3333:
quq_CCCP:
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
Тоесть таким образом союзный вражеский юнит не собьёт ульт?
Ну и добавляем триггеру новое условие, в котором будем делать действия: какое условие ставить? И хэш-таблица как сохраняется?
1
quq_CCCP:
Ну мб пример кода сделать?
quq_CCCP:
Ну мб пример кода сделать?
Сейчас
32
Ну вот пример на jass:
код
function Trig_Surge_Expires_Conditions takes nothing returns boolean
    local trigger trg = GetTriggeringTrigger()
    local integer id = GetHandleId(trg)
    local unit targ = LoadUnitHandle( HashData, id, 0 )
    call DisableTrigger(trg)
    
    call UnitRemoveAbility( targ, 'A0C9' )
    call UnitRemoveAbility( targ, 'B07W' )
    
    call RemoveSavedHandle( HashData, ExSurge, GetHandleId(targ))
    call FlushChildHashtable( HashData, id )
    call S0I(trg)
    set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
    if trg == null then
        //call SetUnitPathing( targ, true )
    endif
    
    set targ = null
    set trg = null
    return false
endfunction

function Trig_Surge_Actions takes nothing returns nothing
    local unit targ = GetSpellTargetUnit( )
    local real dur = RMaxBJ( 1.50 * GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) + 1.50, 3.01 )
    local trigger trg  = LoadTriggerHandle( HashData, ExSurge, GetHandleId(targ) )
    local integer id 
    
    if trg != null then
        call TriggerEvaluate(trg)
    endif
    set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
    if trg != null then
        call TriggerEvaluate(trg)
    endif
    
    set trg = CreateTrigger()
    set id = GetHandleId(trg)
    call SaveTriggerHandle( HashData,ExSurge, GetHandleId(targ), trg )
    call SaveUnitHandle( HashData, id, 0, targ )
    
    call TriggerAddCondition( trg, Condition(function Trig_Surge_Expires_Conditions ) )
    call TriggerRegisterDeathEvent( trg, targ )
    call TriggerRegisterTimerEvent( trg, dur, false )
    call UnitAddAbility( targ, 'A0C9' )
    call UnitMakeAbilityPermanent( targ, true, 'A0C9' ) 
    call SetUnitAbilityLevel( targ, 'A0C9', GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) )
    call AuraUpdateEffect( targ, 'A0R7' )
    call IO1(UD,GetUnitX(targ),GetUnitY(targ))
    call DestroyEffect(AddSpecialEffectTarget("effects\\Surge.mdx",targ,"origin"))
    
    if not IsUnitType( targ,UNIT_TYPE_FLYING)then
         //call SetUnitPhased(targ)
    endif
    
    set targ = null
    set trg = null
endfunction

function  Trig_Surge_Conditions takes nothing  returns boolean
     if GetSpellAbilityId() == 'A0R7' then
        call Trig_Surge_Actions()
     endif
    return false
endfunction

function Register_Surge takes nothing returns nothing
    local trigger trg = CreateTrigger( )
    local integer nIndex = 1
    call TriggerAddCondition( trg, Condition( function Trig_Surge_Conditions ) )
    loop
        exitwhen nIndex > 11
    
        if IsSlotPlayer( Player( nIndex ) ) then
            call TriggerRegisterPlayerUnitEvent( trg, Player( nIndex ), EVENT_PLAYER_UNIT_SPELL_EFFECT, OnlyHero )
        endif
        set nIndex = nIndex + 1
    endloop
    
    set trg = null
endfunction
Это код способности surge, из доты, когда то давно делал. Ну собственно тут довольно примитивный код и как раз пример как нужно следить за юнитом, тут реализован и диспел и перебивание баффа при повторном применении, это не намного сложнее кастомного сна, который я описал выше.
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.