Как сделать так, чтобы при нажатии способности юнит проигрывал какую-то анимацию в течение, например, 3 секунд и по завершению "подготовки" использовалась сама способности и чтобы в моменте можно было нажать отмена, анимация бы сбросилась и способность не сработала. К примеру как ульта сфа из доты

rsfghd, Способность уходит на перезарядку в таком случае, а хотелось бы чтобы анимация запускалась и можно было в любую секунду её прервать и при этом она не уходила на перезарядку
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Если эффект абилки триггерный, то в качестве завершения используй end cast. Остальные настройки есть у канала, follow through time на 3 секунды поставь
Ответы (3)
9
rsfghd, Способность уходит на перезарядку в таком случае, а хотелось бы чтобы анимация запускалась и можно было в любую секунду её прервать и при этом она не уходила на перезарядку
Принятый ответ
16
Qulore, сделать задержку каста и проиграть любую анимацию триггерно, например
28
Qulore, поиграйся с другим параметром у канала, как сказали выше - cast time
26
Qulore:
как ульта сфа из доты
Изначально ульт СФа из доты базировался на 2м скилле Горного Короля (клэп), только урон на 0 выставлен и добавлено время подготовки. Сам по себе он обеспечивал только лишь кратковременно замедляющий дебафф (не знаю как там сейчас, не слежу). Раз от деформации рельефа избавились, то полагаю что можно использовать вместо него любой другой скилл, например Рёв (без наложения эффекта), а дебафф - накладывать вручную (не говоря уже об уроне от так же вручную создаваемых волн).
32
Канал, время подготовки 1 сек, если каст закончен создает N х число дамми юнитов и вручает им стаю повелителя ужаса и приказывает кинуть, в точку в радиусе, вычесленную по формуле 360 деленное на число душ, т.е по кругу, Так же ищет всех юнитов в радиусе 1000 и кидает на низ увечье некроманта, как дебафф замедления.

function RequiemFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer )and not( IsUnitDead( bj_lastFilterUnit )or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE )or IsUnitWard( bj_lastFilterUnit )or IsUnitInGroup( bj_lastFilterUnit, LoadGroupHandle( HashData, GetHandleId( GetExpiredTimer( ) ), 0 ) )or GetUnitAbilityLevel( bj_lastFilterUnit, 'A04R' ) > 0 )
endfunction

function Timer_SoulCrippile_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer id = GetHandleId( t )
    local group grp = LoadGroupHandle( HashData, id, 0 )
    local player pl = LoadPlayerHandle( HashData, id, 1 )
    local real cx = LoadReal( HashData, id, 2 )
    local real cy = LoadReal( HashData, id, 3 )
    local real rad = LoadReal( HashData, id, 4 )
    local integer level = LoadInteger( HashData, id, 5 )
    local unit enemy
    if rad > 1024.00 then
        call ReleaseTimer( t )
        call FlushChildHashtable( HashData, id )
        call NSI( grp )
        call DestroyTimer( t )
    else
        set rad = rad + 32.00
        set bj_groupEnumOwningPlayer = pl
        call GroupClear( bj_TempGroup )
        call GroupEnumUnitsInRange( bj_TempGroup, cx, cy, rad, Condition( function RequiemFilter ) )
        call GroupAddGroup( bj_TempGroup, grp )
        loop
            set enemy = FirstOfGroup( bj_TempGroup )
            exitwhen( enemy == null )
            call GroupRemoveUnit( bj_TempGroup, enemy )
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( enemy ), DUMMY, GetUnitX( enemy ), GetUnitY( enemy ), GetUnitFacing( enemy ) )
            call SetUnitPathing( bj_lastCreatedUnit, false )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 3.00 )
            call SetUnitX( bj_lastCreatedUnit, GetUnitX( enemy ) )
            call SetUnitY( bj_lastCreatedUnit, GetUnitY( enemy ) )
            call UnitAddAbility( bj_lastCreatedUnit, 'A0HH' )
            call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0HH', level )
            call UnitShareVision( enemy, pl, true )
            call IssueTargetOrder( bj_lastCreatedUnit, "cripple", enemy )
            call UnitShareVision( enemy, pl, false )
        endloop
        set enemy = null
        call SaveReal( HashData, id, 4, rad )
    endif
    set grp = null
    set t = null
endfunction

function DarkSouls takes unit fiend, integer soulcount returns boolean
    local real cx = GetUnitX( fiend )
    local real cy = GetUnitY( fiend )
    local player pl = GetOwningPlayer( fiend )
    local real facing
    local real dx
    local real dy
    local integer lines = 0
    local integer nIndex = 1
    local integer level = GetUnitAbilityLevel( fiend, 'A29J' )
    local timer t
    if soulcount < 1 or level == 0 then
        return false
    endif
    set lines = IMaxBJ( R2I( soulcount / 2 ), 1 )
    loop
        exitwhen nIndex > lines
        set facing = ( I2R( nIndex ) * ( 360.00 / lines ) )
        set bj_lastCreatedUnit = CreateUnit( pl, DUMMY, cx, cy, facing )
        set facing = facing * bj_DEGTORAD
        set dx = cx + 64.00 * Cos( facing )
        set dy = cy + 64.00 * Sin( facing )
        call SetUnitPathing( bj_lastCreatedUnit, false )
        call SetUnitX( bj_lastCreatedUnit, cx )
        call SetUnitY( bj_lastCreatedUnit, cy )
        call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
        call UnitAddAbility( bj_lastCreatedUnit, 'A0HG' )
        call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0HG', level )
        if not IssuePointOrder( bj_lastCreatedUnit, "carrionswarm", dx, dy ) then
            call IssuePointOrder( bj_lastCreatedUnit, "carrionswarm", cx + 256.00 * Cos( facing ), cy + 256.00 * Sin( facing ) )
        endif
        set nIndex = nIndex + 1
    endloop
    set t = NewTimer( )
    set nIndex = GetHandleId( t )
    call SaveGroupHandle( HashData, nIndex, 0, NTI( ) )
    call SavePlayerHandle( HashData, nIndex, 1, pl )
    call SaveReal( HashData, nIndex, 2, cx )
    call SaveReal( HashData, nIndex, 3, cy )
    call SaveReal( HashData, nIndex, 4, 64.00 )
    call SaveInteger( HashData, nIndex, 5, level )
    call TimerStart( t, 0.03125, true, function Timer_SoulCrippile_Expires )
    set t = null
    return true
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.