The Furnace v1
4000
ID:
434
Family ID:
Author:
Ashbringer
Rarity:
unique
Element:
fire
Attack Type:
Elemental
Attack Range:
1000
Attack CD:
1.8
Damage:
988-988
Mana:
3000
Mana regen:
0
Status:
Approved

Description:

Feel the heat.
Specials:
Splash attack:
   300 AoE: 100% damage
Intense Heat
Expends all mana to unleash a wave of heat, dealing [Mana x 7] spell damage and applying Lingering Flame to all enemies in 1000 range. Increases the attack and spell crit chance of nearby towers within 350 range by [Mana / 300]% for 4 seconds.

Level Bonus:
+0.2 spell damage per mana

AC_TYPE_OFFENSIVE_IMMEDIATE
 100, 750 range, 5s cooldown
Uncontrollable Flames
The tower attacks a random enemy in range with each attack. Enemies hit are inflicted with Lingering Flame, dealing 100 spell damage per second for 10 seconds. This effect stacks.

Level Bonus:
+2 spell damage
Flames of the Forge - Aura
Attack speed, trigger chances, spell damage, spell crit chance and spell crit damage bonuses on this tower are applied to Common and Uncommon Fire towers in 350 range at a rate of 50%.

Level Bonus:
+2% stats
Feed the Flames - Aura
This tower fuels itself in various ways. Gains 1% of maximum mana on attack. Whenever Lingering Flame deals damage, there is a 20% chance to gain 0.5% of maximum mana per stack. On kill, gains 4% of total mana and maximum mana is increased by 10. 

Level Bonus:
+0.4% chance
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 5 AUTOCAST_autoRange: 750 AUTOCAST_manacost: 100 AUTOCAST_range: 750 AUTOCAST_targetType: 0 AUTOCAST_numBuffsBeforeIdle: 0 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_buffType: 0 AUTOCAST_isExtended: true AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Iterate damagecast = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,tower,1000)
    local Iterate buffcast = Iterate.overUnitsInRangeOfUnit(tower,TARGET_TOWERS,tower,350)
    local Unit next
    local real towermana = GetUnitState( tower.getUnit(), UNIT_STATE_MANA)
    local real fxscale = 0.8 + ((RMinBJ(towermana, 3000) / 3000) * 0.9)
    
    call Effect.createScaled("Objects\\Spawnmodels\\Human\\SmallFlameSpawn\\SmallFlameSpawn.mdl", tower.getX(), tower.getY(), 0, 270, fxscale).setLifetime(6.6)
    loop
        set next = damagecast.next()
        exitwhen next == 0
        call ashbringer_linger_apply(tower, next)
        call tower.doSpellDamage(next, (7 + (tower.getLevel() * 0.2)) * towermana, tower.calcSpellCritNoBonus())
        call Effect.createSimpleOnUnit("Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", next, "origin").setLifetime(3.0)
    endloop

    loop
        set next = buffcast.next()
        exitwhen next == 0
            call ashbringer_intense_buff.apply(tower,next,R2I(towermana/15.0))
    endloop
    call tower.subtractMana(towermana, true)
endfunction

Header

    globals
    BuffType ashbringer_linger_buff
    BuffType ashbringer_heart_aura
    BuffType ashbringer_intense_buff
    BuffType ashbringer_attackrandom_buff
    endglobals
    
    function ashbringer_heart_update takes Buff b returns nothing
        local Tower tower = b.getBuffedUnit()
        local Tower caster = b.getCaster()
        local real tower_level = caster.getLevel()
        local real caster_level_factor = 0.5 + (tower_level * 0.02)
        
        call tower.modifyProperty(MOD_SPELL_DAMAGE_DEALT, -b.userReal)
        call tower.modifyProperty(MOD_SPELL_CRIT_CHANCE, -b.userReal2)
        call tower.modifyProperty(MOD_SPELL_CRIT_DAMAGE, -b.userReal3)
        call tower.modifyProperty(MOD_ATTACKSPEED, -(b.userInt/1000.0))
        call tower.modifyProperty(MOD_TRIGGER_CHANCES, -(b.userInt2/1000.0))
        
        set b.userReal = (caster.getProp_SpellDmgDealt() - 1.0)*caster_level_factor
        set b.userReal2 = (caster.getProp_SpellCritChance() - (0.0125 + (tower_level * 0.0015)))*caster_level_factor
        set b.userReal3 = (caster.getProp_SpellCritDamage() - (1.25 + (tower_level * 0.02)))*caster_level_factor
        set b.userInt = R2I((caster.getProp_Attackspeed() - (0.00 + (tower_level * 0.012)))*caster_level_factor*1000.0)
        set b.userInt2 = R2I((caster.getProp_TriggerChances()- 1.0)*caster_level_factor*1000.0)
        
        call tower.modifyProperty(MOD_SPELL_DAMAGE_DEALT, b.userReal)
        call tower.modifyProperty(MOD_SPELL_CRIT_CHANCE, b.userReal2)
        call tower.modifyProperty(MOD_SPELL_CRIT_DAMAGE, b.userReal3)
        call tower.modifyProperty(MOD_ATTACKSPEED, (b.userInt/1000.0))
        call tower.modifyProperty(MOD_TRIGGER_CHANCES, (b.userInt2/1000.0))
    endfunction

    function ashbringer_heart_create takes Buff b returns nothing
        set b.userReal = 0
        set b.userReal2 = 0
        set b.userReal3 = 0
        set b.userInt = 0
        set b.userInt2 = 0
        call ashbringer_heart_update(b)
    endfunction

    function ashbringer_heart_cleanup takes Buff b returns nothing
        local Tower tower = b.getBuffedUnit()
        call tower.modifyProperty(MOD_SPELL_DAMAGE_DEALT, -b.userReal)
        call tower.modifyProperty(MOD_SPELL_CRIT_CHANCE, -b.userReal2)
        call tower.modifyProperty(MOD_SPELL_CRIT_DAMAGE, -b.userReal3)
        call tower.modifyProperty(MOD_ATTACKSPEED, -b.userInt/1000.0)
        call tower.modifyProperty(MOD_TRIGGER_CHANCES, -b.userInt2/1000.0)
    endfunction
    
    function ashbringer_linger_apply takes Tower tower, Creep creep returns nothing
        local Buff b
        local integer i
        set b = creep.getBuffOfType(ashbringer_linger_buff)
        if ( b != 0 ) then
            set i = b.getPower() + 1
            call ashbringer_linger_buff.applyCustomPower(tower, creep, 1, i)
        else
            set i = 1
            call ashbringer_linger_buff.applyCustomPower(tower, creep, 1, i)
        endif
    endfunction
    
    function ashbringer_linger_damage takes Buff b returns nothing
        local Tower tower = b.getCaster()
        local integer power = b.getPower()
        call tower.doSpellDamage(b.getBuffedUnit(), (100 + (tower.getLevel() * 2)) * I2R(power), tower.calcSpellCritNoBonus())
        if (tower.calcChance((0.2 + (tower.getLevel() * 0.004)))) then
            call tower.addManaPerc(0.005 * I2R(power))
        endif
    endfunction
    
    function setUserInt takes Buff b returns nothing        
        set   b.userInt = b.getCaster()
    endfunction
    
    function attackRandomTarget takes Buff b returns nothing
        local Tower      tower     = b.userInt
        local Iterate    iterator  = Iterate.overUnitsInRangeOfCaster(tower, TARGET_CREEPS, 1000)
        local integer    loopIndex = 0
        local Unit       loopUnit
        local Unit array unitsInRange

        loop  
            set loopUnit = iterator.next()
            exitwhen loopUnit == 0 
            set unitsInRange[loopIndex] = loopUnit
            set loopIndex = loopIndex + 1
        endloop
        set loopUnit = unitsInRange[GetRandomInt(0,loopIndex-1)]
        
        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
        local Modifier m = Modifier.create()
        
        set ashbringer_heart_aura = BuffType.createAuraEffectType(true)
        call ashbringer_heart_aura.setBuffIcon('@@1@@')
        call ashbringer_heart_aura.addEventOnCreate(ashbringer_heart_create)
        call ashbringer_heart_aura.addEventOnCleanup(ashbringer_heart_cleanup)
        call ashbringer_heart_aura.addPeriodicEvent(ashbringer_heart_update, 5)

        set ashbringer_linger_buff = BuffType.create(10,0,false) 
        call ashbringer_linger_buff.setBuffIcon('@@0@@')  
        call ashbringer_linger_buff.addPeriodicEvent(EventHandler.ashbringer_linger_damage,1) 
            
        set ashbringer_intense_buff=BuffType.create(4,0,true)
        call m.addModification(MOD_ATK_CRIT_CHANCE, 0.0, 0.0005)
        call m.addModification(MOD_SPELL_CRIT_CHANCE, 0.0, 0.0005)
        call ashbringer_intense_buff.setBuffIcon('@@2@@')
        call ashbringer_intense_buff.setBuffModifier(m)
        
        set  ashbringer_attackrandom_buff = BuffType.createAuraEffectType(true)
        call ashbringer_attackrandom_buff.addEventOnCreate(EventHandler.setUserInt)
        call ashbringer_attackrandom_buff.addEventOnAttack(EventHandler.attackRandomTarget, 1, 0)
    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    call tower.addManaPerc(0.01)
endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    call ashbringer_linger_apply(tower, Event.getTarget())
endfunction

On Kill

function onKill takes Tower tower returns nothing
    call tower.modifyProperty(MOD_MANA, 10)
    call tower.addManaPerc(0.04)
endfunction

Tower Aura

AURA_powerAdd: 0 AURA_auraEffect: ashbringer_heart_aura AURA_levelAdd: 0 AURA_power: 1 AURA_targetType: TARGET_TYPE_TOWERS + TARGET_TYPE_ELEMENT_FIRE + TARGET_TYPE_RARITY_UNCOMMON + TARGET_TYPE_RARITY_COMMON AURA_targetSelf: false AURA_level: 1 AURA_auraRange: 350

Tower Aura

AURA_powerAdd: 0 AURA_auraEffect: ashbringer_attackrandom_buff AURA_levelAdd: 0 AURA_power: 1 AURA_targetType: TARGET_TYPE_PLAYER_TOWERS + TARGET_TYPE_ELEMENT_FIRE AURA_targetSelf: true AURA_level: 1 AURA_auraRange: 0