scope Shreding
//==========================================================================
//=============================SETUP========================================
//==========================================================================
globals
private constant integer SPELL_ID = 'B000'
private constant real perte = 0.9 //La vie sera multipliée par ce nombre
private constant string model = "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl"
endglobals
private function Targ takes unit targ returns boolean
return (GetWidgetLife( targ ) > 0.405 ) and ( IsUnitType( targ, UNIT_TYPE_MAGIC_IMMUNE ) == false ) and ( IsUnitAlly( targ, GetOwningPlayer( GetTriggerUnit() ) ) == false )
endfunction
private function Range takes integer level returns integer
return 400 + 10 * level
endfunction
private function Damage takes integer level returns integer
return 75 * level
endfunction
private function Armor takes integer level returns integer
return 3*level
endfunction
private function MoveSpeed takes integer level returns real
return I2R( 10 + 5 * level )
endfunction
private function AttackSpeed takes integer level returns integer
return 10 + 5 * level
endfunction
//==========================================================================
//=============================END SETUP====================================
//==========================================================================
globals
group g
boolexpr b
endglobals
private function Pick takes nothing returns boolean
return Targ( GetFilterUnit() )
endfunction
private function Cond takes nothing returns boolean
local unit u = GetSpellAbilityUnit()
local integer level = GetUnitAbilityLevel( u, SPELL_ID )
local real x = GetUnitX( u )
local real y = GetUnitY( u )
local unit f
if ( GetSpellAbilityId() == SPELL_ID ) then
call GroupEnumUnitsInRange( g, x, y, Range( level ), b )
loop
set f = FirstOfGroup( g )
exitwhen ( f == null )
call GroupRemoveUnit( g, f )
call UnitDamageTarget( u, f, Damage( level ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null )
call Debuff.UnitAddDoubleSlowReducArmor( f, 6, MoveSpeed( level ), AttackSpeed( level ), Armor( level ) )
endloop
call SetWidgetLife( u, GetWidgetLife( u ) * perte )
call DestroyEffect( AddSpecialEffect( model, x, y ) )
endif
set u = null
return false
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger Shreding = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( Shreding, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( Shreding, Condition( function Cond ) )
set g = CreateGroup()
set b = Condition( function Pick )
//Preloading effect
call Preload( model )
//Preloading ability
set bj_lastCreatedUnit = CreateUnit( Player(15), dummy, 0, 0, 0 )
call UnitAddAbility( bj_lastCreatedUnit, SPELL_ID )
call KillUnit( bj_lastCreatedUnit )
set Shreding = null
endfunction
endscope