Nature Sprites v1
400
ID:
396
Family ID:
Author:
DaveMatthews
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
900
Attack CD:
1.2
Damage:
338-338
Mana:
50
Mana regen:
2.5
Status:
Approved

Description:

Friendly spirits that live in the trees.
Nature's Gift
One of the spirits flies towards a tower in 500 range and buffs it for 5 seconds. The buff has a different effect depending on the tower's element:
+28% experience for Astral
+16% spell damage for Darkness
+4% crit chance for Nature
+16% damage for Fire
+20% buff duration for Ice
+8% attack speed for Storm
+6% item chance for Iron
The buffed tower has a 25% chance to receive another random effect in addition to the first one.

Level Bonus:
+0.8% experience
+0.4% spell damage
+0.1% crit chance
+0.4% damage
+0.6% buff duration
+0.2% attack speed
+0.14% item chance

AC_TYPE_OFFENSIVE_BUFF
 45, 500 range, 2s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 2 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 45 AUTOCAST_range: 500 AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_numBuffsBeforeIdle: 5 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: 0 AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Projectile p
    set p = Projectile.createFromUnitToUnit(dave_sprite, tower, 0, 0, tower, Event.getTarget(), true, false, false)
    call p.setScale(0.75)
    call p.color(50,255,50,255)
endfunction

Header

    globals
        BuffType dave_gift
        //@export
        ProjectileType dave_sprite
    endglobals
    
function gift_create takes Buff B returns nothing
    local Tower target = B.getBuffedUnit()
    local Tower tower = B.getCaster()
    local integer elem = target.getCategory()
    local integer relem
    local integer level = B.getLevel()
    local real memberModifier = tower.userReal // scale factor based on family member
    
    // Ensure caster is still alive.
    if tower == 0 then
        return
    endif

    if elem == Element.ASTRAL then
        set B.userInt = MOD_EXP_RECEIVED
        set B.userReal = (0.28 + level * 0.008) * memberModifier
    elseif elem == Element.DARKNESS then
        set B.userInt = MOD_SPELL_DAMAGE_DEALT
        set B.userReal = (0.16 + level * 0.004) * memberModifier
    elseif elem == Element.NATURE then
        set B.userInt = MOD_ATK_CRIT_CHANCE
        set B.userReal = (0.04 + level * 0.001) * memberModifier
    elseif elem == Element.FIRE then
        set B.userInt = MOD_DAMAGE_ADD_PERC
        set B.userReal = (0.16 + level * 0.004) * memberModifier
    elseif elem == Element.ICE  then
        set B.userInt = MOD_BUFF_DURATION
        set B.userReal = (0.2 + level * 0.006) * memberModifier
    elseif elem == Element.STORM  then
        set B.userInt = MOD_ATTACKSPEED
        set B.userReal = (0.08 + level * 0.002) * memberModifier
    elseif elem == Element.IRON  then
        set B.userInt = MOD_ITEM_CHANCE_ON_KILL
        set B.userReal = (0.06 + level * 0.0016) * memberModifier
    endif
    // Apply the modification
    call target.modifyProperty(B.userInt, B.userReal)

    if tower.calcChance(0.25) then
        set relem = GetRandomInt(0,5)
        // Relem cannot be 6 (IRON), so we apply iron buff if elem == relem.
        if elem == relem  then
            set B.userInt2 = MOD_ITEM_CHANCE_ON_KILL
            set B.userReal2 = (0.06 + level * 0.0016) * memberModifier
        elseif relem == Element.ASTRAL then
            set B.userInt2 = MOD_EXP_RECEIVED
            set B.userReal2 = (0.28 + level * 0.008) * memberModifier
        elseif relem == Element.DARKNESS then
            set B.userInt2 = MOD_SPELL_DAMAGE_DEALT
            set B.userReal2 = (0.16 + level * 0.004) * memberModifier
        elseif relem == Element.NATURE then
            set B.userInt2 = MOD_ATK_CRIT_CHANCE
            set B.userReal2 = (0.04 + level * 0.001) * memberModifier
        elseif relem == Element.FIRE then
            set B.userInt2 = MOD_DAMAGE_ADD_PERC
            set B.userReal2 = (0.16 + level * 0.004) * memberModifier
        elseif relem == Element.ICE  then
            set B.userInt2 = MOD_BUFF_DURATION
            set B.userReal2 = (0.2 + level * 0.006) * memberModifier
        elseif relem == Element.STORM  then
            set B.userInt2 = MOD_ATTACKSPEED
            set B.userReal2 = (0.08 + level * 0.002) * memberModifier
        endif
        // Apply the bonus modification
        call target.modifyProperty(B.userInt2, B.userReal2)
        set B.userInt3 = Effect.createColored("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl", target.getX(), target.getY(), 150, 0, 0.9, 255, 180, 180, 255)
    else
        set B.userInt2 = 0
        set B.userInt3 = Effect.createScaled("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl", target.getX(), target.getY(), 150, 0, 0.75)
    endif
    
endfunction

function effect_clean takes Buff B returns nothing
    local Tower target = B.getBuffedUnit()
    // Remove the modification
    call target.modifyProperty(B.userInt, -B.userReal)
    if B.userInt2 != 0 then
        // Remove the bonus modification
        call target.modifyProperty(B.userInt2, -B.userReal2)
    endif
    if B.userInt3 != 0 then
      call Effect(B.userInt3).destroy()
    endif
endfunction

function spritehit takes Projectile P, Unit target returns nothing
    local Tower tower = P.getCaster()
    call dave_gift.apply(tower, target, 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
     set dave_gift = BuffType.create(5,0,true)
     call dave_gift.setBuffIcon('@@0@@')
     call dave_gift.addEventOnCreate(gift_create)
     call dave_gift.addEventOnCleanup(effect_clean)
     
     set dave_sprite = ProjectileType.create("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl",4,400)
     call dave_sprite.enableHoming(ProjectileTargetEvent.spritehit,0)
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 1.0 //Member buff strength modifier
endfunction
Nature Spirits v1
1500
ID:
397
Family ID:
Author:
DaveMatthews
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
900
Attack CD:
1.2
Damage:
1267-1267
Mana:
50
Mana regen:
2.5
Status:
Approved

Description:

Friendly spirits that live in the trees.
Nature's Gift
One of the spirits flies towards a tower in 500 range and buffs it for 5 seconds. The buff has a different effect depending on the tower's element:
+42% experience for Astral
+24% spell damage for Darkness
+6% crit chance for Nature
+24% damage for Fire
+30% buff duration for Ice
+12% attack speed for Storm
+9% item chance for Iron
The buffed tower has a 25% chance to receive another random effect in addition to the first one.

Level Bonus:
+1.2% experience
+0.6% spell damage
+0.15% crit chance
+0.6% damage
+0.9% buff duration
+0.3% attack speed
+0.21% item chance

AC_TYPE_OFFENSIVE_BUFF
 45, 500 range, 2s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 2 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 45 AUTOCAST_range: 500 AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_numBuffsBeforeIdle: 5 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: 0 AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Projectile p
    set p = Projectile.createFromUnitToUnit(dave_sprite, tower, 0, 0, tower, Event.getTarget(), true, false, false)
    call p.setScale(1.5)
    call p.color(50,255,50,255)
endfunction

Header

    globals
        //@import
        ProjectileType dave_sprite
    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
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 1.5
endfunction
Nature Souls v1
2800
ID:
398
Family ID:
Author:
DaveMatthews
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
900
Attack CD:
1.2
Damage:
2364-2364
Mana:
50
Mana regen:
2.5
Status:
Approved

Description:

Friendly spirits that live in the trees.
Nature's Gift
One of the spirits flies towards a tower in 500 range and buffs it for 5 seconds. The buff has a different effect depending on the tower's element:
+56% experience for Astral
+32% spell damage for Darkness
+8% crit chance for Nature
+32% damage for Fire
+40% buff duration for Ice
+16% attack speed for Storm
+12% item chance for Iron
The buffed tower has a 25% chance to receive another random effect in addition to the first one.

Level Bonus:
+1.6% experience
+0.8% spell damage
+0.2% crit chance
+0.8% damage
+1.2% buff duration
+0.4% attack speed
+0.28% item chance

AC_TYPE_OFFENSIVE_BUFF
 45, 500 range, 2s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 2 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 45 AUTOCAST_range: 500 AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_numBuffsBeforeIdle: 5 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: 0 AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Projectile p
    set p = Projectile.createFromUnitToUnit(dave_sprite, tower, 0, 0, tower, Event.getTarget(), true, false, false)
    call p.setScale(1.5)
    call p.color(50,255,50,255)
endfunction

Header

    globals
        //@import
        ProjectileType dave_sprite
    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
    endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 2.0
endfunction