|   Poison Battery v1 500
                       |  ID: 348  Family ID:  Author: tolleder  Rarity: rare  Element: nature  Attack Type: Decay  Attack Range: 800  Attack CD: 3  Damage: 822-822  Mana: 250  Mana regen: 2  Status: Approved |  Specials: +10 mana/lvl Battery Overload The tower attacks creeps in a range of 1200 every 0.2 seconds till all mana is gone. Each attack (or try to attack) costs 10 mana, deals 300 damage and applies poison. Level Bonus: +12 damage AC_TYPE_OFFENSIVE_IMMEDIATE  Poison An infected creep takes 100 spelldamage every second for 9 seconds and is slowed by 5%. Level Bonus: +3 poison damage +0.3 seconds poison duration +0.12% slow | Download Toggle Triggers Autocast 
                            
                                caster_art: 
                            
                                AUTOCAST_cooldown: 20.0
                            
                                AUTOCAST_numBuffsBeforeIdle: 0
                            
                                AUTOCAST_isExtended: false
                            
                                AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE
                            
                                AUTOCAST_manacost: 100
                            
                                AUTOCAST_range: 1200
                            
                                AUTOCAST_buffType: 0
                            
                                AUTOCAST_targetSelf: false
                            
                                AUTOCAST_targetType: 0
                            
                                target_art: 
                            
                                AUTOCAST_autoRange: 800
                            
                             private function onAutocast takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local PeriodicEvent pE
    call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)+100)
    if tower.userInt!=0 then
        set pE=tower.userInt
        call pE.enable()
    endif
    set towerUnit = null
endfunctionHeader     globals
        BuffType slowAndDamage
        ProjectileType pT
    endglobals
    
    public function damagePeriodic takes Buff b returns nothing //Poisondamage
        local Tower tower=b.getCaster()
        call tower.doSpellDamage(b.getBuffedUnit(),b.getPower()*3+100,tower.calcSpellCritNoBonus())
    endfunction
       
    public function hit takes Projectile p, Unit creep returns nothing
        local Tower tower=p.getCaster()
        call tower.doSpellDamage(creep,tower.getLevel()*12+300,tower.calcSpellCritNoBonus())
        call slowAndDamage.apply(tower,creep,tower.getLevel())
    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 slow=Modifier.create()
        call slow.addModification(MOD_MOVESPEED,-0.05,-0.0012)
        
        set slowAndDamage=BuffType.create(9,0.3,false)
        call slowAndDamage.setBuffIcon('@@0@@')
        call slowAndDamage.addPeriodicEvent(EventHandler.damagePeriodic,1.0)
        call slowAndDamage.setBuffModifier(slow)
        call slowAndDamage.setStackingGroup("PoisonBattery")
        
        set pT=ProjectileType.create("Abilities\\Spells\\Items\\OrbVenom\\OrbVenomMissile.mdl",10.0,1200.0)        
        call pT.enableHoming(ProjectileTargetEvent.hit,0.0)
    endfunctionOn Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             function onDamage takes Tower tower returns nothing
    call slowAndDamage.apply(tower,Event.getTarget(),tower.getLevel())
endfunctionOn Tower Creation function onCreate takes Tower tower returns nothing
    set tower.userInt=0
    call SetUnitState(tower.getUnit(),UNIT_STATE_MANA,0)
endfunctionPeriodic 
                            
                                PERIODIC_period: 0.2
                            
                             function periodic takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local Iterate inRange
    local real numResults=0.0
    local Unit result
    local Unit next
    local Projectile p
    local PeriodicEvent pE
    
    if GetUnitState(towerUnit,UNIT_STATE_MANA)>10 then
        //Random creep in range
        set inRange=Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,1200)
        loop
            set next=inRange.next()
            exitwhen next==0
            
            set numResults=numResults+1.0 
            if GetRandomReal(0.0,1.0)<=1.0/numResults then
                set result=next
            endif
        endloop
        
        if numResults>0.5 then
            //if GetRandomReal(0.0,3.0)<=2.0 then
                //if GetRandomReal(0.0,2.0)<=1.0 then
                    set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-32.0,GetUnitY(towerUnit)-2.0,147.0,result,true,false,false)
                //else
                    //set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-32.0,GetUnitY(towerUnit)-2.0,147.0,result,true,false,false)
            //else
                //set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-32.0,GetUnitY(towerUnit)-2.0,147.0,result,true,false,false)
            //endif
            call p.setScale(0.5)
        endif
        
        
        //Manacost
        call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)-10)
    else
        set pE=Event.getCurrentPeriodicEvent()
        set tower.userInt=pE
        call pE.disable()
    endif
    set towerUnit = null
endfunction | 
|   Poison Storage v1 1200
                       |  ID: 349  Family ID:  Author: tolleder  Rarity: rare  Element: nature  Attack Type: Decay  Attack Range: 800  Attack CD: 3  Damage: 1973-1973  Mana: 300  Mana regen: 2  Status: Approved | Description: A rare tower which can store poison for later use.  Specials: +10 mana/lvl Storage Overload The tower attacks creeps in a range of 1200 every 0.2 seconds till all mana is gone. Each attack (or try to attack) costs 10 mana, deals 750 damage and applies poison. Level Bonus: +30 damage AC_TYPE_OFFENSIVE_IMMEDIATE  Poison An infected creep takes 240 spelldamage every second for 9 seconds and is slowed by 7%. Level Bonus: +8 poison damage +0.3 seconds poison duration +0.28% slow | Download Toggle Triggers Autocast 
                            
                                caster_art: 
                            
                                AUTOCAST_cooldown: 20.0
                            
                                AUTOCAST_numBuffsBeforeIdle: 0
                            
                                AUTOCAST_isExtended: false
                            
                                AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE
                            
                                AUTOCAST_manacost: 100
                            
                                AUTOCAST_range: 1200
                            
                                AUTOCAST_buffType: 0
                            
                                AUTOCAST_targetSelf: false
                            
                                AUTOCAST_targetType: 0
                            
                                target_art: 
                            
                                AUTOCAST_autoRange: 800
                            
                             private function onAutocast takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local PeriodicEvent pE
    call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)+100)
    if tower.userInt!=0 then
        set pE=tower.userInt
        call pE.enable()
    endif
    set towerUnit = null
endfunctionHeader     globals
        BuffType slowAndDamage
        ProjectileType pT
    endglobals
    
    public function damagePeriodic takes Buff b returns nothing //Poisondamage
        local Tower tower=b.getCaster()
        call tower.doSpellDamage(b.getBuffedUnit(),b.getPower()*8+240,tower.calcSpellCritNoBonus())
    endfunction
       
    public function hit takes Projectile p, Unit creep returns nothing
        local Tower tower=p.getCaster()
        call tower.doSpellDamage(creep,tower.getLevel()*30+750,tower.calcSpellCritNoBonus())
        call slowAndDamage.applyCustomPower(tower,creep,2*tower.getLevel()+26,tower.getLevel())
    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 slow=Modifier.create()
        call slow.addModification(MOD_MOVESPEED,-0.07,-0.0028)
        
        set slowAndDamage=BuffType.create(9,0.3,false)
        call slowAndDamage.setBuffIcon('@@0@@')
        call slowAndDamage.addPeriodicEvent(EventHandler.damagePeriodic,1.0)
        call slowAndDamage.setBuffModifier(slow)
        call slowAndDamage.setStackingGroup("PoisonBattery")
        
        set pT=ProjectileType.create("Abilities\\Spells\\Items\\OrbVenom\\OrbVenomMissile.mdl",10.0,1200.0)        
        call pT.enableHoming(ProjectileTargetEvent.hit,0.0)
    endfunctionOn Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             function onDamage takes Tower tower returns nothing
    call slowAndDamage.applyCustomPower(tower,Event.getTarget(),2*tower.getLevel()+26,tower.getLevel())
endfunctionOn Tower Creation function onCreate takes Tower tower returns nothing
    set tower.userInt=0
    call SetUnitState(tower.getUnit(),UNIT_STATE_MANA,0)
endfunctionPeriodic 
                            
                                PERIODIC_period: 0.2
                            
                             function periodic takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local Iterate inRange
    local real numResults=0.0
    local Unit result
    local Unit next
    local Projectile p
    local PeriodicEvent pE
    
    if GetUnitState(towerUnit,UNIT_STATE_MANA)>10 then
        //Random creep in range
        set inRange=Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,1200)
        loop
            set next=inRange.next()
            exitwhen next==0
            
            set numResults=numResults+1.0 
            if GetRandomReal(0.0,1.0)<=1.0/numResults then
                set result=next
            endif
        endloop
        
        if numResults>0.5 then
            //if GetRandomReal(0.0,3.0)<=2.0 then
                if GetRandomReal(0.0,2.0)<=1.0 then
                    set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-11.0,GetUnitY(towerUnit)-5.0,122.0,result,true,false,false)
                else
                    set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-25.0,GetUnitY(towerUnit)-10.0,179.0,result,true,false,false)
                endif
            //else
                //set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-32.0,GetUnitY(towerUnit)-2.0,147.0,result,true,false,false)
            //endif
            call p.setScale(0.5)
        endif
        
        
        //Manacost
        call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)-10)
    else
        set pE=Event.getCurrentPeriodicEvent()
        set tower.userInt=pE
        call pE.disable()
    endif
    set towerUnit = null
endfunction | 
|   Poison Accumulator v1 3000
                       |  ID: 350  Family ID:  Author: tolleder  Rarity: rare  Element: nature  Attack Type: Decay  Attack Range: 800  Attack CD: 3  Damage: 4933-4933  Mana: 350  Mana regen: 2  Status: Approved | Description: A rare tower which can store poison for later use.  Specials: +10 mana/lvl Accumulator Overload The tower attacks creeps in a range of 1200 every 0.2 seconds till all mana is gone. Each attack (or try to attack) costs 10 mana, deals 1800 damage and applies poison. Level Bonus: +72 damage AC_TYPE_OFFENSIVE_IMMEDIATE  Poison An infected creep takes 600 spelldamage every second for 9 seconds and is slowed by 10%. Level Bonus: +20 poison damage +0.3 seconds poison duration +0.4% slow | Download Toggle Triggers Autocast 
                            
                                caster_art: 
                            
                                AUTOCAST_cooldown: 20.0
                            
                                AUTOCAST_numBuffsBeforeIdle: 0
                            
                                AUTOCAST_isExtended: false
                            
                                AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE
                            
                                AUTOCAST_manacost: 100
                            
                                AUTOCAST_range: 1200
                            
                                AUTOCAST_buffType: 0
                            
                                AUTOCAST_targetSelf: false
                            
                                AUTOCAST_targetType: 0
                            
                                target_art: 
                            
                                AUTOCAST_autoRange: 800
                            
                             private function onAutocast takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local PeriodicEvent pE
    call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)+100)
    if tower.userInt!=0 then
        set pE=tower.userInt
        call pE.enable()
    endif
    set towerUnit = null
endfunctionHeader     globals
        BuffType slowAndDamage
        ProjectileType pT
    endglobals
    
    public function damagePeriodic takes Buff b returns nothing //Poisondamage
        local Tower tower=b.getCaster()
        call tower.doSpellDamage(b.getBuffedUnit(),b.getPower()*20+600,tower.calcSpellCritNoBonus())
    endfunction
       
    public function hit takes Projectile p, Unit creep returns nothing
        local Tower tower=p.getCaster()
        call tower.doSpellDamage(creep,tower.getLevel()*72+1800,tower.calcSpellCritNoBonus())
        call slowAndDamage.applyCustomPower(tower,creep,3*tower.getLevel()+60,tower.getLevel())
    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 slow=Modifier.create()
        call slow.addModification(MOD_MOVESPEED,-0.10,-0.004)
        
        set slowAndDamage=BuffType.create(9,0.3,false)
        call slowAndDamage.setBuffIcon('@@0@@')
        call slowAndDamage.addPeriodicEvent(EventHandler.damagePeriodic,1.0)
        call slowAndDamage.setBuffModifier(slow)
        call slowAndDamage.setStackingGroup("PoisonBattery")
        
        set pT=ProjectileType.create("Abilities\\Spells\\Items\\OrbVenom\\OrbVenomMissile.mdl",10.0,1200.0)        
        call pT.enableHoming(ProjectileTargetEvent.hit,0.0)
    endfunctionOn Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             function onDamage takes Tower tower returns nothing
    call slowAndDamage.applyCustomPower(tower,Event.getTarget(),3*tower.getLevel()+60,tower.getLevel())
endfunctionOn Tower Creation function onCreate takes Tower tower returns nothing
    set tower.userInt=0
    call SetUnitState(tower.getUnit(),UNIT_STATE_MANA,0)
endfunctionPeriodic 
                            
                                PERIODIC_period: 0.2
                            
                             function periodic takes Tower tower returns nothing
    local unit towerUnit=tower.getUnit()
    local Iterate inRange
    local real numResults=0.0
    local Unit result
    local Unit next
    local Projectile p
    local PeriodicEvent pE
    
    if GetUnitState(towerUnit,UNIT_STATE_MANA)>10 then
        //Random creep in range
        set inRange=Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,1200)
        loop
            set next=inRange.next()
            exitwhen next==0
            
            set numResults=numResults+1.0 
            if GetRandomReal(0.0,1.0)<=1.0/numResults then
                set result=next
            endif
        endloop
        
        if numResults>0.5 then
            if GetRandomReal(0.0,3.0)<=2.0 then
                if GetRandomReal(0.0,2.0)<=1.0 then
                    set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)+42.0,GetUnitY(towerUnit),83.0,result,true,false,false)
                else
                    set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)-19.0,GetUnitY(towerUnit)-10.0,147.0,result,true,false,false)
                endif
            else
                set p= Projectile.createFromPointToUnit(pT,tower,1.0,1.0,GetUnitX(towerUnit)+7.0,GetUnitY(towerUnit)+23.0,102.0,result,true,false,false)
            endif
            call p.setScale(0.5)
        endif
        
        
        //Manacost
        call SetUnitState(towerUnit,UNIT_STATE_MANA,GetUnitState(towerUnit,UNIT_STATE_MANA)-10)
    else
        set pE=Event.getCurrentPeriodicEvent()
        set tower.userInt=pE
        call pE.disable()
    endif
    set towerUnit = null
endfunction | 
Description: