Shard of Souls v1
750
|
ID: 220
Family ID:
Author: Der_kleine_Tomy
Rarity: rare
Element: darkness
Mana: 75
Mana regen: 4
Status: Approved
|
Specials:
+2% buff duration/lvl
Soul Link
Links 3 enemies' souls together for 2.5 seconds. If a linked unit takes damage all other linked units will take 12.5% of this damage. This tower does not benefit from damage increasing items or oils. Level Bonus: +0.3% damage +1 target at level 15 and 25 AC_TYPE_ALWAYS_BUFF 50, 1000.0 range, 5.0s cooldown
Soul Consumption
Whenever a unit under the effect of Soul Link dies, the Shard of Souls consumes its soul granting 1 experience to the tower.
|
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 5.0
AUTOCAST_numBuffsBeforeIdle: 1
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF
AUTOCAST_manacost: 50
AUTOCAST_range: 1000.0
AUTOCAST_buffType: tomy_SoulLink
AUTOCAST_targetSelf: false
AUTOCAST_targetType: TARGET_TYPE_CREEPS
target_art:
AUTOCAST_autoRange: 1000.0
private function onAutocast takes Tower tower returns nothing
local Unit target = Event.getTarget()
local integer level = tower.getLevel()
local integer counter = 1
local integer maxTargets = 3
local Iterate iterator
local Unit next
local lightning array effects
if level == 25 then
set maxTargets = maxTargets + 2
elseif level >= 15 then
set maxTargets = maxTargets + 1
endif
set effects[0] = AddLightningEx("DRAL", false, tower.getX(), tower.getY(), tower.getZ(), target.getX(), target.getY(), target.getZ())
if target.getBuffOfType(tomy_SoulLink) == 0 then
call tomy_SoulLink.apply(tower, target, level)
endif
loop
exitwhen counter == maxTargets
set iterator = Iterate.overUnitsInRangeOfUnit(tower, TARGET_CREEPS, target, 600.0 )
loop
set next = iterator.next()
exitwhen next == 0 or next.getBuffOfType(tomy_SoulLink) == 0
endloop
exitwhen next == 0
if next != 0 then
call iterator.destroy()
endif
call tomy_SoulLink.apply(tower, next, level)
set effects[counter] = AddLightningEx("DRAL", false, GetUnitX(next.getUnit()), GetUnitY(next.getUnit()), GetUnitFlyHeight(next.getUnit()), GetUnitX(target.getUnit()), GetUnitY(target.getUnit()), GetUnitFlyHeight(target.getUnit()))
set target = next
set counter = counter + 1
endloop
call TriggerSleepAction(0.20)
loop
set counter = counter - 1
exitwhen counter == -1
call DestroyLightning(effects[counter])
set effects[counter] = null // Not sure if this is needed
endloop
endfunction
Header globals
//@export
BuffType tomy_SoulLink
boolean tomy_isSoulLinkDamage
endglobals
function tomy_SoulLink_OnCreate takes Buff b returns nothing
local Unit caster = b.getCaster()
local Buff firstBuff = caster.userInt
set caster.userInt = b // Points to first buff
set b.userInt = 0
// Link buffs (Double linked list)
// b.userInt = previousBuff
// b.userInt2 = nextBuff
if firstBuff == 0 then
set b.userInt2 = 0
else
set firstBuff.userInt = b
set b.userInt2 = firstBuff
endif
endfunction
function tomy_SoulLink_OnCleanup takes Buff b returns nothing
local Buff nextBuff = b.userInt2
local Buff prevBuff = b.userInt
local Unit caster = b.getCaster()
// Link the buffs in the linked list correctly (prev <-> next)
if prevBuff == 0 then
set caster.userInt = nextBuff
else
set prevBuff.userInt2 = nextBuff
endif
if nextBuff != 0 then
set nextBuff.userInt = prevBuff
endif
endfunction
function tomy_SoulLink_OnDamaged takes Buff b returns nothing
local Tower damageSource = Event.getTarget()
local Unit caster = b.getCaster()
local real damage = Event.damage * (caster.userReal + caster.userReal2 * caster.getLevel())
local Buff currentBuff
// If the damage comes from Soul Link nothing will happen
if tomy_isSoulLinkDamage then
return
endif
set tomy_isSoulLinkDamage = true
set currentBuff = caster.userInt
loop
exitwhen currentBuff == 0
if currentBuff != b then // Don't deal extra damage to the damaged creep
if Event.isSpellDamage() then
set damage = damage / damageSource.getProp_SpellDmgDealt() // prevent the damage from being increased twice by spell damage
call damageSource.doSpellDamage(currentBuff.getBuffedUnit(), damage, 1)
else
call damageSource.doAttackDamage(currentBuff.getBuffedUnit(), damage, 1)
endif
endif
set currentBuff = currentBuff.userInt2 // next buff
endloop
set tomy_isSoulLinkDamage = false
endfunction
function tomy_SoulLink_OnDeath takes Buff b returns nothing
call b.getCaster().addExp(1.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 tomy_SoulLink = BuffType.create(2.5, 0, false)
call tomy_SoulLink.addEventOnCreate(EventHandler.tomy_SoulLink_OnCreate)
call tomy_SoulLink.addEventOnCleanup(EventHandler.tomy_SoulLink_OnCleanup)
call tomy_SoulLink.addEventOnDeath(EventHandler.tomy_SoulLink_OnDeath)
call tomy_SoulLink.addEventOnDamaged(EventHandler.tomy_SoulLink_OnDamaged, 100.0, 0.00)
call tomy_SoulLink.setBuffIcon('@@0@@')
set tomy_isSoulLinkDamage = false
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 0 // Linked List (points to the first buff)
set tower.userReal = 0.125
set tower.userReal2 = 0.003
endfunction
|
Militia Outpost v1
750
|
ID: 418
Family ID:
Author: ShyGnome
Rarity: uncommon
Element: iron
Attack Type: Physical
Attack Range: 850
Attack CD: 0.7
Damage: 213-213
Status: Approved
|
Description: Militia guardians rain axes at the heads of the enemies. However, they are not very accurate, and afraid of undead and large creeps.
Specials:
-20% dmg to bosses (+0.7%/lvl) -20% dmg to undead (+0.5%/lvl) +20% dmg to nature (+0.5%/lvl)
Hail of Axes
Militia guardians throw axes to up to 3 enemies at once, but each attack has 33% chance to miss. If there are less creeps than attacks, the remaining axes will hit the main target. Level Bonus: -1.1% chance to miss +1 target at levels 15 and 25 |
Download
Toggle Triggers Header globals
//@import
ProjectileType MilitiaAxe
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
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
local integer attacks = 2
local boolean add = false
local Unit maintarget = Event.getTarget()
local Unit target
local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_TYPE_CREEPS,maintarget,450)
local real sidearc = 0.20
local boolean itDestroyed = false
if tower.getLevel() >= 15 then
set attacks = attacks + 1
endif
if tower.getLevel() >= 25 then
set attacks = attacks + 1
endif
loop
exitwhen attacks == 0 // Exit when all attacks are fired
// If the Iterate is not destroyed, get the next target
if not itDestroyed then
set target = it.next()
// If there are no more targets
if target == 0 then
set itDestroyed = true // Iterate is destroyed (auto destroy)
set target = maintarget // target is the maintarget now
endif
endif
// If there are no more units, shoot at the maintarget (itDestroyed). If there are units then don't shoot at the maintarget
if itDestroyed or target != maintarget then
call Projectile.createBezierInterpolationFromUnitToUnit(MilitiaAxe,tower,0,0,tower,target,0,sidearc,0,true).setScale(0.40)
set attacks = attacks - 1
set sidearc = -sidearc
if add then
set sidearc = sidearc + 0.20
endif
set add = not add
endif
endloop
// If the Iterate is not destroyed yet, destroy it
if not itDestroyed then
call it.destroy()
endif
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
if tower.calcBadChance(0.33-0.011*tower.getLevel()) then
set Event.damage = 0
call tower.getOwner().displayFloatingTextX("Miss",tower,255, 0, 0,255,0.05,0.0,2.0)
endif
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 2 // Save the family member (1 = first member)
set tower.userInt2 = 0 // Used to save the buff (double linked list)
endfunction
|
Storm Lantern v1
750
|
ID: 551
Family ID:
Author: Boekie
Rarity: uncommon
Element: storm
Attack Type: Energy
Attack Range: 1000
Attack CD: 1.3
Damage: 529-529
Status: Approved
|
Description: This tower is able to release a burst attack.
Burst Lightning
Has a 20% chance on attack to fire 3 extra projectiles at random creeps in 300 range around the main target. Each extra projectile deals the same amount of damage as a normal attack. Level Bonus: +1% chance +1 extra projectile at levels 15 and 25 |
Download
Toggle Triggers Header globals
endglobals
//@import
function newAttack takes Tower tower, integer numShots, Creep creep 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: 0.20
ONATTACK_chanceLevelAdd: 0.01
function onAttack takes Tower tower returns nothing
local Creep creep = Event.getTarget()
local integer numShots = 3
local integer twrLevel = tower.getLevel()
if twrLevel == 25 then
set numShots = 5
elseif twrLevel >= 15 then
set numShots = 4
endif
call newAttack(tower,numShots,creep)
endfunction
|
Cursed Grounds v1
750
|
ID: 564
Family ID:
Author: drol
Rarity: rare
Element: darkness
Attack Type: Decay
Attack Range: 775
Attack CD: 1
Damage: 280-324
Status: Approved
|
Description: Ripped open by a savage curse, this rock formation sprays spells on people not careful enough to stay away.
Specials:
Bounce attack:
4 targets
-30% damage per bounce
Cursed Attack
This tower has a 25% chance on damage to deal 200 additional spell damage and weaken the target for 4 seconds, reducing its movement speed by 20% and make it suffer 10% more damage from spells. Level Bonus: +1% chance +10 spell damage +0.1 sec slow duration
Mortal Coil - Aura
Grants 10% bonus damage against human, orc and nature creeps to all towers within 350 range. Level Bonus: +0.4% damage |
Download
Toggle Triggers Header globals
//@export
BuffType drol_slow
//@export
BuffType drol_mortalAura
endglobals
//The init function
private function init takes nothing returns nothing
local Modifier slow = Modifier.create()
local Modifier m = Modifier.create()
call slow.addModification(MOD_MOVESPEED,0,-0.001)
call slow.addModification(MOD_SPELL_DAMAGE_RECEIVED, 0, 0.0005)
set drol_slow = BuffType.create(0,0,false)
call drol_slow.setBuffIcon('@@0@@')
call drol_slow.setBuffModifier(slow)
call drol_slow.setStackingGroup("drol_slow1")
set drol_mortalAura = BuffType.createAuraEffectType(true)
call m.addModification(MOD_DMG_TO_HUMANOID,0.1,0.002)
call m.addModification(MOD_DMG_TO_ORC,0.1,0.002)
call m.addModification(MOD_DMG_TO_NATURE,0.1,0.002)
call drol_mortalAura.setBuffModifier(m)
call drol_mortalAura.setStackingGroup("drol_mortalAura")
call drol_mortalAura.setBuffIcon('@@1@@')
endfunction
On Damage
ONDAMAGE_chance: .25
ONDAMAGE_chanceLevelAdd: 0.01
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer lvl = tower.getLevel()
if creep.isImmune() == false then
call tower.doSpellDamage(creep,200*(1+lvl*0.05),tower.calcSpellCritNoBonus())
call drol_slow.applyCustomTimed(tower,creep,R2I(0.2*1000),4+lvl*0.1)
call SFXOnUnit("Abilities\\Spells\\Orc\\FeralSpirit\\feralspirittarget.mdl",creep.getUnit(),"origin")
endif
endfunction
Tower Aura
AURA_powerAdd: 2
AURA_auraEffect: drol_mortalAura
AURA_levelAdd: 2
AURA_power: 0
AURA_targetType: TARGET_TYPE_TOWERS
AURA_targetSelf: true
AURA_level: 0
AURA_auraRange: 350
|
Lava Geyser v1
750
|
ID: 573
Family ID:
Author: drol
Rarity: uncommon
Element: fire
Attack Type: Elemental
Attack Range: 1100
Attack CD: 1.8
Damage: 646-685
Status: Approved
|
Description: A sleeping geyser that only sprouts fire now and then.
Specials:
Splash attack: 175 AoE: 30% damage +20% dmg to normals (+0.4%/lvl)
Ignite
The geyser has a 30% chance on damaging a creep to ignite the target, dealing 15% of the tower's attack damage as spell damage per second and reducing the target's health regeneration by 15% for 8 seconds. Level Bonus: +0.6% attack damage +0.3% health regeneration reduction |
Download
Toggle Triggers Header globals
//@import
BuffType drol_fireDot
endglobals
private function init takes nothing returns nothing
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
set drol_fireDot.apply(tower,Event.getTarget(),tower.getLevel()*3 + 100).userReal = tower.getCurrentAttackDamageWithBonus() * (0.15 + tower.getLevel() * 0.006)
endfunction
|
Sun Crusader v1
750
|
ID: 666
Family ID:
Author: cedi
Rarity: rare
Element: astral
Attack Type: Physical
Attack Range: 750
Attack CD: 0.75
Damage: 176-176
Mana: 100
Mana regen: 0
Status: Approved
|
Description: The perfect soldiers against the undead.
Specials:
Attacks GROUND only Bounce attack: 5 targets -10% damage per bounce +50% dmg to undead +1 mana/lvl
For the God
This tower casts a buff on a friendly tower that increases attackdamage and experience gain by 40%. The buff lasts 8 seconds. Level Bonus: +0.1 seconds duration +1% attack damage and experience gain AC_TYPE_OFFENSIVE_BUFF 10, 600 range, 4.00s cooldown
Blessed Weapon
Everytime this tower damages a creep it has a 15% chance to deal 500 spelldamage and gain 2 mana. Level Bonus: +50 damage +0.1 mana regeneration |
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 4.00
AUTOCAST_numBuffsBeforeIdle: 5
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF
AUTOCAST_manacost: 10
AUTOCAST_range: 600
AUTOCAST_buffType: cedi_CrusaderBuff
AUTOCAST_targetSelf: true
AUTOCAST_targetType: TARGET_TYPE_TOWERS
target_art: Abilities\Spells\Human\Resurrect\ResurrectCaster.mdl
AUTOCAST_autoRange: 600
private function onAutocast takes Tower tower returns nothing
endfunction
Header globals
BuffType cedi_CrusaderBuff
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 cedi_CrusaderBuff = BuffType.create( 8.00, 0.1, true )
call cedi_CrusaderBuff.setBuffIcon( '@@0@@' )
call m.addModification( MOD_DAMAGE_ADD_PERC, 0.40, 0.01 )
call m.addModification( MOD_EXP_RECEIVED, 0.40, 0.01 )
call cedi_CrusaderBuff.setBuffModifier( m )
call cedi_CrusaderBuff.setStackingGroup( "cedi_Crusader" )
endfunction
On Damage
ONDAMAGE_chance: 0.15
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl", Event.getTarget().getUnit(), "origin" ) )
call tower.doSpellDamage( Event.getTarget(), 500.00 + I2R( tower.getLevel() ) * 50.00, tower.calcSpellCritNoBonus() )
call SetUnitState( tower.getUnit(), UNIT_STATE_MANA, GetUnitState( tower.getUnit(), UNIT_STATE_MANA ) + 2.00 + ( 0.10 * I2R( tower.getLevel() ) ) )
endfunction
|
Grown Cactus v1
760
|
ID: 43
Family ID:
Author: Lapsus
Rarity: common
Element: nature
Attack Type: Essence
Attack Range: 820
Attack CD: 2.5
Damage: 1422-1422
Status: Approved
|
Description: A troublesome desert plant with a high AoE. Moderately more efficient against mass creeps and humans.
Specials:
Splash attack: 320 AoE: 50% damage +21% dmg to masses (+1.3%/lvl) +21% dmg to humanoids (+1.3%/lvl) |
Download
|
Description: