Unforgiving Crypt v1 
                3400
                     
             
                 | 
    
    
              ID:              173 
             Family ID:       
             Author:          eMoo 
             Rarity:          rare 
             Element:         darkness 
            
                 Attack Type:     Decay 
                 Attack Range:    1000 
                 Attack CD:       1.95 
                 Damage:  3586-3586 
            
            
             Status:          Approved 
     | 
    
    
    
             
                            Corpse Explosion
                        Explodes a corpse within 1000 range of the tower, causing enemies in 300 range of the corpse to take 20% more damage from darkness towers and move 20% slower for 8 seconds. 5 second cooldown. Doesn't affect Air. Level Bonus: +0.6% slow and damage taken +0.25 seconds duration  
                            Critical Mass
                        Has a 30% chance on attack to shoot an extra projectile. For each projectile shot after the initial one, there is a 39% chance to shoot an extra projectile. There is a maximum of 14 projectiles fired per attack. Level Bonus: +0.3% initial chance +0.6% extra chance  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals
    //@import
    EventTypeList Top_Corpse_explode
    endglobals
    
    //@import
    function burstFire takes Tower tower, real chance, Creep target, real z returns nothing
    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
    endfunction
                        
                    On Attack 
                            
                                ONATTACK_chance: 0.3
                            
                                ONATTACK_chanceLevelAdd: 0.003
                            
                             
                        
                        
                            function onAttack takes Tower tower returns nothing
    call burstFire(tower, 0.39+tower.getLevel()*0.006,Event.getTarget(),200)
endfunction
                        
                    On Tower Creation function onCreate takes Tower tower returns nothing
call tower.addEventList(Top_Corpse_explode)
set tower.userInt = 200 //This will be the base+level damage.
set tower.userInt2 = 200 //Base damage.
set tower.userInt3 = 6 //Level up damage.
endfunction
                        
                     | 
            
             
                Arcane Storm v1 
                3400
                     
             
                 | 
    
    
              ID:              436 
             Family ID:       
             Author:          Ashbringer 
             Rarity:          unique 
             Element:         storm 
            
                 Attack Type:     Energy 
                 Attack Range:    1200 
                 Attack CD:       1.5 
                 Damage:  998-998 
            
            
                 Mana:     150 
                
                     Mana regen:     0 
                
            
             Status:          Approved 
     | 
    
    
    
             Description: Chaotic magical energy that primes enemies for disintegration.  
                            Surge
                        The tower's main attacks have a 1% chance per Attraction stack on the target to send a surge of energy that deals 200% of attack damage to the target and then attempts to jump from enemy to enemy within 750 range of the original target. At each enemy, the chance to jump is calculated based on the next target's Attraction stacks. Can only hit each target once and benefits from Mana Storm's damage bonus. Level Bonus: +0.02% chance per stack +4% attack damage  
                            Arcane Attraction
                        Attacks apply a stack of Attraction on hit and generate 1 mana per stack on each target. Can only gain mana once per target hit on each attack. When an enemy dies, all stacks of Attraction on it will distribute evenly to nearby targets within 500 range and deal 20% attack damage per stack transferred. Attraction lasts indefinitely. Level Bonus: +10 range +0.4% attack damage per stack  
                            Mana Storm
                        Attacks hit up to 2 additional enemies within attack range and consume all mana to deal [mana consumed]% increased damage. Mana Storm gains an additional attack for every 75 mana consumed. If at least 100 mana is consumed, the tower's multicrit is increased by 3 for 2 seconds. If there are less creeps than attacks, the remaining attacks will hit the main target. Level Bonus: -1 mana per extra attack  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals
        BuffType ashbringer_attraction_buff
        BuffType ashbringer_manastorm_buff
        Cast ashbringer_surge_cast
        Cast ashbringer_manastorm_cast
    endglobals
    
    function ashbringer_attraction_apply takes Tower tower, Creep target, integer stacks returns integer
        local Buff b
        local integer i
        
        if stacks<1 then
            set stacks = 1
        endif
        set b = target.getBuffOfType(ashbringer_attraction_buff)
        if ( b != 0 ) then
            set i = b.getPower() + stacks
            call ashbringer_attraction_buff.applyCustomPower(tower, target, 1, i)
        else
            set i = 1
            call ashbringer_attraction_buff.applyCustomPower(tower, target, 1, i)
        endif
        
        return i
    endfunction
    
    function ashbringer_attraction_ondeath takes Buff b returns nothing
        local Tower tower = b.getCaster()
        local Creep target = b.getBuffedUnit()
        local Iterate i = Iterate.overUnitsInRangeOfUnit(tower, TARGET_TYPE_CREEPS, target, 500 + (tower.getLevel() * 10))
        local integer count = i.count()
        local Creep next
        local integer stacks = b.getPower()
        local integer stacks_spare = 0
        local integer stacks_each = 0
        local integer applied = 0
        local real damage_per_stack = tower.getCurrentAttackDamageWithBonus() * (0.2 + (tower.getLevel() * 0.004))
        
        if stacks < count then
            set stacks_spare = stacks
        else
            set stacks_spare = ModuloInteger(stacks, count)
            set stacks_each = (stacks - stacks_spare) / count
        endif
        
        set next = i.next()
        loop
            exitwhen next==0
            if stacks_spare>0 then
                set applied = stacks_each + 1
                set stacks_spare = stacks_spare - 1
            else
                set applied = stacks_each
            endif
            call ashbringer_attraction_apply(tower, next, applied)
            call tower.doAttackDamage(next, applied * damage_per_stack, tower.calcAttackMulticrit(0,0,0))
            call Effect.createSimpleOnUnit("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl", next, "origin").destroy()
            set next = i.next()
        endloop
    endfunction
    
    function ashbringer_surge_start takes Tower tower, Creep target, real mana returns nothing
        local Buff b
        local Iterate i = Iterate.overUnitsInRangeOfUnit(tower, TARGET_TYPE_CREEPS, target, 750)
        local Unit next = i.next()
        local real damage = tower.getCurrentAttackDamageWithBonus() * (2.0 + (tower.getLevel() * 0.04)) * (1 + (mana/100))
        local real chance_per_stack = 0.01 + (tower.getLevel() * S2R("disintegrate_chance_pl"))
        local Unit prev = target
        local boolean jump = true
        
        call ashbringer_surge_cast.targetCastFromCaster(tower, target, 0.0, 0.0)
        call tower.doAttackDamage(target, damage, tower.calcAttackMulticrit(0,0,0))
        
        loop
            exitwhen next==0
            if next == target then
            else
                set b = next.getBuffOfType(ashbringer_attraction_buff)
                
                if b!=0 then
                    if tower.calcChance(I2R(b.getPower())*chance_per_stack) then
                        call ashbringer_surge_cast.targetCastFromCaster(prev, next, 0.0, 0.0)
                        call tower.doAttackDamage(next, damage, tower.calcAttackMulticrit(0,0,0))
                        set prev = next
                    endif
                endif
            endif
            
            set next = i.next()
        endloop
    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 ashbringer_manastorm_modifier = Modifier.create()
    
        set  ashbringer_attraction_buff = BuffType.create(-1, 0, false)
        call ashbringer_attraction_buff.setBuffIcon('@@3@@')
        call ashbringer_attraction_buff.addEventOnDeath(ashbringer_attraction_ondeath)
        
        set ashbringer_manastorm_buff=BuffType.create(2.0, 0.0, true)
        call ashbringer_manastorm_modifier.addModification(MOD_MULTICRIT_COUNT, 3, 0)
        call ashbringer_manastorm_buff.setBuffIcon('@@2@@')
        call ashbringer_manastorm_buff.setBuffModifier(ashbringer_manastorm_modifier)
        
        set ashbringer_surge_cast = Cast.create('@@0@@',"chainlightning",1.0)
        call ashbringer_surge_cast.setSourceHeight(90.0)
        
        set ashbringer_manastorm_cast = Cast.create('@@1@@',"chainlightning",1.0)
        call ashbringer_manastorm_cast.setSourceHeight(90.0)
    endfunction
                        
                    On Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onDamage takes Tower tower returns nothing
    local Buff b
    local Unit main_target = Event.getTarget()
    local real chance_per_stack = 0.01 + (tower.getLevel() * S2R("disintegrate_chance_pl"))
    local Unit target
    local real mana = GetUnitState(tower.getUnit(), UNIT_STATE_MANA)
    local real extra_per = 75 - (tower.getLevel() * 1)
    local integer extra_attacks = 2 + R2I((mana - ModuloReal(mana, extra_per)) / extra_per)
    local real original_damage = Event.damage
    local real damage = original_damage * (1 + (mana/100))
    local Iterate i = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, tower.getRange())
    local boolean iterate_destroyed = false
    local Effect e
    local integer stacks = 0
    local integer total_stacks = 0
    
    set Event.damage = damage
    call tower.subtractMana(mana, true)
    
    if mana>=100 then
        call ashbringer_manastorm_buff.apply(tower, tower, 1)
        call Effect.createColored("Doodads\\Cinematic\\Lightningbolt\\Lightningbolt.mdl", tower.getX(), tower.getY(), 0.0, 270.0, 1.3, 255, 90, 255, 255).setLifetime(0.3)
    endif
    
    loop
        exitwhen extra_attacks == 0
        
        if not iterate_destroyed then
            set target = i.nextRandom()
            if target == 0 then
                set iterate_destroyed = true
                set target = main_target
            endif
        endif
  
        if iterate_destroyed or target != main_target then
            
            set stacks = ashbringer_attraction_apply(tower, target, 1)
            
            if target != main_target then
                call ashbringer_manastorm_cast.targetCastFromCaster(tower, target, 0.0, 0.0)
                set total_stacks = total_stacks + stacks
            endif
            
            call tower.doAttackDamage(target, damage, tower.calcAttackMulticrit(0,0,0))
            
            set extra_attacks = extra_attacks - 1
        endif
    endloop
 
    if not iterate_destroyed then
        call i.destroy()
    endif
    
    call ashbringer_manastorm_cast.targetCastFromCaster(tower, main_target, 0.0, 0.0)
    set stacks = ashbringer_attraction_apply(tower, main_target, 1)
    set total_stacks = total_stacks + stacks
    
    if tower.calcChance(I2R(stacks)*chance_per_stack) then
        call ashbringer_surge_start(tower, main_target, mana)
    endif
    
    call tower.addMana(total_stacks)
endfunction
                        
                    On Tower Creation function onCreate takes Tower tower returns nothing
endfunction
                        
                     | 
            
             
                Nuclear Missile Launcher v1 
                3400
                     
             
                 | 
    
    
              ID:              596 
             Family ID:       
             Author:          Natac 
             Rarity:          unique 
             Element:         iron 
            
                 Attack Type:     Essence 
                 Attack Range:    2400 
                 Attack CD:       10 
                 Damage:  17777-17778 
            
            
             Status:          Approved 
     | 
    
    
    
             Description: Pure manmade destruction.  
                            Specials:
                        Attacks GROUND only Splash attack: 400 AoE: 100% damage 500 AoE: 75% damage 600 AoE: 50% damage  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals
        BuffType natac_LauncherTarget_Buff
        
        //@export
        BuffType natac_cooldownBar_BuffType //COOLDOWN BAR: Buff
        
        //COOLDOWN BAR: Globals 
        hashtable natac_cooldown_map = InitHashtable()
        
        string  BAR_TEXT = "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" // x 60
        integer TIMER        = 0
        integer TEXT_TAG     = 1
        integer BAR          = 2
        integer CURRENT_STEP = 3
        integer TIMER_PERIOD = 4
        // COOLDOWN BAR: End Globals
    endglobals
    
    // === COOLDOWN BAR: Code ===
    // Used to have a cool bar that is showing the time left until the towers cooldown is ready.
    // This function decreases the bar every time a step is over (=the timer expires)
    function oneStepDone takes nothing returns nothing
        local timer   stepTimer   = GetExpiredTimer() 
        local integer stepTimerId = GetHandleId(stepTimer) // The timers id, needed for the hash map
        local texttag bar         = LoadTextTagHandle(natac_cooldown_map, stepTimerId, BAR) // Get the floating text ifself
        local integer currentStep = LoadInteger(natac_cooldown_map, stepTimerId, CURRENT_STEP) + 1 
        local real    colorFactor = currentStep * 0.033 // This factor is used to change the red and green of the bar
        
        if(currentStep < 30) then // Time left: shorten the bar
            call SetTextTagText(bar, SubString(BAR_TEXT, 0, R2I(60-(currentStep*2))), 0.023) // Shorten bar
            call SetTextTagColor(bar, IMinBJ(R2I((1-colorFactor)*510),255), IMinBJ(R2I(colorFactor*510),255), 0, 170) // Fade bar color from red to green
            call SaveInteger(natac_cooldown_map, stepTimerId, CURRENT_STEP, currentStep) // Increase step count
            call TimerStart(stepTimer, LoadReal(natac_cooldown_map, stepTimerId, TIMER_PERIOD), false, function oneStepDone) // Start timer again
        else // Cooldown is ready: Clean up
            call DestroyTextTag(bar)
            call ReleaseTimer(stepTimer)
            
            call RemoveSavedHandle(natac_cooldown_map, stepTimerId, BAR) 
            call RemoveSavedInteger(natac_cooldown_map, stepTimerId, CURRENT_STEP)
            call RemoveSavedReal(natac_cooldown_map, stepTimerId, TIMER_PERIOD)
        endif
        set stepTimer = null
        set bar = null
    endfunction
    
    // Used to have a cool bar that is showing the time left until the towers cooldown is ready.
    // This function shows the bar and starts the timer for the first step
    function onAttack_StartFirstSequence takes Buff b returns nothing
        local texttag bar         = CreateTextTag() // This becomes the bar
        local timer   stepTimer   = NewTimer()   // A timer, expiring everytime the next step will be done
        local integer stepTimerId = GetHandleId(stepTimer)
        local Tower   tower       = b.getBuffedUnit()
        local real    stepPeriod  = tower.getCurrentAttackspeed() / 30 // The time between 2 steps
        local real    offset      = 60 * 0.45 // The offset to center the bar above the unit
    
        call SetTextTagText(bar, BAR_TEXT, 0.023)
        call SetTextTagPermanent(bar, false)
        call SetTextTagColor(bar, 255, 0, 0, 170) // Create bar with some transparency
        call SetTextTagPos(bar, tower.getX()-offset, tower.getY(), 150) // Center bar above the unit
    
        call SaveTextTagHandle(natac_cooldown_map, stepTimerId, BAR, bar) // Store the bar itself
        call SaveInteger(natac_cooldown_map, stepTimerId, CURRENT_STEP, 0) // Store the current step (we start here, so its 0)
        call SaveReal(natac_cooldown_map, stepTimerId, TIMER_PERIOD, stepPeriod) // Store the time between 2 steps
    
        call TimerStart(stepTimer, stepPeriod, false, function oneStepDone) // Start timer
        set bar = null
        set stepTimer = null
    endfunction
    // === COOLDOWN BAR: End Code ===
    
    
    
    // === Nuclear Missle Launcher - Code ===
    function initalizeTargetCounter takes Buff b returns nothing
        set b.userInt = 0
    endfunction
    
    function increaseTargetCounter takes Buff b returns nothing
        set b.userInt = b.userInt + 1
    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
        set  natac_LauncherTarget_Buff = BuffType.create(-1.0, 0.0, false)
        call natac_LauncherTarget_Buff.setBuffIcon('@@0@@')
        call natac_LauncherTarget_Buff.addEventOnCreate(EventHandler.initalizeTargetCounter)
        call natac_LauncherTarget_Buff.setEventOnRefresh(EventHandler.increaseTargetCounter)
        
        // COOLDOWN BAR: Initialize Buff
        set  natac_cooldownBar_BuffType = BuffType.create(-1.0, 0, true)
        call natac_cooldownBar_BuffType.addEventOnAttack(EventHandler.onAttack_StartFirstSequence, 1.0, 0.0)
        // COOLDOWN BAR: End Initialize Buff
    endfunction
                        
                    On Attack 
                            
                                ONATTACK_chance: 1.0
                            
                                ONATTACK_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onAttack takes Tower tower returns nothing
    call natac_LauncherTarget_Buff.apply(tower, Event.getTarget(), tower.getLevel())
endfunction
                        
                    On Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onDamage takes Tower tower returns nothing
    local Unit     target     = Event.getTarget()
    local Buff     targetBuff
    local Effect   targetEffect
    
    if(Event.isMainTarget()) then
        set  targetEffect = Effect.createAnimatedScaled("Abilities\\Weapons\\Mortar\\MortarMissile.mdl",target.getX(),target.getY(),0.0,0,3.0)
        call targetEffect.setAnimationSpeed(0.5)
        call targetEffect.setLifetime(0.05)
        
        set targetBuff = target.getBuffOfType(natac_LauncherTarget_Buff)
        if(targetBuff != 0 and targetBuff.userInt <= 0) then
            call  targetBuff.removeBuff()
        else
            set targetBuff.userInt = targetBuff.userInt - 1 
        endif
    endif
    call  SFXOnUnit("Abilities\\Spells\\Other\\AcidBomb\\BottleMissile.mdl", target.getUnit(), "origin")
endfunction
                        
                    On Tower Creation function onCreate takes Tower tower returns nothing
    call natac_cooldownBar_BuffType.apply(tower, tower, 1)
endfunction
                        
                     | 
            
             
                Grab-O-Bot v1 
                3500
                     
             
                 | 
    
    
              ID:              34 
             Family ID:       
             Author:          cedi 
             Rarity:          unique 
             Element:         iron 
            
                 Attack Type:     Decay 
                 Attack Range:    900 
                 Attack CD:       0.4 
                 Damage:  659-659 
            
            
                 Mana:     100 
                
                     Mana regen:     2.5 
                
            
             Status:          Approved 
     | 
    
    
    
             Description: When you think it looks very fragile, you're right. But its also a devastating machine.  
                            Specials:
                        Splash attack: 75 AoE: 100% damage 100 AoE: 66% damage 125 AoE: 33% damage  
                            Shock
                        Slams all creeps in 250 AoE around the target, dealing 1250 spell damage and stunning for 2 seconds. Level Bonus: +185 damage AC_TYPE_OFFENSIVE_UNIT  
                            Grapple
                        Each time the bot attacks there is an 8% it will grab the target, holding it in place for 2.5 seconds. The duration is reduced to 0.9 seconds for champions and bosses. Level Bonus: +0.32% chance  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Autocast 
                            
                                caster_art: 
                            
                                AUTOCAST_cooldown: 15.00
                            
                                AUTOCAST_numBuffsBeforeIdle: 1
                            
                                AUTOCAST_isExtended: false
                            
                                AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT
                            
                                AUTOCAST_manacost: 50
                            
                                AUTOCAST_range: 900.00
                            
                                AUTOCAST_buffType: 0
                            
                                AUTOCAST_targetSelf: true
                            
                                AUTOCAST_targetType: TARGET_TYPE_CREEPS
                            
                                target_art: 
                            
                                AUTOCAST_autoRange: 900.00
                            
                             
                        
                        
                            private function onAutocast takes Tower tower returns nothing
    local Unit U = Event.getTarget()
    local Iterate I = Iterate.overUnitsInRangeOfUnit( tower, TARGET_CREEPS, U, 250.00 )
    call Effect.createSimpleAtUnit("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", U).destroy()
    call tower.doSpellDamageAoEUnit(U, 250.00, 1250.00 + 185.00 * I2R(tower.getLevel()), tower.calcSpellCritNoBonus(), 0.5)
    loop
        set U = I.next()
        exitwhen U == 0
        call cb_stun.applyOnlyTimed(tower, U, 2.00)
    endloop
endfunction
                        
                    Header     globals
        BuffType BT
    endglobals
    
    function starta takes Buff B returns nothing
        local Lightning li
        local Unit t = B.getBuffedUnit()
        local Unit c = B.getCaster()
        set li = Lightning.createFromPointToPoint("LEAS", c.getX(), c.getY(), c.getZ() + 100.0, t.getX(), t.getY(), t.getZ())
        set B.userInt = li
    endfunction
    
    function end takes Buff B returns nothing
        local Lightning li = B.userInt
        local Creep c = B.getBuffedUnit()
        call li.destroy()
        call c.reorder()
    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
        set BT = BuffType.createDuplicate(cb_stun, 2.5, 0.0, false)
        call BT.setBuffIcon('@@0@@')
        call BT.addEventOnCreate(starta)
        call BT.addEventOnCleanup(end)
    endfunction
                        
                    On Attack 
                            
                                ONATTACK_chance: 0.08
                            
                                ONATTACK_chanceLevelAdd: 0.0032
                            
                             
                        
                        
                            function onAttack takes Tower tower returns nothing
    if Event.getTarget().getSize() >= SIZE_CHAMPION then
        call BT.applyOnlyTimed(tower, Event.getTarget(), 0.9)
    else
        call BT.applyOnlyTimed(tower, Event.getTarget(), 2.5)
    endif
endfunction
                        
                     | 
            
             
                Golden Queen v1 
                3500
                     
             
                 | 
    
    
              ID:              40 
             Family ID:       
             Author:          SirCoqaLot. 
             Rarity:          rare 
             Element:         iron 
            
                 Attack Type:     Physical 
                 Attack Range:    875 
                 Attack CD:       1.35 
                 Damage:  2557-2637 
            
            
             Status:          Approved 
     | 
    
    
    
             Description: Rare tower with a chance to turn lesser creeps into gold instantly. Gains additional gold for each kill and will do more damage the more gold you have.  
                            Specials:
                        +40% bounty collected (+1.6%/lvl)  
                            Transmute
                        This tower has a 5% chance on attack to turn a non boss, non champion target into 18 bonus gold immediately. Level Bonus: +0.04%chance  
                            Gold Greed
                        On attack this tower deals [44 x squareroot (current gold)] spell damage to its target.
                        
                     | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals  
    //@import
    MultiboardValues Sir_gold_bonus
    endglobals 
    
    private function init takes nothing returns nothing
    endfunction
                        
                    On Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onDamage takes Tower tower returns nothing
    
    local Unit creep = Event.getTarget()
    set tower.userReal = 44.0*Pow(GetPlayerState(tower.getOwner().getThePlayer(), PLAYER_STATE_RESOURCE_GOLD),0.5)
    if not creep.isImmune() then
        if creep.getSize() < SIZE_CHAMPION and tower.calcChance(0.05+tower.getLevel()*0.0004) then
            call SFXAtUnit("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl",creep.getUnit())
            call tower.killInstantly(creep)
            call tower.getOwner().giveGold(18,tower.getUnit(), true, true)
        else
            call tower.doSpellDamage(creep,tower.userReal,tower.calcSpellCritNoBonus())   
            call tower.getOwner().displayFloatingTextX(I2S(R2I(tower.getProp_SpellDmgDealt()*tower.userReal)),creep,255, 200, 0,255,0.05,0.0,2.0)
        endif
    endif
endfunction
                        
                    On Tower Details function onTowerDetails takes Tower tower returns MultiboardValues
    set tower.userReal = tower.getProp_SpellDmgDealt()*44.0*Pow(GetPlayerState(tower.getOwner().getThePlayer(), PLAYER_STATE_RESOURCE_GOLD),0.5) 
    call Sir_gold_bonus.setValue(0,I2S(R2I(tower.userReal)))
    return Sir_gold_bonus
endfunction
                        
                     | 
            
             
                Nortrom the Silencer v1 
                3500
                     
             
                 | 
    
    
              ID:              101 
             Family ID:       
             Author:          i_mOck_death 
             Rarity:          unique 
             Element:         astral 
            
                 Attack Type:     Physical 
                 Attack Range:    800 
                 Attack CD:       3 
                 Damage:  7063-7063 
            
            
                 Mana:     400 
                
                     Mana regen:     6 
                
            
             Status:          Approved 
     | 
    
    
    
             Description: Shh...Silence is Golden...  
                            Glaives of Wisdom
                        Every attack an extra glaive is shot out at the cost of 40 mana. This glaive deals physical damage equal to Nortrom's attack damage and targets the creep with the least health in Nortrom's attack range.
                        
                     
                            Last Word
                        If Nortrom attacks a silenced creep, then he does 20% more damage. This affects Glaives of Wisdom as well. Level Bonus: +3.2% damage  
                            Curse of the Silent
                        Every 7 seconds creeps within 800 range of Nortrom are silenced for 2 seconds. Level Bonus: +0.04 silence duration  
                            Global Silence - Aura
                        All towers within 350 range of Nortrom have a 3% attackspeed adjusted chance to silence targeted creeps for 1 second. Duration is halved against bosses. Level Bonus: +0.08% chance +0.04 silence duration  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals
        ProjectileType glaive_of_wisdom
        BuffType global_silence
    endglobals
    
    function glaive_hit takes Projectile p,Unit creep returns nothing
        local Tower tower = p.getCaster() 
        local real damage = tower.getCurrentAttackDamageWithBonus()
        if creep.isSilenced() == true then
            set damage = damage * (1.2+tower.getLevel()*.032)
            call Effect.createScaled("Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl", GetUnitX(creep.getUnit()), GetUnitY(creep.getUnit()), 30, 0, 2).destroy()
        endif
        call tower.doAttackDamage(creep,damage,tower.calcAttackMulticrit(0,0,0))
    endfunction
     
    function silence takes Buff b returns nothing
        local Tower tower = b.getCaster()  
        local Tower towero = b.getBuffedUnit() 
        local Creep target = Event.getTarget()
        
        if tower.calcChance((0.03+(0.0008*tower.getLevel()))*towero.getBaseAttackspeed()) then
            if target.getSize() == SIZE_BOSS then
                call cb_silence.applyOnlyTimed(tower,target,.5+tower.getLevel()*.02)
            else
                call cb_silence.applyOnlyTimed(tower,target,1+tower.getLevel()*.04)
            endif
        endif      
    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
        set glaive_of_wisdom = ProjectileType.createInterpolate("Abilities\\Weapons\\BloodElfSpellThiefMISSILE\\BloodElfSpellThiefMISSILE.mdl",1000)
        call glaive_of_wisdom.setEventOnInterpolationFinished(ProjectileTargetEvent.glaive_hit)
        
        set global_silence = BuffType.createAuraEffectType(true)
        call global_silence.setBuffIcon('@@0@@') 
        call global_silence.addEventOnAttack(silence,1.0, 0.0) 
    endfunction
                        
                    On Attack 
                            
                                ONATTACK_chance: 1.0
                            
                                ONATTACK_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onAttack takes Tower tower returns nothing
    local Creep target = Event.getTarget()
    local Creep next
    local Iterate it
    if tower.subtractMana(40, false) == 40 then
        set it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_CREEPS, 800)
        loop
            set next=it.next()
            exitwhen next==0
            if GetUnitState(next.getUnit(),UNIT_STATE_LIFE) < GetUnitState(target.getUnit(),UNIT_STATE_LIFE) then
                set target = next
            endif
        endloop
        call Projectile.createLinearInterpolationFromUnitToUnit(glaive_of_wisdom,tower,1,1,tower,target,0,true).setScale(.5)
    endif
endfunction
                        
                    On Damage 
                            
                                ONDAMAGE_chance: 1.0
                            
                                ONDAMAGE_chanceLevelAdd: 0.0
                            
                             
                        
                        
                            function onDamage takes Tower tower returns nothing
    local Creep creep = Event.getTarget()
    local unit c = creep.getUnit()
    if creep.isSilenced() == true then
        set Event.damage = Event.damage * (1.2+tower.getLevel()*.032)
        call Effect.createScaled("Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl", GetUnitX(c), GetUnitY(c), 30, 0, 2).destroy()
    endif
    set c = null
endfunction
                        
                    Periodic 
                            
                                PERIODIC_period: 7
                            
                             
                        
                        
                            function periodic takes Tower tower returns nothing
    local Creep next
    local Iterate it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, 800)
    loop
        set next=it.next()
        exitwhen next==0
        call cb_silence.applyOnlyTimed(tower,next,2+tower.getLevel()*.04)
    endloop
endfunction
                        
                    Tower Aura 
                            
                                AURA_powerAdd: 1
                            
                                AURA_auraEffect: global_silence
                            
                                AURA_levelAdd: 1
                            
                                AURA_power: 0
                            
                                AURA_targetType: TARGET_TYPE_TOWERS
                            
                                AURA_targetSelf: true
                            
                                AURA_level: 0
                            
                                AURA_auraRange: 350
                            
                             
                        
                        
                     | 
            
             
                Genis Sage v1 
                3500
                     
             
                 | 
    
    
              ID:              131 
             Family ID:       
             Author:          i_mOck_death 
             Rarity:          unique 
             Element:         ice 
            
                 Attack Type:     Energy 
                 Attack Range:    900 
                 Attack CD:       1.5 
                 Damage:  1892-1892 
            
            
                 Mana:     200 
                
                     Mana regen:     3 
                
            
             Status:          Approved 
     | 
    
    
    
             Description: Powerful mage who is adept in using the water magics.  
                            Speed Cast
                        Whenever Genis uses one of his abilities, he has a 15% chance to increase his trigger chances and his attackspeed by 25% for 3.5 seconds. This ability does not stack, but can be retriggered. Level Bonus: +1% trigger chance +1% attackspeed +0.1 seconds  
                            Aqua Edge
                        Each attack Genis has a 20% chance to launch 3 blades of water in front of him at different angles. Each blade deals 1500 damage to each creep it passes through. Costs 15 mana. Level Bonus: +0.6% chance +150 damage  
                            Spread
                        Whenever Genis damages a creep, he has a 10% chance to lift creeps up for 0.8 seconds in a 250 AoE around the damaged creep. Each creep is also dealt 3000 spell damage. Costs 40 mana. Level Bonus: +0.2% chance +200 spell damage  
                            Magic Boost
                        Every 7 seconds Genis has a 30% chance to increase the spell damage of all towers within 350 range of him by 20% for 3 seconds. Costs 10 mana. Level Bonus: +1% spell damage  | 
    
    
    
            Download
            
            
            
            
             Toggle Triggers Header     globals
        Cast mOck_Aedge
        BuffType mOck_spread
        BuffType mOck_speedcast
        BuffType mOck_mboost
    endglobals
    
    function spread_up takes Buff b returns nothing
        local Creep creep = b.getBuffedUnit()
        call creep.adjustHeight(300,(300/(.4*b.getCaster().getProp_BuffDuration()))*creep.getProp_DebuffDuration())
    endfunction
    
    function spread_down takes Buff b returns nothing
        local Creep creep = b.getBuffedUnit()
        call creep.adjustHeight(-300,(300/(.4*b.getCaster().getProp_BuffDuration()))*creep.getProp_DebuffDuration())
    endfunction
    
    function speedcast takes Tower t returns nothing
        if t.calcChance(.15) then
            call mOck_speedcast.apply(t,t,t.getLevel())
        endif
    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 b = Modifier.create()
        
        set mOck_speedcast = BuffType.create(3.5,.1,true)
        call m.addModification(MOD_TRIGGER_CHANCES,.25,.01)
        call m.addModification(MOD_ATTACKSPEED,.25,.01)
        call mOck_speedcast.setBuffModifier(m)
        call mOck_speedcast.setBuffIcon('@@1@@')
        
        set mOck_mboost = BuffType.create(3,0,true)
        call b.addModification(MOD_SPELL_DAMAGE_DEALT,.2,.01)
        call mOck_mboost.setBuffModifier(b)
        call mOck_mboost.setBuffIcon('@@2@@')
        
        set mOck_spread = BuffType.createDuplicate(cb_stun,.8,0,false)
        call mOck_spread.addEventOnCreate(spread_up)
        call mOck_spread.addEventOnCleanup(spread_down)
        
        set mOck_Aedge = Cast.create('@@0@@', "carrionswarm",1)
    endfunction
                        
                    On Attack 
                            
                                ONATTACK_chance: 0.2
                            
                                ONATTACK_chanceLevelAdd: 0.006
                            
                             
                        
                        
                            function onAttack takes Tower tower returns nothing
    local Unit target = Event.getTarget()
    local integer level = tower.getLevel()
    local real x2 = target.getX()
    local real y2 = target.getY()
    local real x = tower.getX()
    local real y = tower.getY()
    local real facing =  bj_RADTODEG * Atan2(y2-y, x2-x)
    local real angle = -20
    
    if tower.subtractMana(15, false) == 15 then
        loop
            exitwhen angle > 20
            call mOck_Aedge.pointCastFromCasterOnPoint(tower,x+25 * Cos((facing+angle) * bj_DEGTORAD),y+25 * Sin((facing+angle) * bj_DEGTORAD),1500+(level*150),tower.calcSpellCritNoBonus())
            set angle = angle + 20
        endloop
        call speedcast(tower)
    endif
endfunction
                        
                    On Damage 
                            
                                ONDAMAGE_chance: .10
                            
                                ONDAMAGE_chanceLevelAdd: 0.002
                            
                             
                        
                        
                            function onDamage takes Tower tower returns nothing
    local integer level = tower.getLevel()
    local Unit creep = Event.getTarget()
    local Unit next
    local Iterate it  
    local real crit 
    
    if tower.subtractMana(40, false) == 40 then
        set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,250)
        call SFXAtUnit("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",creep.getUnit())
        set crit = tower.calcSpellCritNoBonus()
        loop
            set next = it.next()
            exitwhen next == 0
            call tower.doSpellDamage(next,3000+(200*level),crit)
            call mOck_spread.apply(tower,next,0)
        endloop
        call speedcast(tower)
    endif
endfunction
                        
                    On Tower Creation function onCreate takes Tower tower returns nothing
    call AddUnitAnimationProperties(tower.getUnit(), "stand alternate", false)
endfunction
                        
                    Periodic 
                            
                                PERIODIC_period: 7
                            
                             
                        
                        
                            function periodic takes Tower tower returns nothing
    local integer level = tower.getLevel() 
    local Tower next
    local Iterate it
    if tower.calcChance(.3) and tower.subtractMana(40, false) == 40 then
        set it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TOWERS,350)
        loop
            set next = it.next()
            exitwhen next == 0
            call mOck_mboost.apply(tower,next,level)
        endloop
        call speedcast(tower)
    endif
endfunction
                        
                     | 
Description: