The Council of Demons v1
2900
ID:
295
Family ID:
Author:
DaveMatthews
Rarity:
unique
Element:
darkness
Attack Type:
Magic
Attack Range:
850
Attack CD:
1
Damage:
1335-1335
Abil. Factor:
0.4
Status:
Approved

Description:

Every 1000 years, the most powerful demons meet in a council.

Latest Upload Comment:

Restored from 1.10
Impenetrable Darkness
Shrouds an enemy in darkness, slowing it by 40% for 5 seconds and reducing the damage it takes from attacks by 95%. The affected unit takes 1000 spell damage per second and additional spell damage equal to 75% of the damage it received during the effect when the buff expires. This damage can't be a critical hit. 

Level Bonus:
+40 damage per second 
+1% damage on expire 
+0.8% slow
Maledict
Whenever this tower damages a unit, it has a 20% chance to increase the damage that unit receives from spells by 20% for 5 seconds. Every time the buffed unit is targeted by a spell this tower deals additional spell damage equal to 3 times the caster goldcost to it. 

Level Bonus:
+0.4% chance 
+0.6% spell damage received
Demonic Edict
Whenever a tower in 400 range casts a spell on a creep, this tower fires a projectile from the casting unit to its current target, dealing [2 x caster goldcost x spell cd] spell damage. The casting tower also has its mana regeneration increased by 100% for 3 seconds. 

Level Bonus:
+2% mana regeneration
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 8 AUTOCAST_autoRange: 850 AUTOCAST_manacost: 90 AUTOCAST_range: 850 AUTOCAST_targetType: TARGET_TYPE_CREEPS AUTOCAST_numBuffsBeforeIdle: 1 caster_art: target_art: Abilities\Weapons\AvengerMissile\AvengerMissile.mdl AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: dave_cod AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    set dave_cod.apply(tower,Event.getTarget(),tower.getLevel()).userReal = 0
endfunction

Header

    globals
    BuffType dave_cod
    BuffType dave_maledict
    BuffType dave_demonic_pray
    BuffType dave_demonic_mana
    ProjectileType dave_pray_projectile
    endglobals
    
     function dot takes Buff b returns nothing
         local Tower T = b.getCaster()
         local integer level = T.getLevel()
         call T.doSpellDamage(b.getBuffedUnit(), 1000+(40*level), T.calcSpellCritNoBonus())
     endfunction
     
     function damageStore takes Buff b returns nothing
        set b.userReal = b.userReal + Event.damage
     endfunction
     
     function damage takes Buff b returns nothing
         local Tower T = b.getCaster()
         local integer level = T.getLevel()
         local Unit target = b.getBuffedUnit()
         local real final = b.userReal*(0.75+(0.01*level))
         
         call T.doSpellDamage(target, final, 1)
         call SFXAtUnit("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl", target.getUnit())
         call T.getTeam().displayFloatingText(I2S(R2I(final)), target,50,50,50) 
     endfunction
     
     function maledicted takes Buff b returns nothing
         local Tower tower = b.getCaster()
         local Tower caster = Event.getTarget()
         local Unit target = b.getBuffedUnit()
         local integer gold = caster.getGoldcost()
         
         if not target.isImmune() then
            call tower.doSpellDamage(target,3*gold,tower.calcSpellCritNoBonus())
            call SFXAtUnit("Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl", target.getUnit())
         endif
     endfunction
     
     function pray takes Buff b returns nothing
        local Tower tower = b.getCaster()
        local Tower caster = b.getBuffedUnit()
        local Unit target = Event.getTarget()
        local Projectile p
        local integer gold = caster.getGoldcost()
        local real cd = Event.getAutocastType().getCooldown()
     
        if target.isACreep() then
            call SFXAtUnit("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl", caster.getUnit())
            set p = Projectile.createFromUnitToUnit(dave_pray_projectile, tower, cd*gold, 1, caster, target, true, false, true)
            call dave_demonic_mana.apply(tower, caster, tower.getLevel())
        endif
     endfunction
     
     function prayHit takes Projectile p, Unit creep returns nothing
        local Tower tower = p.getCaster()
        call tower.doSpellDamage(creep,2,tower.calcSpellCritNoBonus())
     endfunction
     
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
        local Modifier m = Modifier.create()
        local Modifier n = Modifier.create()
        local Modifier o = Modifier.create()
        
        set dave_cod = BuffType.create(5,0,false)
        call dave_cod.setBuffModifier(n)
        call n.addModification(MOD_MOVESPEED,-0.4,-0.006)
        call n.addModification(MOD_ATK_DAMAGE_RECEIVED,-0.95,0)
        call dave_cod.setBuffIcon( '@@0@@' )
        call dave_cod.addPeriodicEvent(dot,1.0)
        call dave_cod.addEventOnDamaged(EventHandler.damageStore,1,0)
        call dave_cod.setEventOnExpire(EventHandler.damage)
        
        set dave_maledict = BuffType.create(5,0,false)
        call dave_maledict.setBuffModifier(m)
        call m.addModification(MOD_SPELL_DAMAGE_RECEIVED,0.2,0.006)
        call dave_maledict.setBuffIcon('@@1@@')
        call dave_maledict.addEventOnSpellTarget(maledicted)
        
        set dave_demonic_mana = BuffType.create(3,0,true)
        call dave_demonic_mana.setBuffModifier(o)
        call o.addModification(MOD_MANA_REGEN_PERC,1,0.02)
        call dave_demonic_mana.setBuffIcon('@@3@@')
        
        set dave_demonic_pray = BuffType.createAuraEffectType(true)
        call dave_demonic_pray.setBuffIcon('@@2@@')
        call dave_demonic_pray.addEventOnSpellCast(EventHandler.pray)
        
        set dave_pray_projectile = ProjectileType.create("Abilities\\Weapons\\DemonHunterMissile\\DemonHunterMissile.mdl",4,1300)
        call dave_pray_projectile.enableHoming(ProjectileTargetEvent.prayHit,0)
         
    endfunction

On Damage

ONDAMAGE_chance: 0.2 ONDAMAGE_chanceLevelAdd: 0.004
function onDamage takes Tower tower returns nothing
 local Creep creep = Event.getTarget()
 local integer level = tower.getLevel()
 
 call dave_maledict.apply(tower, creep, level)
endfunction

Tower Aura

AURA_powerAdd: 0 AURA_auraEffect: dave_demonic_pray AURA_levelAdd: 0 AURA_power: 1 AURA_targetType: TARGET_TYPE_TOWERS AURA_targetSelf: true AURA_level: 1 AURA_auraRange: 400