Time Manipulator v1
4000
ID:
23
Family ID:
Author:
Majildian
Rarity:
unique
Element:
astral
Attack Type:
Magic
Attack Range:
950
Attack CD:
3
Damage:
3994-3994
Mana:
550
Mana regen:
5
Status:
Approved

Description:

An elven mage who has devoted his entire life to the study of time.
Time Field
The Manipulator creates a field of time that inflicts future injuries upon creatures around him dealing 1500 damage every second for 10 seconds. This ability benefits from the buff duration bonus of Time Twist. 

Level Bonus:
+75 damage

AC_TYPE_OFFENSIVE_IMMEDIATE
 500, 950 range, 30s cooldown
Future Knowledge
The Manipulator travels into the future to learn more and returns to where he left every 10 seconds, increasing his experience by 2. If he has 700 or more exp then he will exchange 50 experience for 5% extra spell damage. If the Manipulator is replaced by another tower, this process is reversed and all experience refunded.
Time Twist - Aura
The Manipulator reaches into the timestream and twists it causing future and past events to occur in the present, granting towers in 240 range: 
+10% experience gain 
+10% attack speed 
+5% mana regen
+12.5% buff duration 

Level Bonus:
+1.6% exp gain
+1% attack speed
+2% mana regen
+1.5% buff duration
Download

Toggle Triggers

Autocast

caster_art: Abilities\Spells\Other\Drain\DrainCaster.mdl AUTOCAST_cooldown: 30 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_manacost: 500 AUTOCAST_range: 950 AUTOCAST_buffType: MajTimeField AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_CREEPS target_art: AUTOCAST_autoRange: 925
private function onAutocast takes Tower tower returns nothing
    call MajTimeField.apply(tower,tower,tower.getLevel())
endfunction

Header

    globals
        BuffType MajManipAura
        BuffType MajTimeField
        MultiboardValues MajFutureKnowledge
    endglobals
    
    function MajFieldDamage takes Buff b returns nothing 
        local Tower caster = b.getCaster()
        call caster.doSpellDamagePBAoE(950,b.getLevel()*75+1500,caster.calcSpellCritNoBonus(),0.0)
    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 MajManipMod = Modifier.create()
        
        set MajTimeField = BuffType.create(10,0.0,false)
        call MajTimeField.addPeriodicEvent(MajFieldDamage,1.0)
        call MajTimeField.setSpecialEffectAdvanced("Doodads\\Cinematic\\EnergyField\\EnergyField.mdl", 0, 0, 0, 3.5, 0, 255, 255, 255, 255, 180)
        
        set MajManipAura = BuffType.createAuraEffectType(true)
     
        call MajManipMod.addModification(MOD_EXP_RECEIVED,0.1,0.016)
        call MajManipMod.addModification(MOD_ATTACKSPEED,0.1,0.01)
        call MajManipMod.addModification(MOD_MANA_REGEN_PERC,0.05,0.02)
        call MajManipMod.addModification(MOD_BUFF_DURATION,0.125,0.015)
        call MajManipAura.setBuffModifier(MajManipMod)
        call MajManipAura.setBuffIcon('@@0@@')
        
        set MajFutureKnowledge = MultiboardValues.create(1)
        call MajFutureKnowledge.setKey(0,"Exp Exchanged")
    endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 0
endfunction

On Tower Destruction

function onDestruct takes Tower tower returns nothing
    call tower.addExpFlat(tower.userInt)
endfunction

On Tower Details

function onTowerDetails takes Tower tower returns MultiboardValues
     call MajFutureKnowledge.setValue(0, I2S(tower.userInt))
     return MajFutureKnowledge
endfunction

Periodic

PERIODIC_period: 10
function periodic takes Tower tower returns nothing
    if tower.getExp() >= 700 then
        call tower.removeExpFlat(50)
        set tower.userInt = tower.userInt + 50
        call tower.modifyProperty(MOD_SPELL_DAMAGE_DEALT, 0.05)
        call SFXOnUnit("Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl", tower.getUnit(), "overhead")
    else
        call tower.addExp(2)
        call SFXOnUnit("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", tower.getUnit(), "origin")
    endif
endfunction

Tower Aura

AURA_auraEffect: MajManipAura AURA_power: 0 AURA_level: 0 AURA_auraRange: 240 AURA_targetType: TARGET_TYPE_TOWERS AURA_levelAdd: 1 AURA_powerAdd: 1 AURA_targetSelf: true