Teacher v1
70
ID:
427
Family ID:
Author:
Deikorim / Limfa
Rarity:
uncommon
Element:
astral
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1.5
Damage:
86-90
Status:
Approved

Description:

Teacher teaches you to attack!
Specials:
+20% exp gain
Knowledge
When the teacher attacks there's a 10% chance a random tower in 600 range will learn from her, gaining 1 experience. 

Level Bonus:
+0.6% chance
Download

Toggle Triggers

Header

    globals
        //@export
        ProjectileType knowledge_green
        //@export
        ProjectileType knowledge_blue
        //@export
        ProjectileType knowledge_red
        //@export
        MultiboardValues limfa_teacherboard
    endglobals
    
    function hit takes Projectile p, Unit result returns nothing
        local Tower t = p.getCaster()
        if result.getUID() == p.userInt then
            call result.addExp(p.userReal)
            if Tower(p.userInt2).getUID() == t.getUID() then
                set t.userReal2 = t.userReal2 + p.userReal * result.getProp_ExpReceived()
            endif
        endif
    endfunction 
    
    //@export
    function teacher_attack takes Tower tower, real xp returns nothing
        local Iterate inRange
        local Unit result
        local ProjectileType pt
        local Projectile p
        local integer i
        
        
        if tower.calcChance(0.10+0.006*tower.getLevel()) then
            set inRange = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TOWERS,600)
            set result = inRange.nextRandom()
            if result == tower then
                set result = inRange.nextRandom()
            endif
            
            if result != 0 then
                set i = GetRandomInt(1,3)
                if i == 1 then
                    set pt = knowledge_green
                elseif i == 2 then
                    set pt = knowledge_red
                elseif i == 3 then
                    set pt = knowledge_blue
                endif
                set p = Projectile.createFromUnitToUnit(pt, tower, 1.0, 1.0, tower, result, true, false, true)
                call p.setScale(0.7)
                set p.userReal = xp
                set p.userInt = result.getUID()
                set p.userInt2 = tower.getUID()
                call inRange.destroy()
            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 limfa_teacherboard = MultiboardValues.create(1)
        call limfa_teacherboard.setKey(0,"Xp Granted")
        set knowledge_green = ProjectileType.create( "Objects\\InventoryItems\\tomeGreen\\tomeGreen.mdl", 20.0, 450.00 ) 
        call knowledge_green.enableFreeRotation()
        call knowledge_green.disableExplodeOnHit()
        call knowledge_green.enableHoming( ProjectileTargetEvent.hit, 0 )
        set knowledge_blue = ProjectileType.create( "Objects\\InventoryItems\\tomeBlue\\tomeBlue.mdl", 20.0, 450.00 ) 
        call knowledge_blue.enableFreeRotation()
        call knowledge_blue.disableExplodeOnHit()
        call knowledge_blue.enableHoming( ProjectileTargetEvent.hit, 0 )
        set knowledge_red = ProjectileType.create( "Objects\\InventoryItems\\tomeRed\\tomeRed.mdl", 20.0, 450.00 ) 
        call knowledge_red.enableFreeRotation()
        call knowledge_red.disableExplodeOnHit()
        call knowledge_red.enableHoming( ProjectileTargetEvent.hit, 0 )

    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    call teacher_attack(tower,1)
    call SetUnitAnimationByIndex(tower.getUnit(), 3)
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    local Tower preceding = Event.getPrecedingTower()
    if (preceding.getFamily() == tower.getFamily()) then
        set tower.userReal2 = preceding.userReal2
    else
        set tower.userReal2 = 0
    endif
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
    call limfa_teacherboard.setValue(0, formatFloat(tower.userReal2,1))
    return limfa_teacherboard
endfunction
Embershell Turtle Hatchling v1
70
ID:
532
Family ID:
Author:
Velex
Rarity:
uncommon
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.25
Damage:
50-49
Mana:
10
Mana regen:
1
Status:
Approved

Description:

Embershell Turtles are volatile creatures who tend to sporadically attack just about everything. Luckily, they tend to run out of steam rather quickly.
Specials:
+0.5 mana/lvl
Overheat
Each attack costs 1 mana, which is regenerated at a rate of 1 mana per second.
Download

Toggle Triggers

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
   
  local unit towerUnit = tower.getUnit()
  local real mana = GetUnitState(towerUnit, UNIT_STATE_MANA)
  if (mana < 1) then
    call tower.orderStop()
  else
    call SetUnitState(towerUnit , UNIT_STATE_MANA, mana-1)
  endif
  set towerUnit = null
endfunction
Broken Fire Pit v1
70
ID:
555
Family ID:
Author:
Boekie
Rarity:
common
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.9
Damage:
57-57
Status:
Approved

Description:

A fire pit that has the ability to unleash some powerful flames.
Specials:
2x multicrit
Hot Coals
Whenever this tower kills a creep it gains 15% bonus crit chance for 7.5 seconds.

Level Bonus:
+0.05 sec duration
+0.3% crit chance
Download

Toggle Triggers

Header

    globals
    //@export 
    BuffType boekie_coals_buff 
    endglobals
    
    //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()  
    call m.addModification(MOD_ATK_CRIT_CHANCE,0.15,0.001)  
    set boekie_coals_buff = BuffType.create(0.0,0.0,true) //0.0 time since I will apply it custom timed  
    call boekie_coals_buff.setBuffModifier(m)  
    call boekie_coals_buff.setBuffIcon('@@0@@') 
    call boekie_coals_buff.setStackingGroup("boekie_coals") 
    endfunction

On Kill

function onKill takes Tower tower returns nothing
local integer lvl = tower.getLevel() 
call boekie_coals_buff.applyCustomTimed(tower,tower,lvl*3,7.5+0.05*lvl) 
endfunction
Broken Cage v1
70
ID:
580
Family ID:
Author:
Chronos
Rarity:
common
Element:
darkness
Attack Type:
Decay
Attack Range:
800
Attack CD:
1.5
Damage:
88-93
Status:
Approved

Description:

Common darkness tower, adept at eliminating magical, nature and undead foes.
Banish
Magic, undead and nature creeps damaged by this tower suffer an additional 35% of that damage as spelldamage.

Level Bonus:
+1% damage
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Unit creep = Event.getTarget()
    if creep.getCategory() <= CATEGORY_NATURE then
        call tower.doSpellDamage(creep, Event.damage * (0.35 + (0.01 * tower.getLevel())), tower.calcSpellCritNoBonus())
        call SFXAtUnit("Abilities\\Spells\\NightElf\\ManaBurn\\ManaBurnTarget.mdl", creep.getUnit())
    endif
endfunction
Small Frozen Mushroom v1
70
ID:
591
Family ID:
Author:
BetrayedKnight
Rarity:
common
Element:
ice
Attack Type:
Elemental
Attack Range:
950
Attack CD:
1.1
Damage:
57-62
Status:
Approved

Description:

A colony of mushrooms able to chill living flesh. Deals bonus damage to humanoids orcs and nature but is weak against undead.
Specials:
-50% dmg to undead
+35% dmg to nature (+1.2%/lvl)
+35% dmg to orcs (+1.2%/lvl)
+35% dmg to humanoids (+1.2%/lvl)
Download
Rotted Flashing Grave v1
70
ID:
650
Family ID:
Author:
Natac
Rarity:
common
Element:
storm
Attack Type:
Energy
Attack Range:
2000
Attack CD:
1
Damage:
36-36
Status:
Approved

Description:

A common grave of a fallen storm warrior, whose wrath outlasts its death and still seeks for revenge.
Specials:
+10% dmg to magical (+1%/lvl)
Wrath of the Storm - Aura
The enormous wrath of the dead warrior flows out of this tower undirected. So the tower only hits a random target in range each attack.
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType natac_flashingGraveRandomTarget_BuffType
    endglobals
    
    function setUserInt takes Buff b returns nothing        
        set   b.userInt = b.getCaster() // To avoid this call on every "onAttack"-Event
    endfunction
    
    function attackRandomTarget takes Buff b returns nothing
        local Tower      tower     = b.userInt
        local Iterate    iterator  = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, 2000)
        local integer    loopIndex = 0 // Temp integer variable in both loops. Used as array index and total number of possible targets
        local Unit       loopUnit      // Temp unit variable. Used for the loop and to store the choosen target
        local Unit array unitsInRange  // Contains all units found by the iterator

        // --- Find a random Target ---
        // Add all units to the array. So the array gets filled and we can also count the number of
        // possible targets in the loopIndex.
        loop  
            set loopUnit = iterator.next()
            exitwhen loopUnit == 0 
            set unitsInRange[loopIndex] = loopUnit
            set loopIndex = loopIndex + 1
        endloop
        set loopUnit = unitsInRange[GetRandomInt(0,loopIndex-1)] // Get random target
        
        call IssueTargetOrder(tower.getUnit(), "attack", loopUnit.getUnit())
    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_flashingGraveRandomTarget_BuffType = BuffType.createAuraEffectType(true)
        call natac_flashingGraveRandomTarget_BuffType.addEventOnCreate(EventHandler.setUserInt)
        call natac_flashingGraveRandomTarget_BuffType.addEventOnAttack(EventHandler.attackRandomTarget, 1, 0)
    endfunction

Tower Aura

AURA_auraEffect: natac_flashingGraveRandomTarget_BuffType AURA_power: 1 AURA_level: 1 AURA_auraRange: 0 AURA_targetType: TARGET_TYPE_PLAYER_TOWERS + TARGET_TYPE_ELEMENT_STORM AURA_levelAdd: 0 AURA_powerAdd: 0 AURA_targetSelf: true
Skink v1
150
ID:
254
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
nature
Attack Type:
Decay
Attack Range:
800
Attack CD:
1
Damage:
28-34
Status:
Approved

Description:

It likes to hug people.
Poisonous Skin - Aura
This and any towers in 200 range gain a poisonous attack. The poison deals 3 spell damage per second for 5 seconds. The effect stacks and is attack speed and range adjusted.

Level Bonus:
+0.12 spell damage per second
Download

Toggle Triggers

Header

            globals
        //@export
        BuffType cedi_skinkA //Aura
        //@export
        BuffType cedi_skinkB //Buff
    endglobals
    
    function poisenskin takes Buff B returns nothing
        local Tower C = B.getCaster()
        local Tower T = B.getBuffedUnit()
        local Unit U = Event.getTarget()
        local Buff P = U.getBuffOfType( cedi_skinkB )
        local real dmg = ( C.userReal + C.userReal2 * C.getLevel() ) * T.getCurrentAttackspeed() / ( T.getRange() / 800.00 ) 
        
        if P != 0 then
            if P.getCaster().getUID() == P.userInt then
                call P.refreshDuration()
                set P.userReal = P.userReal + dmg
            else
                set dmg = P.userReal + dmg
                call P.removeBuff()
                set P = cedi_skinkB.apply( C, U, C.getLevel() )
                set P.userInt = C.getUID()
                set P.userReal = dmg
            endif
        else
            set P = cedi_skinkB.apply( C, U, C.getLevel() )
            set P.userInt = C.getUID()
            set P.userReal = dmg
        endif
    endfunction
    
    function dot takes Buff B returns nothing
        local Tower T = B.getCaster()
        call T.doSpellDamage( B.getBuffedUnit(), B.userReal, T.calcSpellCritNoBonus() )
        call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\CorrosiveBreath\\ChimaeraAcidTargetArt.mdl", T.getUnit(), "head" ) )
    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 cedi_skinkA = BuffType.createAuraEffectType( true )
        call cedi_skinkA.setBuffIcon( '@@0@@' )
        call cedi_skinkA.addEventOnAttack( poisenskin, 1.0, 0.0 )
        
        set cedi_skinkB = BuffType.create( 5.00, 0.0, false )
        call cedi_skinkB.setBuffIcon( '@@1@@' )
        call cedi_skinkB.addPeriodicEvent( dot, 1.0 )
    endfunction
        

On Tower Creation

function onCreate takes Tower tower returns nothing
            
set tower.userReal = 3
    set tower.userReal2 = 0.12
        
endfunction

Tower Aura

AURA_powerAdd: 1 AURA_auraEffect: cedi_skinkA AURA_levelAdd: 1 AURA_power: 0 AURA_targetType: TARGET_TYPE_TOWERS AURA_targetSelf: true AURA_level: 0 AURA_auraRange: 200