Frozen Well v1
1600
|
ID: 100
Family ID:
Author: Boekie
Rarity: unique
Element: ice
Attack Type: Energy
Attack Range: 925
Attack CD: 2
Damage: 1261-1261
Status: Approved
|
Specials:
Splash attack: 150 AoE: 100% damage 625 AoE: 20% damage
Freezing Mist
When this tower damages a creep it will be slowed by 15% for 10 seconds. Level Bonus: +0.4% slow
Flowing Frost - Aura
Increases the buff duration of towers in 500 range by 25%. Level Bonus: +0.4% buff duration |
Download
Toggle Triggers Header globals
BuffType boekie_buff_aura
BuffType boekie_freezingMist
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()
local Modifier slow=Modifier.create()
set boekie_buff_aura = BuffType.createAuraEffectType(true)
call m.addModification(MOD_BUFF_DURATION,0.25,0.004) // apply custom
call boekie_buff_aura.setBuffModifier(m)
call boekie_buff_aura.setStackingGroup("boekie_buff_aura")
call boekie_buff_aura.setBuffIcon('@@0@@')
call slow.addModification(MOD_MOVESPEED,0,-0.001)
set boekie_freezingMist=BuffType.create(0,0,false)
call boekie_freezingMist.setBuffIcon('@@1@@')
call boekie_freezingMist.setBuffModifier(slow)
call boekie_freezingMist.setStackingGroup("boekie_freezingMist")
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
call boekie_freezingMist.applyCustomTimed(tower,Event.getTarget(), 150+(tower.getLevel()*4), 10)
endfunction
Tower Aura
AURA_auraEffect: boekie_buff_aura
AURA_power: 0
AURA_level: 0
AURA_auraRange: 500
AURA_targetType: TARGET_TYPE_TOWERS
AURA_levelAdd: 1
AURA_powerAdd: 1
AURA_targetSelf: true
|
Spell Collector v1
1600
|
ID: 115
Family ID:
Author: cedi
Rarity: rare
Element: storm
Attack Type: Energy
Attack Range: 950
Attack CD: 2
Damage: 1080-1080
Status: Approved
|
Description: A field which is able to gather energy from spells.
Magical Barrage
Whenever this tower attacks it has a 20% chance to launch a magical missile. Whenever a tower in 650 range casts a spell, the amount of missiles on attack is increased by 1 for a duration equal to the casting tower's ability's cooldown. The Spell Collector can shoot up to 10 missiles per attack. Each missile deals 2000 spell damage. Each additional missile has 5% higher crit chance and 10% higher crit damage than the previous one. Level Bonus: +0.8% chance +80 spell damage +0.2% spell crit chance +0.4% spell crit damage +1 max missiles every 5 levels |
Download
Toggle Triggers Header globals
//@export
ProjectileType cedi_spellCPT
//@export
BuffType cedi_spellGathering
//@export
BuffType cedi_spellInc
//@export
MultiboardValues cedi_spellCollectorMBValues
endglobals
function hitMissile takes Projectile P, Unit U returns nothing
local Tower C = P.getCaster()
if U != 0 and C != 0 then
call P.getCaster().doSpellDamage( U, (2000.0 + 80 * C.getLevel()) * C.userInt, C.calcSpellCrit( P.userReal, P.userReal2 ) )
endif
endfunction
function incCast takes Buff B returns nothing
local Tower C = B.getCaster()
local integer UID
set B = C.getBuffOfType(cedi_spellInc)
if B != 0 then
set B = cedi_spellInc.apply(C, C, B.getLevel() + 1)
else
set B = cedi_spellInc.apply(C, C, 1)
endif
set UID = B.getUID()
call TriggerSleepAction(Event.getAutocastType().getCooldown())
if B.getUID() == UID then
call B.setLevel(B.getLevel() - 1)
if B.getLevel() == 0 then
call B.removeBuff()
endif
endif
endfunction
function Launch takes nothing returns nothing
local timer t = GetExpiredTimer()
local Tower tower = GetTimerData( t )
local real chance = 0.05 + 0.002 * tower.getLevel()
local real crit = 0.1 + 0.004 * tower.getLevel()
local Projectile P
local Unit T = tower.userInt3
if T == 0 then
call ReleaseTimer( t )
set t = null
return
endif
if tower.userInt2 >= tower.userReal then
call ReleaseTimer( t )
set t = null
return
endif
set P = Projectile.createBezierInterpolationFromUnitToUnit( cedi_spellCPT, tower, 1.0, tower.calcSpellCritNoBonus(), tower, T, GetRandomReal( 0.25, 0.45 ), GetRandomReal( -0.3, 0.3 ), 0.0, true )
set P.userReal = chance * tower.userInt2
set P.userReal2 = crit * tower.userInt2
set P.z = 50.0
set tower.userInt2 = tower.userInt2 + 1
set t = null
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 cedi_spellCPT = ProjectileType.createInterpolate( "Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl", 1200.0 )
call cedi_spellCPT.setEventOnInterpolationFinished( hitMissile )
set cedi_spellGathering = BuffType.createAuraEffectType( true )
call cedi_spellGathering.setBuffIcon( '@@1@@' )
call cedi_spellGathering.addEventOnSpellCast( incCast )
set cedi_spellInc = BuffType.create( 20.0, 0.0, true )
call cedi_spellInc.setBuffIcon( '@@2@@' )
set cedi_spellCollectorMBValues = MultiboardValues.create(1)
call cedi_spellCollectorMBValues.setKey(0, "Spells Harvested")
endfunction
On Attack
ONATTACK_chance: 0.2
ONATTACK_chanceLevelAdd: 0.008
function onAttack takes Tower tower returns nothing
//local real chance = 0.05 + 0.002 * tower.getLevel()
//local real crit = 0.1 + 0.004 * tower.getLevel()
//local integer i = 0
local Buff B = tower.getBuffOfType( cedi_spellInc )
local integer max = 1
//local Projectile P
local Unit T = Event.getTarget()
local real r
local timer t = NewTimer()
if B != 0 then
set max = IMinBJ(B.getLevel() + 1,10+tower.getLevel()/5)
endif
set r = tower.getCurrentAttackspeed() / max
if r > 0.2 then
set r = 0.2
endif
set tower.userReal = max
set tower.userInt2 = 0 //i
set tower.userInt3 = T
call SetTimerData( t, tower )
call TimerStart( t, r, true, function Launch )
//loop
// exitwhen i >= max
// exitwhen T == 0
// set P = Projectile.createFromUnitToUnit( cedi_spellCPT, tower, 1.0, tower.calcSpellCritNoBonus(), tower, T, true, false, false )
// set P.userReal = chance * i
// set P.userReal2 = crit * i
// set P.z = 50.0
// set i = i + 1
// call TriggerSleepAction( 0.1 )
//endloop
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 1 //first member
endfunction
On Tower Details
goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
local Buff B = tower.getBuffOfType(cedi_spellInc)
local integer lvl = 0
if B != 0 then
set lvl = IMinBJ(B.getLevel() + 1,10+tower.getLevel()/5)
endif
call cedi_spellCollectorMBValues.setValue(0, I2S(lvl))
return cedi_spellCollectorMBValues
endfunction
Tower Aura
AURA_auraEffect: cedi_spellGathering
AURA_power: 0
AURA_level: 0
AURA_auraRange: 650.0
AURA_targetType: TARGET_TYPE_TOWERS
AURA_levelAdd: 1
AURA_powerAdd: 1
AURA_targetSelf: true
|
Black Dragon Roost v2
1600
|
ID: 223
Family ID:
Author: cedi
Rarity: unique
Element: darkness
Attack Type: Essence
Attack Range: 800
Attack CD: 2
Damage: 1501-1501
Status: Approved
|
Description: It's said that the black dragons are the reaper's mounts.
Fear the Dark
Whenever this tower damages a creep it has a 20% chance to debuff it for 7 seconds. Debuffed creeps take 30% more damage. Each creep in 500 range decreases the effect by 25%, creeps with this buff don't count. The effect on bosses is 50% weaker. Level Bonus: +0.4% chance +0.28 seconds duration 1.2% more damage taken |
Download
Toggle Triggers Header globals
BuffType BT
endglobals
function startA takes Buff B returns nothing
local Unit U = B.getBuffedUnit()
local unit u = U.getUnit()
call SetUnitVertexColor( u, 125, 125, 125, 255 )
set u = null
endfunction
function clean takes Buff B returns nothing
local Unit U = B.getBuffedUnit()
local unit u = U.getUnit()
call SetUnitVertexColor( u, 255, 255, 255, 255 )
set u = null
endfunction
function dmg takes Buff B returns nothing
local Tower C = B.getCaster()
local Unit T = B.getBuffedUnit()
local real r = C.getLevel() * 0.012 + 0.30
local Iterate I = Iterate.overUnitsInRangeOfUnit( C, TARGET_CREEPS, T, 500.00 )
local Unit U
if T.getSize() >= SIZE_BOSS then
set r = r / 2.00
endif
loop
set U = I.next()
exitwhen U == 0
if U.getBuffOfType( BT ) != 0 then
set r = r * 0.75
endif
endloop
set Event.damage = Event.damage * ( 1.00 + r )
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.create( 7.0, 0.28, false )
call BT.setBuffIcon( '@@0@@' )
call BT.addEventOnCreate( startA )
call BT.addEventOnCleanup( clean )
call BT.addEventOnDamage( dmg, 1.00, 0.00 )
endfunction
On Damage
ONDAMAGE_chance: 0.2
ONDAMAGE_chanceLevelAdd: 0.004
function onDamage takes Tower tower returns nothing
call BT.apply( tower, Event.getTarget(), tower.getLevel() )
endfunction
|
Magnataur Spirit Hunter v1
1600
|
ID: 238
Family ID:
Author: drol/i_mOck_death
Rarity: uncommon
Element: ice
Attack Type: Elemental
Attack Range: 900
Attack CD: 1.7
Damage: 2501-2512
Status: Approved
|
Description: Roaming on the Frozen Wastes, the Magnataur Spirit Hunter seeks new challenges to beat.
Frozen Spears
Has a 13% chance to deal 50% more damage and stun the target for 0.5 seconds. Level Bonus: +4% damage +0.01 seconds |
Download
Toggle Triggers On Damage
ONDAMAGE_chance: .13
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local real level = tower.getLevel()
if Event.isMainTarget() == true then
set Event.damage = Event.damage*(1.5+(.04*level))
call SFXAtUnit("Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl", creep.getUnit())
call cb_stun.applyOnlyTimed(tower, creep, 0.5+tower.getLevel()*0.01)
call tower.getOwner().displaySmallFloatingText(I2S(R2I(Event.damage)),tower,255,150,150,0)
endif
endfunction
|
Daemonic Tombstone v1
1600
|
ID: 333
Family ID:
Author: geX
Rarity: common
Element: darkness
Attack Type: Decay
Attack Range: 1050
Attack CD: 1.8
Damage: 1585-1935
Status: Approved
|
Description: Basic tower with a small chance on attack to kill lesser targets immediately.
Tomb's Curse
This tower has a 1.6% chance on attack to kill a non boss, non champion target immediately. Level Bonus: +0.24% chance |
Download
Toggle Triggers On Damage
ONDAMAGE_chance: 0.016
ONDAMAGE_chanceLevelAdd: 0.0024
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer size = creep.getSize()
if size < SIZE_CHAMPION then // removed or size == SIZE_AIR
call tower.killInstantly(creep)
call SFXAtUnit("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl",creep.getUnit())
endif
endfunction
|
Firestorm Generator v1
1600
|
ID: 422
Family ID:
Author: Ashbringer
Rarity: uncommon
Element: fire
Attack Type: Magic
Attack Range: 900
Attack CD: 1.3
Damage: 850-850
Status: Approved
|
Description: A device created to unleash fiery explosions.
Firestorm
Attacks have a 20% chance to apply 3 charges of Firestorm to the target. Each second, a charge will be spent, dealing 800 spell damage to enemies in 300 range. If the target already has charges, the charges will accumulate and a charge will be consumed instantly. On death all remaining firestorm charges get consumed at once. Level Bonus: +0.6% chance +35 damage |
Download
Toggle Triggers Header globals
BuffType ashbringer_firestorm_buff
endglobals
function ashbringer_firestorm_damage takes Tower tower, Unit creep returns nothing
call tower.doSpellDamageAoEUnit(creep, 300, 800 + (35 * tower.getLevel()), tower.calcSpellCritNoBonus(), 0.0)
call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", creep.getX(), creep.getY(), 0, 0, 0.4).destroy()
endfunction
function ashbringer_firestorm_periodic takes Buff b returns nothing
local Tower tower = b.getCaster()
local Unit target = b.getBuffedUnit()
set b.userInt = b.userInt - 1
if b.userInt <= 0 then
call b.removeBuff() //need to do it in this order, because the damage can kill the buff carrier, and removing buff after the carrier is dead causes double free
endif
call ashbringer_firestorm_damage(tower, target)
endfunction
function ashbringer_firestorm_setint takes Buff b returns nothing
set b.userInt = b.getPower()
endfunction
function firestorm takes Buff b returns nothing
local Tower tower = b.getCaster()
local Creep creep = b.getBuffedUnit()
call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", creep.getX(), creep.getY(), 0, 0, 1.0).destroy()
call tower.doSpellDamageAoEUnit(creep, 300, b.getPower()* (800 + (35 * tower.getLevel())), tower.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
set ashbringer_firestorm_buff = BuffType.create(1000,0,false)
call ashbringer_firestorm_buff.setBuffIcon('@@0@@')
call ashbringer_firestorm_buff.addEventOnCreate(EventHandler.ashbringer_firestorm_setint)
call ashbringer_firestorm_buff.addPeriodicEvent(EventHandler.ashbringer_firestorm_periodic,1)
call ashbringer_firestorm_buff.addEventOnDeath(EventHandler.firestorm)
endfunction
On Attack
ONATTACK_chance: 0.2
ONATTACK_chanceLevelAdd: 0.006
function onAttack takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local Buff b
local integer i
set b = creep.getBuffOfType(ashbringer_firestorm_buff)
if ( b != 0 ) then
call ashbringer_firestorm_damage(tower, creep)
set i = b.getPower() + 2
call b.setPower(i)
set b.userInt = i
else
set i = 3
call ashbringer_firestorm_buff.applyCustomPower(tower, creep, i, i)
endif
endfunction
|
Doctorated Teacher v1
1600
|
ID: 431
Family ID:
Author: Deikorim / limfa
Rarity: uncommon
Element: astral
Attack Type: Elemental
Attack Range: 900
Attack CD: 1.5
Damage: 2016-2020
Status: Approved
|
Description: Teacher teaches you to attack!
Specials:
+70% exp gain
Knowledge
When the teacher attacks there's a 10% chance a random tower in 600 range will learn from her, gaining 2 experience. Level Bonus: +0.6% chance |
Download
Toggle Triggers Header globals
//@import
ProjectileType knowledge_green
//@import
ProjectileType knowledge_blue
//@import
ProjectileType knowledge_red
//@import
MultiboardValues limfa_teacherboard
endglobals
//@import
function teacher_attack takes Tower t, real xp returns nothing
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
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
call teacher_attack(tower,2)
call SetUnitAnimationByIndex(tower.getUnit(), 3)
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
local Tower preceding = Event.getPrecedingTower()
if (preceding.getFamily() == tower.getFamily()) then
set tower.userReal2 = preceding.userReal2
else
set tower.userReal2 = 0
endif
endfunction
On Tower Details
goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
call limfa_teacherboard.setValue(0, formatFloat(tower.userReal2,1))
return limfa_teacherboard
endfunction
|
Description: