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
Abil. Factor:
0.2
Status:
Approved

Description:

Feel the heat.

Latest Upload Comment:

Restored from 1.10
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
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
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
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