Код не изменял, прямо с доты вытащил и обфусцировал
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
Принятый ответ
Ну тут вся фитча в канале, тут чаннелинг когда завершится тогда бара переместится + защита от сбивания приказа, т.е снова начинает кастовать скилл. Сам ульт бары основан на канале, смотри его настройки. Мне больше нравился старый вариант, где бара мгновенно кастовал ульт и растворялся в воздухе, после атаковал цель...
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Hodor