Код не изменял, прямо с доты вытащил и обфусцировал
Nether Strike
//Nether Strike
function Func3632 takes unit caster, unit target returns nothing
    local trigger trg
    local integer trgH
    local real    angle = Atan2( GetUnitY(target)-GetUnitY(caster), GetUnitX(target)-GetUnitX(caster) )
    local integer i     = 4
    
    call Func3619( caster, target, true, true )
    
    set trg = null
endfunction

function Func3633 takes nothing returns nothing
    call Func3632( unit367, GetEnumUnit() )
endfunction

function Func3634 takes unit caster, unit target returns nothing
    local group g = CreateGroup() //Func0030()
    
    set unit124 = caster
    set unit367 = caster
    call GroupEnumUnitsInRange( g, GetUnitX(caster), GetUnitY(caster), 275, Condition(function Func0305) )
    call ForGroup( g, function Func3633 )
    call Func0029( g )
    
    set g = null
endfunction

function Func3635 takes nothing returns boolean
    local trigger trg             = GetTriggeringTrigger()
    local integer trgH            = GetHandleId( trg )
    local unit    caster          = LoadUnitHandle( hashtable001, trgH, 2 )
    local unit    target          = LoadUnitHandle( hashtable001, trgH, 17 )
    local integer trgCount        = GetTriggerEvalCount( trg )
    local integer alpha
    local integer abilityLvl
    local real    angle
    local real    targetX         = LoadReal( hashtable001, trgH, 23 )
    local real    targetY         = LoadReal( hashtable001, trgH, 24 )
    local real    current_targetX = GetUnitX( target )
    local real    current_targetY = GetUnitY( target )
    local real    distance        = Func0149( current_targetX, current_targetY, targetX, targetY )
    
    call SaveReal( hashtable001, trgH, 23, current_targetX*1.0 )
    call SaveReal( hashtable001, trgH, 24, current_targetY*1.0 )
    
    if GetTriggerEventId() == EVENT_UNIT_DEATH or trgCount == 200 or distance > 1800 then
        call SetUnitVertexColor( caster, 255, 255, 255, 255 )
        call UnitShareVision( target, GetOwningPlayer(caster), false )
        call UnitRemoveAbility( caster, 'A179' )
        call FlushChildHashtable( hashtable001, trgH )
        call Func0035( trg )
    else
        if trgCount < 100 then
            set alpha = trgCount
        else
            set alpha = 200-trgCount
        endif
        call SetUnitVertexColor( caster, 255, 255, 255, 255*(100-alpha)/100 )
        if trgCount == 100 then
            set abilityLvl = LoadInteger( hashtable001, trgH, 5 )
            set angle = Atan2( GetUnitY(target)-GetUnitY(caster), GetUnitX(target)-GetUnitX(caster) )
            call SetUnitPosition( caster, GetUnitX(target)+80*Cos(angle), GetUnitY(target)+80*Sin(angle) )
            call SetUnitAnimation( caster, "attack" )
            call IssueTargetOrder( caster, "attack", target )
            if GetUnitAbilityLevel( caster, 'A0G4' ) > 0 then
                call Func3632( caster, target )
            else
                call Func3634( caster, target )
            endif
            call Func0115( caster, target, 1, 50+100*abilityLvl )
        endif
    endif
    
    set trg    = null
    set caster = null
    set target = null
    
    return false
endfunction

function Func3636 takes nothing returns nothing
    local trigger trg        = CreateTrigger()
    local integer trgH       = GetHandleId( trg )
    local unit    caster     = GetTriggerUnit()
    local unit    target     = GetSpellTargetUnit()
    local integer abilityLvl = GetUnitAbilityLevel( caster, 'A0G4' )
    
    if abilityLvl == 0 then
        set abilityLvl = GetUnitAbilityLevel( caster, 'A1D8' )
    endif
    
    call UnitShareVision( target, GetOwningPlayer(caster), true )
    call IssueImmediateOrder( caster, "halt" )
    call SaveUnitHandle( hashtable001, trgH, 2  , caster               )
    call SaveUnitHandle( hashtable001, trgH, 17 , target               )
    call SaveInteger   ( hashtable001, trgH, 5  , abilityLvl           )
    call SaveReal      ( hashtable001, trgH, 23 , GetUnitX(target)*1.0 )
    call SaveReal      ( hashtable001, trgH, 24 , GetUnitY(target)*1.0 )
    call TriggerRegisterTimerEvent( trg, 0.001, true )
    call TriggerRegisterUnitEvent( trg, caster, EVENT_UNIT_DEATH )
    call TriggerRegisterUnitEvent( trg, target, EVENT_UNIT_DEATH )
    call TriggerAddCondition( trg, Condition(function Func3635) )
    call SetPlayerAbilityAvailable( GetOwningPlayer(caster), 'A179', false )
    
    set trg    = null
    set caster = null
    set target = null
endfunction

function Func3637 takes nothing returns boolean
    local trigger trg    = GetTriggeringTrigger()
    local integer trgH   = GetHandleId( trg )
    local unit    caster = LoadUnitHandle( hashtable001, trgH, 2 )
    
    call SetUnitAnimation( caster, "spell morph" )
    call FlushChildHashtable( hashtable001, trgH )
    
    call Func0035( trg )
    
    set trg    = null
    set caster = null
    
    return false
endfunction

function Func3638 takes nothing returns boolean
    local trigger trg    = GetTriggeringTrigger()
    local integer trgH   = GetHandleId( trg )
    local unit    caster = LoadUnitHandle( hashtable001, trgH, 2  )
    local unit    target = LoadUnitHandle( hashtable001, trgH, 17 )
    
    call UnitShareVision( target, GetOwningPlayer(caster), false )
    call FlushChildHashtable( hashtable001, trgH )
    call Func0035( trg )
    
    set trg    = null
    set caster = null
    set target = null
    
    return false
endfunction

function Func3639 takes nothing returns nothing
    local trigger trg    = CreateTrigger()
    local integer trgH   = GetHandleId(trg)
    local unit    caster = GetTriggerUnit()
    
    call SaveUnitHandle( hashtable001, trgH, 2, caster )
    call TriggerRegisterTimerEvent( trg, 0., true )
    call TriggerAddCondition( trg, Condition(function Func3637) )
    set trg  = CreateTrigger()
    set trgH = GetHandleId( trg )
    call SaveUnitHandle( hashtable001, trgH, 2, caster )
    call SaveUnitHandle( hashtable001, trgH, 17, GetSpellTargetUnit() )
    call TriggerRegisterTimerEvent( trg, 1., true )
    call TriggerAddCondition( trg, Condition(function Func3638) )
    call UnitShareVision( GetSpellTargetUnit(), GetOwningPlayer(caster), true )
    
    set trg    = null
    set caster = null
endfunction

function Func3640 takes nothing returns boolean
    if GetSpellAbilityId() == 'A0G4' or GetSpellAbilityId() == 'A1D8' then
        if Func0028(GetSpellTargetUnit()) == false then
            if GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT then
                call Func3636()
            else
                call Func3639()
            endif
        endif
    endif
    return false
endfunction

function Func3641 takes nothing returns nothing
    local trigger trg = CreateTrigger()
    
    call Func0176( trg, EVENT_PLAYER_UNIT_SPELL_EFFECT  )
    call Func0176( trg, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
    call TriggerAddCondition( trg, Condition(function Func3640) )
    
    set trg = null
endfunction
//end

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

Ну тут вся фитча в канале, тут чаннелинг когда завершится тогда бара переместится + защита от сбивания приказа, т.е снова начинает кастовать скилл. Сам ульт бары основан на канале, смотри его настройки. Мне больше нравился старый вариант, где бара мгновенно кастовал ульт и растворялся в воздухе, после атаковал цель...
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
6 лет назад
0
Ну тут вся фитча в канале, тут чаннелинг когда завершится тогда бара переместится + защита от сбивания приказа, т.е снова начинает кастовать скилл. Сам ульт бары основан на канале, смотри его настройки. Мне больше нравился старый вариант, где бара мгновенно кастовал ульт и растворялся в воздухе, после атаковал цель...
Принятый ответ
0
18
6 лет назад
Отредактирован Hodor
0
разобрался, поставил время подготовки заклинания на 1 секунду и сработало.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.