Divine Elementalist v1
2500
|
ID: 60
Family ID:
Author: Kel-Thuzad
Rarity: uncommon
Element: astral
Attack Type: Magic
Attack Range: 900
Attack CD: 2
Damage: 417-417
Status: Approved
|
Elemental Fury
Consecutive casts of the same spell will deal 50% more damage. Level Bonus: +1% damage
Elemental Chaos
Elementalist casts one of the following spells on attack: Fire Blast: 30% chance, 300 AoE, 3000 damage Frost Nova: 20% chance, 300 AoE, 2000 damage, 15% slow for 4 seconds Aftershock: 30% chance, 6000 damage, 0.7 seconds stun Lightning Burst: 20% chance, 3000 damage, affects 6 random targets in 900 range Level Bonus: +60 damage (Fire Blast) +80 damage (Frost Nova) +0.02 seconds stun (Aftershock) +60 damage (Lightning Burst) |
Download
Toggle Triggers Header globals
//@import
BuffType KelSlow
endglobals
//The init function
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
local integer randomSpellID=GetRandomInt(1,10) //RandomSpell
local Creep c = Event.getTarget()
local Unit u
local integer count = 0 //counter for lightnings
local Iterate it
if randomSpellID<4 then //FireBlast
if tower.userInt2 == 1 then
set tower.userInt = tower.userInt + 1
else
set tower.userInt = 1
set tower.userInt2 = 1
endif
call SFXAtUnit("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl",c.getUnit()) //BANG!!
call tower.doSpellDamageAoEUnit(c,300,(3000+tower.getLevel()*60)*(1+((0.5+tower.getLevel()*0.01)*(tower.userInt-1))),tower.calcSpellCritNoBonus(),0)
elseif randomSpellID<7 then //Aftershock
if tower.userInt2 == 2 then
set tower.userInt = tower.userInt + 1
else
set tower.userInt = 1
set tower.userInt2 = 2
endif
call SFXAtUnit("Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl",c.getUnit()) //just a pretty SFX
call cb_stun.applyOnlyTimed(tower,c,0.7+tower.getLevel()*0.02 )
call tower.doSpellDamage(c,6000*(1+((0.5+tower.getLevel()*0.01)*(tower.userInt-1))),tower.calcSpellCritNoBonus())
elseif randomSpellID<9 then //FrostNova
if tower.userInt2 == 3 then
set tower.userInt = tower.userInt + 1
else
set tower.userInt = 1
set tower.userInt2 = 3
endif
set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,c,300)
loop //slow
set u = it.next()
exitwhen u == 0
call KelSlow.applyCustomTimed(tower,u,150,4) //slow
endloop
call SFXAtUnit("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",c.getUnit()) //sfx
call SFXAtUnit("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathMissile.mdl",c.getUnit()) //sfx
call tower.doSpellDamageAoEUnit(c,300,(2000+tower.getLevel()*80)*(1+((0.5+tower.getLevel()*0.01)*(tower.userInt-1))),tower.calcSpellCritNoBonus(),0)
else //Lightning Burst
if tower.userInt2 == 4 then
set tower.userInt = tower.userInt + 1
else
set tower.userInt = 1
set tower.userInt2 = 4
endif
set it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,900)
loop //SFX+lightnings
set u = it.next()
set count = count+1
exitwhen count == 7 or u == 0 //"count" is number of lightnings to create
call SFXAtUnit("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",u.getUnit()) //SFX+sound on unit
call tower.doSpellDamage(u,(3000+tower.getLevel()*60)*(1+((0.5+tower.getLevel()*0.01)*(tower.userInt-1))),tower.calcSpellCritNoBonus()) //damage
call Lightning.createFromUnitToUnit("CLPB", tower, u).setLifetime(0.15) //lightning itself
endloop
if u != 0 then
call it.destroy()
endif
endif
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt=0 //Stores how many consecutive times last spell was cast
set tower.userInt2=0 //Stores which spell was last cast
endfunction
|
Blackrock's Totem v1
2500
|
ID: 66
Family ID:
Author: poussix
Rarity: unique
Element: fire
Attack Type: Elemental
Attack Range: 1200
Attack CD: 2
Damage: 1036-1036
Status: Approved
|
Description: During the grand battle against humans, The Blackrock clan used this magical totem, making them unstoppable.
Demonic Fire
Places a buff on a creep for 7 seconds. When a tower damages the buffed creep, there is a 20% chance to permanently increase the damage it takes from fire towers by 3% (1% for bosses). Level Bonus: +0.08% damage from fire (on non boss) +0.04% damage from fire (on bosses) AC_TYPE_OFFENSIVE_BUFF 0, 1200 range, 4s cooldown
Shamanic Totem
Upon casting Demonic Fire there is a 30% chance to buff towers in 500 range, increasing their spell damage dealt by 10% for 5 seconds and restoring 7.5% of their max mana. Level Bonus: +0.4% spell damage +0.3% max mana +0.2 seconds duration +0.4% trigger chance
Fighter Totem
On attack there is a 15% chance to buff towers in 500 range, increasing their damage dealt by 10%, their crit chance by 5% and their crit damage by 50% for 5 seconds. Level Bonus: +0.4% damage +0.2% crit chance +2% crit damage +0.2 seconds duration +0.2% trigger chance |
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 4
AUTOCAST_numBuffsBeforeIdle: 3
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF
AUTOCAST_manacost: 0
AUTOCAST_range: 1200
AUTOCAST_buffType: Totem_Damage
AUTOCAST_targetSelf: false
AUTOCAST_targetType: TARGET_TYPE_CREEPS
target_art:
AUTOCAST_autoRange: 1200
private function onAutocast takes Tower tower returns nothing
local integer lvl = tower.getLevel()
local Iterate towers
local Tower cur
local real mana
local real currentmana
local unit u
if Event.getTarget().getSize() < SIZE_BOSS then
set Totem_Damage.apply(tower,Event.getTarget(),lvl).userReal = 0.03 + 0.0008 * lvl
else
set Totem_Damage.apply(tower,Event.getTarget(),lvl).userReal = 0.01 + 0.0004 * lvl
endif
if tower.calcChance(0.30 + 0.004 * lvl) then
set towers = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TYPE_TOWERS,500)
loop
set cur = towers.next()
exitwhen cur == 0
call Fire_Totem_Spell.apply(tower, cur, lvl)
if cur != tower then
set u = cur.getUnit()
set mana = GetUnitState(u, UNIT_STATE_MAX_MANA)
set currentmana = GetUnitState(u, UNIT_STATE_MANA)
call SetUnitState(u, UNIT_STATE_MANA, currentmana + mana * (0.075 + 0.003 * lvl))
endif
endloop
set u = null
endif
endfunction
Header globals
BuffType Fire_Totem_Physique
BuffType Totem_Damage
BuffType Fire_Totem_Spell
endglobals
public function onDamaged takes Buff b returns nothing
local Creep c = b.getBuffedUnit()
if c.calcChance(0.2) then
call c.modifyProperty(MOD_DMG_FROM_FIRE, b.userReal)
endif
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 Fire_Totem_Physique = BuffType.create(5,0.2,true)
call m.addModification(MOD_DAMAGE_ADD_PERC,0.10,0.004)
call m.addModification(MOD_ATK_CRIT_CHANCE,0.05,0.002)
call m.addModification(MOD_ATK_CRIT_DAMAGE,0.5,0.02)
call Fire_Totem_Physique.setBuffModifier(m)
call Fire_Totem_Physique.setBuffIcon('@@0@@')
set Fire_Totem_Spell = BuffType.create(5,0.2,true)
set m = Modifier.create()
call m.addModification(MOD_SPELL_DAMAGE_DEALT,0.10,0.004)
call Fire_Totem_Spell.setBuffModifier(m)
call Fire_Totem_Spell.setBuffIcon('@@2@@')
set Totem_Damage=BuffType.create(7,0,false)
call Totem_Damage.setStackingGroup("Totem_Damage")
call Totem_Damage.setBuffIcon('@@1@@')
call Totem_Damage.addEventOnDamaged(EventHandler.onDamaged,1.0,0.0)
endfunction
On Attack
ONATTACK_chance: 0.15
ONATTACK_chanceLevelAdd: 0.002
function onAttack takes Tower tower returns nothing
local Iterate towers = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TYPE_TOWERS,500)
local Unit cur
loop
set cur = towers.next()
exitwhen cur == 0
call Fire_Totem_Physique.apply(tower, cur, tower.getLevel())
endloop
endfunction
|
Magic Enhanced Burrow v1
2500
|
ID: 188
Family ID:
Author: tolleder
Rarity: uncommon
Element: iron
Attack Type: Physical
Attack Range: 700
Attack CD: 3
Damage: 8035-8035
Status: Approved
|
Description: A burrow with Troll Berserkers inside, which will break through every armor.
Piercing Shot
40% of this tower's attack damage cannot be reduced by armor resistances. Level Bonus: +1.6% damage ratio |
Download
Toggle Triggers On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local real curRatio=0.4+0.016*tower.getLevel()
local real sDmg=Event.damage
local real damageBase=Event.damage
local Creep target=Event.getTarget()
local real temp = AttackType.PHYSICAL.getDamageAgainst(target.getArmorType())
if temp > 0. and temp < 1. then //igoniring armor type "resistance" not weakness :P
set damageBase = damageBase / temp
endif
set temp = (1 - target.getCurrentArmorDamageReduction())
if temp > 0. then
set damageBase = damageBase / temp
endif
if sDmg < damageBase then
set Event.damage=damageBase*curRatio+sDmg*(1.-curRatio)
endif
//The engine calculates critical strike extra damage ***AFTER*** the onDamage event, so there is no need to care about it in this trigger.
endfunction
|
Solar Conductor v1
2500
|
ID: 198
Family ID:
Author: Boekie
Rarity: rare
Element: iron
Attack Type: Energy
Attack Range: 800
Attack CD: 1
Damage: 1375-1375
Mana: 17
Mana regen: 3
Status: Approved
|
Description: A tower which transforms solar-energy in to pure force.
Specials:
10% spell crit chance (+0.5%/lvl) x2 spell crit damage +2 mana/lvl +0.04 mana regen/lvl
Release Energy
Deals 12000 damage to the attacked creep and stuns it for 5 seconds (1.75 seconds on bosses). Level Bonus: +450 damage AC_TYPE_OFFENSIVE_UNIT 15, 800 range, 5s cooldown
Energetic Attack
Each attack costs 2 mana. Without mana the tower can't attack.
|
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 5
AUTOCAST_numBuffsBeforeIdle: 0
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT
AUTOCAST_manacost: 15
AUTOCAST_range: 800
AUTOCAST_buffType: 0
AUTOCAST_targetSelf: true
AUTOCAST_targetType: TARGET_TYPE_CREEPS
target_art:
AUTOCAST_autoRange: 800
private function onAutocast takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer size = creep.getSize()
call tower.doSpellDamage(creep,12000+(tower.getLevel()*450),tower.calcSpellCritNoBonus())
call SFXOnUnit("Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl",creep.getUnit(),"origin")
if size < SIZE_BOSS then
call cb_stun.applyOnlyTimed(tower,creep,5)
else
call cb_stun.applyOnlyTimed(tower,creep,1.75)
endif
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
local unit towerUnit = tower.getUnit()
local real mana = GetUnitState(towerUnit, UNIT_STATE_MANA)
if (mana < 2) then
call tower.orderStop()
else
call SetUnitState(towerUnit , UNIT_STATE_MANA, mana-2)
endif
set towerUnit = null
endfunction
|
Zeus v1
2500
|
ID: 199
Family ID:
Author: Boekie
Rarity: unique
Element: storm
Attack Type: Energy
Attack Range: 1200
Attack CD: 2
Damage: 2581-2600
Mana: 100
Mana regen: 1
Status: Approved
|
Description: Zeus, the God of Thunder, is able to invoke massive lighting storms.
Specials:
+5 mana/lvl
Thunderstorm
Zeus releases a mighty thunderstorm, this thunder storm strikes creeps in 1000 range for 2500 spelldamage and stuns them for 0.5 seconds (20% chance on bosses). There is a maximum of 20 lightning strikes. Level Bonus: +125 damage +1 lightning strike per 5 levels AC_TYPE_OFFENSIVE_IMMEDIATE 90, 1000 range, 10s cooldown
Electrified Attack
Zeus's attacks deal an additional 500 spelldamage in 175 AoE around their target. Level Bonus: +20 spelldamage
Divine Hammer
Whenever Zeus kills a creep he restores 5% of his maximum mana.
|
Download
Toggle Triggers Autocast
AUTOCAST_cooldown: 10
AUTOCAST_autoRange: 1000
AUTOCAST_manacost: 90
AUTOCAST_range: 1000
AUTOCAST_targetType: 0
AUTOCAST_numBuffsBeforeIdle: 0
caster_art:
target_art:
AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE
AUTOCAST_buffType: 0
AUTOCAST_isExtended: false
AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
set tower.userInt2 = 20 + (R2I(tower.getLevel()/5))
if tower.userInt3 == 0 then
set tower.userInt3 = Effect.create("Abilities\\Spells\\Orc\\Purge\\PurgeBuffTarget.mdl", tower.getX() - 16, tower.getY() - 16, 50, 0)
endif
call PeriodicEvent(tower.userInt).enable()
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
if Event.isMainTarget() then
call tower.doSpellDamageAoEUnit(Event.getTarget(),175,500+(tower.getLevel()*20),tower.calcSpellCritNoBonus(),0.0)
endif
endfunction
On Kill function onKill takes Tower tower returns nothing
local unit towerUnit = tower.getUnit()
call SetUnitState(towerUnit,UNIT_STATE_MANA, GetUnitState(towerUnit,UNIT_STATE_MANA)+GetUnitState(towerUnit,UNIT_STATE_MAX_MANA)*0.05)
set towerUnit = null
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt=0 //stores periodic
set tower.userInt2=0 //stores number of bolts to still be releaseed
set tower.userInt3=0 //stores static effect
endfunction
On Tower Destruction function onDestruct takes Tower tower returns nothing
if tower.userInt3 != 0 then
call Effect(tower.userInt3).destroy()
set tower.userInt3 = 0
endif
endfunction
Periodic
PERIODIC_period: 0.2
function periodic takes Tower tower returns nothing
local Iterate inRange
local integer numResults = 0
local Unit result
local Unit next
local PeriodicEvent pE
if tower.userInt2 > 0 then
set inRange = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,1200)
loop
set next = inRange.next()
exitwhen next == 0
set numResults = numResults + 1
if GetRandomReal(0.0,1.0) <= 1.0 / numResults then
set result = next
endif
endloop
if numResults > 0 then
call tower.doSpellDamage(result,2500.0+(tower.getLevel()*125),tower.calcSpellCritNoBonus())
if result.getSize() >= SIZE_BOSS then
if tower.calcChance(0.20) then
call cb_stun.applyOnlyTimed(tower, result, 0.5)
endif
else
call cb_stun.applyOnlyTimed(tower, result, 0.5)
endif
call SFXOnUnit("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",result.getUnit(),"origin")
endif
set tower.userInt2 = tower.userInt2 - 1
else
set pE=Event.getCurrentPeriodicEvent()
set tower.userInt=pE
if tower.userInt3 != 0 then
call Effect(tower.userInt3).destroy()
set tower.userInt3 = 0
endif
call pE.disable()
endif
endfunction
|
Bonk, the Living Mountain v1
2500
|
ID: 200
Family ID:
Author: Boekie
Rarity: unique
Element: nature
Attack Type: Physical
Attack Range: 750
Attack CD: 3
Damage: 3670-3670
Status: Approved
|
Description: This enormous creature is able to crush everything with its enormous hands.
Specials:
Splash attack: 100 AoE: 100% damage +25% dmg to masses (+0.5%/lvl)
Landslide!
Bonk has a 25% chance on attack to throw rocks at all creeps in 300 AoE around the main target. These rocks deal 700 spelldamage and stun for 0.5 seconds. Landslide deals 15 bonus spelldamage per grow, but the ability only works once Bonk has grown at least 20 times. Level Bonus: +50 spelldamage
Crush!
Whenever Bonk damages a stunned creep it deals 5000 spelldamage to it. When this happens, towers in 500 range will gain 10% attackspeed and damage for 10 seconds. Crush deals 50 bonus spelldamage per grow, but the ability only works once Bonk has grown at least 10 times. Level Bonus: +250 spelldamage +0.4% attackspeed and damage
Grow!
Every 25 seconds Bonk grows, gaining 4 experience and 3% bonus attackdamage. Bonk can grow 160 times. Level Bonus: +0.1% bonus attackdamage |
Download
Toggle Triggers Header globals
BuffType boekie_mountainMorale_buff
ProjectileType rock
MultiboardValues boekie_grow_MultiboardValue
endglobals
public function hit takes Projectile p, Unit creep returns nothing
local Tower tower = p.getCaster()
if p.userInt == creep.getUID() then
call tower.doSpellDamage(creep,700+(tower.getLevel()*50)+(tower.userInt*15),tower.calcSpellCritNoBonus())
call cb_stun.applyOnlyTimed(tower, creep, 0.5)
endif
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 boekie_mountainMorale_buff = BuffType.create(10.00, 0, true)
call m.addModification(MOD_DAMAGE_ADD_PERC, 0.10, 0.004)
call m.addModification(MOD_ATTACKSPEED, 0.10, 0.004)
call boekie_mountainMorale_buff.setBuffModifier(m)
call boekie_mountainMorale_buff.setBuffIcon('@@0@@')
set rock = ProjectileType.create("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl",4,700)
call rock.enableHoming(ProjectileTargetEvent.hit,0)
set boekie_grow_MultiboardValue = MultiboardValues.create(1)
call boekie_grow_MultiboardValue.setKey(0,"Number of Grows")
endfunction
On Attack
ONATTACK_chance: 0.25
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
local Iterate it
local Unit next
local real tx = tower.getX()
local real ty = tower.getY()
if tower.userInt >= 20 then //check number of grows
set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,Event.getTarget(), 300)
loop
set next = it.next()
exitwhen next == 0
set Projectile.createFromPointToUnit(rock,tower,1,0,tx,ty,100,next,true,false,false).userInt = next.getUID()
endloop
endif
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer level = tower.getLevel()
local Iterate it
local Unit next
if tower.userInt >= 10 then //check number of grows
if creep.getBuffOfGroup("stun") != 0 then
set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_TOWERS,tower,500)
call tower.doSpellDamage(creep, 5000+(level*250)+(tower.userInt*50),tower.calcSpellCritNoBonus())
call Effect.createScaled("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl", creep.getX(), creep.getY(), 0.0, 0, 2.0).setLifetime(3.0)
loop
set next = it.next()
exitwhen next == 0
call boekie_mountainMorale_buff.apply(tower,next,tower.getLevel())
endloop
endif
endif
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 0 //count number of grows
endfunction
On Tower Details function onTowerDetails takes Tower tower returns MultiboardValues
// Show total number of grows
call boekie_grow_MultiboardValue.setValue(0,I2S(tower.userInt))
return boekie_grow_MultiboardValue
endfunction
Periodic
PERIODIC_period: 25
function periodic takes Tower tower returns nothing
local integer level = tower.getLevel()
if tower.userInt < 160 then
call Effect.createScaled("Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl", tower.getX(), tower.getY(), 30.0, 0, 1.8).setLifetime(1.0)
call tower.modifyProperty(MOD_DAMAGE_ADD_PERC, 0.03+(level*0.001))
call tower.addExp(4.0)
set tower.userInt = tower.userInt + 1 //increment number of grows
call tower.setScale(0.35 + tower.userInt * 0.0025)
endif
endfunction
|
Inferno Beacon v1
2500
|
ID: 227
Family ID:
Author: Boekie
Rarity: common
Element: fire
Attack Type: Elemental
Attack Range: 900
Attack CD: 0.9
Damage: 1729-1729
Mana: 45
Mana regen: 2
Status: Approved
|
Description: This tower uses magical flames to strike multiple targets.
Fire Blast
Releases a blast of fire that strikes all targets in 200 AoE around the main target for 2150 damage. Level Bonus: +107 damage. AC_TYPE_OFFENSIVE_UNIT 20, 900 range, 1s cooldown |
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 1
AUTOCAST_numBuffsBeforeIdle: 0
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT
AUTOCAST_manacost: 20
AUTOCAST_range: 900
AUTOCAST_buffType: 0
AUTOCAST_targetSelf: false
AUTOCAST_targetType: 0
target_art:
AUTOCAST_autoRange: 900
private function onAutocast takes Tower tower returns nothing
call SFXAtUnit("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl",Event.getTarget().getUnit())
call tower.doSpellDamageAoEUnit(Event.getTarget(), 200, 2150 + tower.getLevel() * 107, tower.calcSpellCritNoBonus(), 0.0)
endfunction
|
Description: