Добавлен , опубликован
Bloodrage сикера из доты 6.83с с восстановленными именами функций и переменных.
код скилла
function StopUnit takes unit whichUnit returns nothing //остановка юнита
    call PauseUnit( whichUnit, true )
    call IssueImmediateOrder( whichUnit, "stop" )
    call PauseUnit( whichUnit, false )
endfunction

function Error takes player p, string s returns nothing             //эмуляция игровой ошибки
    local sound m = CreateSoundFromLabel( "InterfaceError", false, false, false, 10, 10 )

    if ( GetLocalPlayer( ) == p ) then
        if ( s != "" ) and ( p != null ) then
            call ClearTextMessages( )
            call DisplayTimedTextToPlayer( p, 0.50, -1.00, 2.00, "|cffffcc00" + s + "|r" )
            call StartSound( m )
        endif
    endif
    call KillSoundWhenDone( m )

    set m = null
endfunction

function IsUnitDead takes unit u returns boolean
    return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction

function BloodRage_Filter takes nothing returns boolean             // фильтр для группы, не здания, живые и без скилла 'A04R' (маркер курьера и осадных войск)
    return GetUnitAbilityLevel( GetFilterUnit( ), 'A04R' ) == 0 and IsUnitType( GetFilterUnit( ), UNIT_TYPE_STRUCTURE ) == false and IsUnitDead( GetFilterUnit( ) ) == false
endfunction 

function IsUnitHasNegation takes unit whichUnit returns boolean     // фунция проверки если у цели Linken Sphere или аналоги
    return GetUnitAbilityLevel( whichUnit, 'B0BI' ) > 0 or GetUnitAbilityLevel( whichUnit, 'BNss' ) > 0 or GetUnitAbilityLevel( whichUnit, 'B0EV' ) > 0
    // 'BNss' - Защита, бафф руны защиты из компании (аналог линки).
    // 'BOBI' - Linken Sphere, бафф линкен сферы.
    // 'B0EV'- Retaliation (в игре не встречается)
endfunction


function Trig_BloodRageEffect_Actions takes nothing returns boolean
    local trigger TempTrigger = GetTriggeringTrigger( )
    local integer id = GetHandleId( TempTrigger )
    local unit BloodSeeker = ( LoadUnitHandle( udg__htb_DATA, ( id ), ( 2 ) ) )
    local unit Target = ( LoadUnitHandle( udg__htb_DATA, ( id ), ( 17 ) ) )
    local integer RageLevel = GetUnitAbilityLevel( BloodSeeker, 'A311' )
    
    if GetTriggerEventId( ) == EVENT_UNIT_DAMAGED then
        if udg_IsDamaged and( Target == GetEventDamageSource( )or Target == GetTriggerUnit( ) ) then
            set udg_IsDamaged = false
            call P6I( GetEventDamageSource( ), GetTriggerUnit( ), 3, GetEventDamage( ) * ( 20 + 5 * RageLevel ) / 100 ) //P6I функция нанесения урона
            set udg_IsDamaged = true
        endif
    elseif GetTriggerEventId( ) == EVENT_UNIT_DEATH then
    
        if GetKillingUnit( ) == Target or GetTriggerUnit( ) == Target then
            call SetUnitState( GetKillingUnit( ), UNIT_STATE_LIFE, GetUnitState( GetTriggerUnit( ), UNIT_STATE_MAX_LIFE ) * 0.25 + GetUnitState( GetKillingUnit( ), UNIT_STATE_LIFE ) )
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", GetKillingUnit( ), "origin" ) )
        elseif GetOwningPlayer( GetKillingUnit( ) ) == GetOwningPlayer( Target )and GetUnitAbilityLevel( GetKillingUnit( ), 'A04R' ) > 0 then
            call SetUnitState( Target, UNIT_STATE_LIFE, GetUnitState( Target, UNIT_STATE_MAX_LIFE ) * 0.25 + GetUnitState( Target, UNIT_STATE_LIFE ) )
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", Target, "origin" ) )
        endif
        
        if GetTriggerUnit( ) == Target then
            call DestroyEffect( ( LoadEffectHandle( udg__htb_DATA, ( id ), ( 175 ) ) ) )
            call DestroyEffect( ( LoadEffectHandle( udg__htb_DATA, ( id ), ( 176 ) ) ) )
            call FlushChildHashtable( udg__htb_DATA, ( id ) )
            call DestroyTrigger( TempTrigger ) //в оригинале используется функция SOI(...) из отдельной системы удаления триггеров
        endif
    else
        call DestroyEffect( ( LoadEffectHandle( udg__htb_DATA, ( id ), ( 175 ) ) ) )
        call DestroyEffect( ( LoadEffectHandle( udg__htb_DATA, ( id ), ( 176 ) ) ) )
        call FlushChildHashtable( udg__htb_DATA, ( id ) )
        call DestroyTrigger( TempTrigger )
    endif
    set TempTrigger = null
    set BloodSeeker = null
    set Target = null
    return false
endfunction

function Trig_Bloodrage_Actions takes nothing returns nothing
    local unit BloodSeeker = GetTriggerUnit( )
    local unit Target = GetSpellTargetUnit( )
    local unit dummy = CreateUnit( GetOwningPlayer( Target ), 'e00E', GetUnitX( Target ), GetUnitY( Target ), 0 )
    local trigger TempTrigger = CreateTrigger( )
    local integer id = GetHandleId( TempTrigger )
    local group grp = CreateGroup() // в оригинале используется функция NTI(...) из отдельной системы создания и удаления групп
    local integer RageLevel = GetUnitAbilityLevel( BloodSeeker, 'A311' )
    local unit TempUnit
    call TriggerRegisterTimerEvent( TempTrigger, 8 + RageLevel, false )
    call TriggerAddCondition( TempTrigger, Condition( function Trig_BloodRageEffect_Actions ) )
    call SaveUnitHandle( udg__htb_DATA, ( id ), ( 2 ), ( BloodSeeker ) )
    call SaveUnitHandle( udg__htb_DATA, ( id ), ( 17 ), ( Target ) )
    call SaveEffectHandle( udg__htb_DATA, ( id ), ( 175 ), ( AddSpecialEffectTarget( "Abilities\\Spells\\Orc\\TrollBerserk\\HeadhunterWEAPONSLeft.mdl", Target, "hand,right" ) ) )
    call SaveEffectHandle( udg__htb_DATA, ( id ), ( 176 ), ( AddSpecialEffectTarget( "Abilities\\Spells\\Orc\\TrollBerserk\\HeadhunterWEAPONSLeft.mdl", Target, "hand,left" ) ) )
    call GroupEnumUnitsInRange( grp, 0, 0, 99999, Condition( function BloodRage_Filter ) )
    loop
        set TempUnit = FirstOfGroup( grp )
        exitwhen TempUnit == null
        call GroupRemoveUnit( grp, TempUnit )
        call TriggerRegisterUnitEvent( TempTrigger, TempUnit, EVENT_UNIT_DAMAGED )
        call TriggerRegisterUnitEvent( TempTrigger, TempUnit, EVENT_UNIT_DEATH )
    endloop
    
    call DestroyGroup( grp ) // в оригинале используется функция NTI(...) из отдельной системы создания и удаления групп
    
    set TempUnit = null
    set TempTrigger = null
    set BloodSeeker = null
    set Target = null
    set grp = null
endfunction

function Trig_Bloodrage_Conditions takes nothing returns boolean // проверка кастера и бафов цели

    if GetSpellAbilityId( ) == 'A311' and IsUnitType( GetTriggerUnit( ), UNIT_TYPE_HERO ) == true then
  
        if IsUnitEnemy( GetSpellTargetUnit( ), GetOwningPlayer( GetTriggerUnit( ) ) ) == false or IsUnitHasNegation( GetSpellTargetUnit( ) ) == false then
            call Trig_Bloodrage_Actions( ) 
        endif
        
    endif
    return false
endfunction

function Trig_Bloodrage_Cast_Conditions takes nothing returns boolean // проверка на -DisableHelp
    if GetSpellAbilityId( ) == 'A311' and IsUnitType( GetTriggerUnit( ), UNIT_TYPE_HERO ) == true and GetSpellTargetUnit( ) != GetTriggerUnit( )and IsUnitAlly( GetSpellTargetUnit( ), GetOwningPlayer( GetTriggerUnit( ) ) )and( LoadBoolean( udg__htb_DATA, ( GetHandleId( GetOwningPlayer( GetSpellTargetUnit( ) ) ) ), ( 139 ) ) ) then
        call StopUnit( GetTriggerUnit( ) )
        call Error( GetOwningPlayer( GetTriggerUnit( ) ), "Этот игрок не хочет быть целью способностей союзников" ) // в оригинале GetObjectName( 'n038' )
    endif
    return false
endfunction

function InitTrig_Bloodrage takes nothing returns nothing // инициализация триггера, эта функция вызовется после старта карты
    
    local trigger TempTrigger = CreateTrigger( )
    call TriggerRegisterAnyUnitEventBJ( TempTrigger, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( TempTrigger, Condition( function Trig_Bloodrage_Cast_Conditions ) )
  
    set TempTrigger = CreateTrigger( )
    call TriggerRegisterAnyUnitEventBJ( TempTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( TempTrigger, Condition( function Trig_Bloodrage_Conditions ) )
  
    set TempTrigger = null
endfunction
Повышает урон от цели и по цели на 25%, 30%, 35%, 40% - в зависимости от уровня, но только урон от лица цели заклинания. Скилл не работает на скиллы которые используют дамми юнитов или саммонов.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
15
quq_CCCP, было бы шикарно, спасибо!
nvc123, много видел всяких, но они обычно косячные или не совсем такие.
32
Audes, щяс добавлю, почти доделал там код, щяс тест мап закончу потом проверите...
Audes, ну все иди смотри...
32
quq_CCCP, можешь вытащить код Boots of Travel и Town portal?
Могу, но зачем? Там и так все очевидно...
13
quq_CCCP, можешь вытащить эту функцию для меня с доты?
quq_CCCP, и оптимизировать код boots of travel
пожалуйста я уже очень давно ищу ее
3 комментария удалено
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.