Spear of Loki v1
1470
lvl: 43
ID:
264
Author:
Boekie
Rarity:
unique
Status:
Approved

Description:

This spear of an old northern god is a very tricky weapon. It has enormous powers but also has a drawback.
Specials:
+50% damage (+1%/lvl)
Tricky Weapon
Each attack there is a 15% chance the carrier gets stunned for 1 second.
Download

Toggle Triggers

On Attack

goldcost: -1000 ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Item itm returns nothing
    local Tower twr = itm.getCarrier()
    if GetRandomReal(0, 1) < 0.15 / twr.getProp_TriggerChances() then
        call cb_stun.applyOnlyTimed(itm,twr,1)
    endif
endfunction
Spellbook of Item Mastery v1
1500
lvl: 44
ID:
200
Author:
Majildian
Rarity:
unique
Status:
Approved

Description:

This spellbook contains a variety of spells for items.
Cast a Spell
Casts one of these spells on attack:
 -Target drops a very high quality item
 -Two high quality items
 -Three normal quality items
 -Two low quality items and spellbook gains +10% item chance and item quality
 -Spellbook gains +25% item quality or item chance

Cooldown of 15 waves.
Download

Toggle Triggers

Header

goldcost: 0
    globals
        MultiboardValues Maj_spellbook
    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
        set Maj_spellbook = MultiboardValues.create(3)
        call Maj_spellbook.setKey(0,"Waves Left")
        call Maj_spellbook.setKey(1,"Item Quality")
        call Maj_spellbook.setKey(2,"Item Chance")
    endfunction

On Attack

goldcost: 1500 ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Item itm returns nothing
local integer choose
local Creep target
local Tower tower
local Playor owner

if itm.userInt <= 0 then
    set tower = itm.getCarrier()
    set owner = itm.getOwner()
    set choose = GetRandomInt(1,6)
    if choose <= 4 then
        set target = Event.getTarget()
    endif
    if choose == 1 then
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, 1)
        call target.dropItem(tower,false)
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, -1)
        call owner.displayFloatingText("One Item",tower,0,0,255)
    elseif choose == 2 then
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, 0.5)
        call target.dropItem(tower,false)
        call target.dropItem(tower,false)
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, -0.5)
        call owner.displayFloatingText("Two Items",tower,0,0,255)
    elseif choose == 3 then
        call target.dropItem(tower,false)
        call target.dropItem(tower,false)
        call target.dropItem(tower,false)
        call owner.displayFloatingText("Three Items",tower,0,0,255)
    elseif choose == 4 then
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, -0.25)
        call target.dropItem(tower, false)
        call target.dropItem(tower, false)
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, 0.35)
        call tower.modifyProperty(MOD_ITEM_CHANCE_ON_KILL, 0.1)
        set itm.userReal = itm.userReal + 0.1
        set itm.userReal2 = itm.userReal2 + 0.1
        call owner.displayFloatingText("Two Items + Bonus!", tower, 0, 0, 255)
    elseif choose == 5 then
        call tower.modifyProperty(MOD_ITEM_CHANCE_ON_KILL,.25)
        set itm.userReal2 = itm.userReal2+0.25
        call owner.displayFloatingText("Item Chance",tower,0,255,0)
    elseif choose == 6 then
        call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL,.25)
        set itm.userReal = itm.userReal+0.25
        call owner.displayFloatingText("Item Quality",tower,0,255,0)
    endif
    set itm.userInt = 15
endif
endfunction

On Item Creation

goldcost: 0
function onCreate takes Item itm returns nothing
    set itm.userInt = 0
    set itm.userInt2 = itm.getOwner().getTeam().getLevel()
    set itm.userReal = 0.00
    set itm.userReal2 = 0.00
endfunction

On Item Drop

goldcost: 0
function onDrop takes Item itm returns nothing
local Tower tower = itm.getCarrier()
call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, -itm.userReal)
call tower.modifyProperty(MOD_ITEM_CHANCE_ON_KILL, -itm.userReal2)
endfunction

On Item Pickup

goldcost: 0
function onPickup  takes Item itm returns nothing
    local Tower tower = itm.getCarrier()
    call tower.modifyProperty(MOD_ITEM_QUALITY_ON_KILL, itm.userReal)
    call tower.modifyProperty(MOD_ITEM_CHANCE_ON_KILL, itm.userReal2)
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Item itm returns MultiboardValues
call Maj_spellbook.setValue(0,I2S(itm.userInt))
call Maj_spellbook.setValue(1,formatPercent(itm.userReal, 0))
call Maj_spellbook.setValue(2,formatPercent(itm.userReal2, 0))
return Maj_spellbook
endfunction

Periodic

PERIODIC_period: 5 goldcost: 0
function periodic takes Item itm returns nothing
    local integer level = itm.getOwner().getTeam().getLevel()
    if itm.userInt2 < level then
        set itm.userInt = itm.userInt - (level - itm.userInt2)
        set itm.userInt2 = level
    endif
endfunction
M.E.F.I.S. Rocket v1
1500
lvl: 44
ID:
207
Author:
cedi
Rarity:
unique
Status:
Approved

Description:

Now, If only I could remember where I put the manual.
Anti-Immunity Missile
Fires immune-seeking missiles. The attack range, speed, damage and type is the same as the carrier's, unless the attack type is Magic, which is dealt as Essence damage. Damage is scaled by 20% of the tower's spell damage.

Level Bonus:
+0.8% scaling
Download

Toggle Triggers

Header

goldcost: 0
    globals
        ProjectileType PT
        MultiboardValues MB
    endglobals
    
    function hitPT takes Projectile P, Unit U returns nothing
        local Tower T = P.getCaster()
        //local AttackType AT = P.userInt
        call T.doCustomAttackDamage( U, P.userReal, T.calcAttackMulticrit( 0, 0, 0 ), P.userInt )
    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 PT = ProjectileType.createInterpolate( "Abilities\\Spells\\Other\\TinkerRocket\\TinkerRocketMissile.mdl", 1000.00 )
        call PT.setEventOnInterpolationFinished( hitPT )
        
        set MB = MultiboardValues.create( 1 )
        call MB.setKey( 0, "Damage" )
    endfunction

On Item Pickup

goldcost: 0
function onPickup  takes Item itm returns nothing
    local Tower T = itm.getCarrier()
    
    if T.getAttackType() != AttackType.MAGIC then
        set itm.userInt = T.getAttackType()
    else
        set itm.userInt = AttackType.ESSENCE
    endif
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Item itm returns MultiboardValues
    local Tower T = itm.getCarrier()
    local real dmg = T.getCurrentAttackDamageWithBonus() * ( T.getProp_SpellDmgDealt() * ( 0.2 + 0.008 * T.getLevel() ) )
    call MB.setValue( 0, formatFloat( dmg, 0 ) )
    return MB
endfunction

Periodic

PERIODIC_period: 0.1 goldcost: 1500
function periodic takes Item itm returns nothing
    local Tower T = itm.getCarrier()
    local Iterate I = Iterate.overUnitsInRangeOfCaster( T, TARGET_CREEPS, T.getRange() )
    local Unit U
    local real dmg
    local Projectile P
    
    call Event.getCurrentPeriodicEvent().enableAdvanced( T.getCurrentAttackspeed(), true )
    
    loop
        set U = I.next()
        if U == 0 then
            return //No target
        endif
        
        exitwhen U.isImmune()
    endloop

    //Gotcha
    call I.destroy() //If this point is reached the Iteration still exists and has to be destroyed
    set dmg = T.getCurrentAttackDamageWithBonus() * ( T.getProp_SpellDmgDealt() * ( 0.2 + 0.008 * T.getLevel() ) )
    set P = Projectile.createLinearInterpolationFromUnitToUnit( PT, T, 1.0, 1.0, T, U, 0.35, true )
    set P.userReal = dmg
    set P.userInt = itm.userInt
endfunction
Grounding Gloves v1
1500
lvl: 44
ID:
209
Author:
SirCoqaLot.
Rarity:
unique
Status:
Approved

Description:

Entangling Roots
On attack the carrier has an 6% attackspeed adjusted chance to create a field of overgrowth in 200 AoE around the target. Creeps entering the overgrowth will become entangled for 1.8 seconds, taking 4500 spell damage per second. Cannot entangle the same creep for 3 seconds afterwards. Bosses can only be hit once.
Download

Toggle Triggers

Header

goldcost: 0
    globals
        BuffType BT
        BuffType CD
        Cast C
    endglobals
    
    function overgrowth_dmg takes DummyUnit C returns nothing
        local Creep U = Event.getTarget()
        local Tower tower = C.getCaster()
        set Event.damage = 0
        
        if U.getBuffOfType(CD) == 0 then
            call BT.apply(tower, U, 0)
            if U.getSize() < SIZE_BOSS then
                call CD.apply(tower, U, 0)
            else
                call CD.applyOnlyTimed(tower, U, -1)
            endif
        endif
    endfunction
    
    function periodicDmg takes Buff B returns nothing
        call B.getCaster().doSpellDamage(B.getBuffedUnit(), 4500, B.getCaster().calcSpellCritNoBonus())
    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 BT = BuffType.createDuplicate(cb_stun, 1.8, 0.00, false)
        call BT.addPeriodicEvent(periodicDmg, 1.0)
        call BT.setBuffIcon('@@1@@')
        
        set CD = BuffType.create(4.8, 0.00, false)
        
        set C = Cast.create('@@0@@', "blizzard", 4.0)
        call C.setDamageEvent(overgrowth_dmg)
    endfunction

On Damage

ONDAMAGE_chance: 1 goldcost: 1500 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Item itm returns nothing
    local Creep target = Event.getTarget()
    local Tower tower = itm.getCarrier()
    if Event.isMainTarget() and tower.calcChance(tower.getBaseAttackspeed()*0.06) then
        call C.pointCastFromTargetOnTarget( tower, target, 1.0, 1.0 )
        call Effect.createColored( "Abilities\\Spells\\NightElf\\EntangleMine\\Roots.mdl", target.getX(), target.getY(), 0.0, 270.0, 1.2, 210, 255, 180, 255 ).setLifetime( 2.5 )
    endif 
endfunction
Doom's Ensign v1
1500
lvl: 44
ID:
253
Author:
cedi
Rarity:
unique
Status:
Approved

Description:

This relic is imbued with dark powers.
Ensign's Touch
When the user of this item attacks an enemy it decreases the armor of the target by 10% for 5 seconds.

Level Bonus:
+0.6% armor decrease
Download

Toggle Triggers

Header

goldcost: 1500
    globals
        BuffType BT
    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()
        set BT = BuffType.create( 5.00, 0.00, false )
        call m.addModification( MOD_ARMOR_PERC, -0.10, -0.006 )
        call BT.setBuffModifier( m )
        call BT.setBuffIcon( '@@0@@' )
    endfunction

On Damage

ONDAMAGE_chance: 1.0 goldcost: 0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Item itm returns nothing
    if Event.isMainTarget() then
        call BT.apply( itm.getCarrier(), Event.getTarget(), itm.getCarrier().getLevel() )
    endif
endfunction
Beast Head v2
1525
lvl: 89
ID:
134
Author:
cedi
Rarity:
uncommon
Status:
Approved

Description:

Only the bravest and strongest warriors are able to kill such a beast without hurting the head.
Specials:
+1230 dps
Download
Forcefield Generator v1
1600
lvl: 67
ID:
126
Author:
drol
Rarity:
rare
Status:
Approved

Description:

Negates all offensive magic in an area.
Forcefield
Reduces the duration of debuffs cast on the carrier and all towers within 200 range of the carrier by 15%.

Level Bonus:
-1% debuff duration
Download

Toggle Triggers

Header

goldcost: 1600
    globals
        BuffType drol_debuffAura
    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_DEBUFF_DURATION,-0.15,-0.01)
    
        set drol_debuffAura = BuffType.createAuraEffectType(true)
        call drol_debuffAura.setBuffIcon('@@0@@')
        
        call drol_debuffAura.setBuffModifier(m) 
    endfunction

Tower Aura

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