Superior Ice Defender v1
2500
|
ID: 506
Family ID:
Author: Natac
Rarity: common
Element: ice
Attack Type: Elemental
Attack Range: 900
Attack CD: 1.4
Damage: 3363-3613
Status: Approved
|
|
Download
|
Superior Astral Defender v1
2500
|
ID: 509
Family ID:
Author: Natac
Rarity: common
Element: astral
Attack Type: Energy
Attack Range: 850
Attack CD: 1.2
Damage: 2788-3213
Status: Approved
|
Description: Common elementar defender. |
Download
|
Superior Iron Defender v1
2500
|
ID: 517
Family ID:
Author: Natac
Rarity: common
Element: iron
Attack Type: Physical
Attack Range: 800
Attack CD: 1
Damage: 2500-2500
Status: Approved
|
Description: Common elementar defender. |
Download
|
Divine Priest v1
2500
|
ID: 600
Family ID:
Author: Boekie
Rarity: uncommon
Element: astral
Attack Type: Elemental
Attack Range: 1000
Attack CD: 2
Damage: 2179-2179
Status: Approved
|
Description: This holy priest is able to smite creeps. It's very weak at the start but becomes a lot stronger when it gains experience.
Specials:
+3% attackspeed/lvl
Smite
When this tower damages a creep it has 5% chance to smite it, dealing 380 spelldamage. Level Bonus: +2% chance +684 spelldamage -1.8 permanent armor reduction (-0.6 on bosses) at level 25 |
Download
Toggle Triggers On Damage
ONDAMAGE_chance: 0.05
ONDAMAGE_chanceLevelAdd: 0.02
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer level = tower.getLevel()
call tower.doSpellDamage(creep,380.0+(level*684.0),tower.calcSpellCritNoBonus())
call SFXOnUnit("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl",creep.getUnit(),"origin")
if level == 25 then
if creep.getSize() < SIZE_BOSS then
call creep.modifyProperty(MOD_ARMOR, -1.8)
else
call creep.modifyProperty(MOD_ARMOR, -0.6)
endif
endif
endfunction
|
Steel Trap v1
2500
|
ID: 626
Family ID:
Author: Boekie
Rarity: uncommon
Element: iron
Attack Type: Physical
Attack Range: 950
Attack CD: 1.3
Damage: 1409-1409
Status: Approved
|
Description: This trap is used to capture beasts but it works on other stuff too.
Activate Trap
Every 11 seconds this tower traps 5 creeps in 950 range, dealing 2000 spelldamage and stunning them for 1.5 seconds. Level Bonus: +100 spelldamage -0.2 seconds cooldown |
Download
Toggle Triggers Header globals
endglobals
//@import
function trap takes Tower tower, real cooldown, real baseDamage, real damageAdd, real stunDuration, integer maxTargets 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
Periodic
PERIODIC_period: 2
function periodic takes Tower tower returns nothing
call trap(tower, 11, 2000, 100, 1.5, 5)
endfunction
|
Plagued Crypt v1
2500
|
ID: 645
Family ID:
Author: cedi
Rarity: unique
Element: darkness
Attack Type: Decay
Attack Range: 1150
Attack CD: 3
Damage: 3899-3916
Status: Approved
|
Description: The Plague Bringer is a siege engine mounted ontop of corrupted crypts using the corpses of the fallen as ammunition.
Specials:
Attacks GROUND only Splash attack: 25 AoE: 100% damage 50 AoE: 40% damage 150 AoE: 25% damage
Plague
When a creep is damaged by this tower it will become infected with a plague. This plague deals 750 damage per second and lasts 5 seconds. Every 1.5 seconds the plague can spread to a creep in 250 range around the infected creep. If an infected creep is infected again by the plague the duration will refresh and the damage is increased by 375. Level Bonus: +30 damage +0.2 seconds duration +15 damage per rebuff
Army of the Damned
Every 3 seconds, if there is a corpse within 1150 range this tower will extract its soul, increasing its attack speed and damage by 5% and Plague's rate of spread by 10%. This buff lasts 20 seconds and stacks, but new stacks will not refresh the duration of old ones. Level Bonus: +0.4 seconds duration |
Download
Toggle Triggers Header globals
BuffType BT
BuffType cedi_armyOfDamned
MultiboardValues MB
endglobals
function periodicDamage takes Buff B returns nothing
local Unit T = B.getBuffedUnit()
local Unit C = B.getCaster()
local integer level = C.getLevel()
call C.doSpellDamage( T, (750.00 + level * 30.00) + (( 375.00 + 15.00 * level) * B.userInt ), C.calcSpellCritNoBonus() )
endfunction
function periodicSpread takes Buff B returns nothing
local Tower C = B.getCaster()
local Unit T = B.getBuffedUnit()
local Unit U
local integer level = C.getLevel()
local Iterate I
//spread
if B.userInt2 == 1 then
set I = Iterate.overUnitsInRangeOfUnit( C, TARGET_CREEPS, T, 250.00 )
loop
set U = I.nextRandom()
exitwhen U == 0
if U != T then
call BT.apply(C, U, level)
call I.destroy()
exitwhen true
endif
endloop
else
set B.userInt2 = 1
endif
set B = C.getBuffOfType( cedi_armyOfDamned )
if B == 0 then
call Event.getCurrentPeriodicEvent().enableAdvanced(1.5, false )
else
//call Event.getCurrentPeriodicEvent().enableAdvanced(1.5 * Pow( 0.9, B.getLevel()), false ) //this decreases time between spreads by 10%
call Event.getCurrentPeriodicEvent().enableAdvanced(1.5 * Pow( 1.1, -B.getLevel()), false ) //this increases rate of spreading by 10% (there is a difference)
endif
endfunction
function refresh takes Buff B returns nothing
set B.userInt = B.userInt + 1
endfunction
function onCreate takes Buff B returns nothing
set B.userInt = 0 // Damage increase multiplier
set B.userInt2 = 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 m = Modifier.create()
set BT = BuffType.create( 5.00, 0.2, false )
call BT.setBuffIcon( '@@0@@' )
call BT.addPeriodicEvent( periodicDamage, 1 )
call BT.addPeriodicEvent( periodicSpread, 0.01 ) //the periodic gets set in the periodic handling event
call BT.setEventOnRefresh( refresh )
call BT.setEventOnUpgrade( refresh )
call BT.addEventOnCreate( onCreate)
call m.addModification( MOD_ATTACKSPEED, 0.0, 0.05 )
call m.addModification( MOD_DAMAGE_BASE_PERC, 0.0, 0.05 )
set cedi_armyOfDamned = BuffType.create( -1, 0, true )
call cedi_armyOfDamned.setBuffIcon( '@@1@@' )
call cedi_armyOfDamned.setBuffModifier( m )
set MB = MultiboardValues.create( 2 )
call MB.setKey( 0, "Souls Extracted" )
call MB.setKey( 1, "Infection Rate" )
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
call BT.apply(tower, Event.getTarget(), tower.getLevel())
endfunction
On Tower Details function onTowerDetails takes Tower tower returns MultiboardValues
call MB.setValue( 0, I2S( tower.getBuffOfType( cedi_armyOfDamned ).getLevel() ) )
call MB.setValue( 1, formatFloat( 1.5 * Pow( 1.1, -tower.getBuffOfType( cedi_armyOfDamned ).getLevel() ), 2 ) )
return MB
endfunction
Periodic
PERIODIC_period: 3.0
function periodic takes Tower tower returns nothing
local Iterate I = Iterate.overCorpsesInRange( tower, tower.getX(), tower.getY(), 1150.00 )
local unit u = I.nextCorpse()
local Buff B = tower.getBuffOfType(cedi_armyOfDamned)
local integer UID
if u != null then
call I.destroy()
call DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl", GetUnitX(u), GetUnitY(u)))
call RemoveUnit(u)
set u = null
if B != 0 then
set B = cedi_armyOfDamned.apply(tower, tower, B.getLevel() + 1)
else
set B = cedi_armyOfDamned.apply(tower, tower, 1)
endif
set UID = B.getUID()
call TriggerSleepAction((20 + 0.4 * tower.getLevel()) * tower.getProp_BuffDuration())
if B.getUID() == UID then
call B.setLevel(B.getLevel()-1)
if B.getLevel() == 0 then
call B.removeBuff()
endif
endif
endif
endfunction
|
Lich King v1
2500
|
ID: 649
Family ID:
Author: Natac
Rarity: unique
Element: ice
Attack Type: Elemental
Attack Range: 800
Attack CD: 1.4
Damage: 2197-2296
Status: Approved
|
Description: The frozen king of all ice and snow.
Icy Curse
Curses creeps it damages for 5 seconds, increasing their debuff duration by 30%. Level Bonus: +0.8% debuff duration
King's Authority - Aura
The Lich King rules over every creep in 900 range. Every creep leaving this range will be punished with 500 spelldamage for every second it was under this aura's effect. If a creep dies in this area of authority, the spelldamage that didn't get dealt is stored. The next creep to then leave the Lich King's area will be punished with [stored damage x 0.5] spelldamage. Level Bonus: +20 damage per second +[stored damage x 0.04] spelldamage |
Download
Toggle Triggers Header globals
BuffType natac_icyCurse_BuffType
BuffType natac_kingsPresent_Aura
MultiboardValues natac_storedDamage_MuliboardValue
endglobals
function initAuraBuff takes Buff b returns nothing
set b.userInt = Game.getGameTime() // The time at which the buff was applied
set b.userInt2 = b.getLevel() // The max dps of this buff*
set b.userInt3 = b.getCaster() // The king, ruling over this unit*
set b.userReal = 0.0 // Stored damage, if the creep leaves the range of an enraged king*
//*) only needed if you have 2 kings in a row and no CleanUp event is fired, cause the units
// directly enter the aura of the 2nd king.
endfunction
function enterNewArea takes Buff b returns nothing
local integer newDps = b.getLevel()
local Tower oldKing = b.userInt3 // The king who has ruled over this unit until now.
// The damage the unit would have suffered from the old king, if it werent entering a new area now.
local real oldWrathDmg = oldKing.userReal*(0.5+oldKing.getLevel()*0.04)
set oldKing.userReal = 0.0 // Reset stored damage of the old king
set b.userReal3 = b.getCaster() // Set to the new king, ruling over this unit now
// Store the max dps, if the dps of the new area is higher
if(newDps > b.userInt2) then
set b.userInt2 = newDps
endif
// Attach wrath dmg of the old king, to deal the dmg later
if(oldWrathDmg > 0.0) then
set b.userReal = b.userReal + oldWrathDmg
endif
endfunction
function doDamage takes Buff b returns nothing
local Unit target = b.getBuffedUnit()
local Unit caster = b.getCaster()
// (1) Calculate time gone since the buff was applied
// (2) multiply by 0.04 to get seconds
// (3) finally multiply with max dmg per second to get overall damage
local real damage = (Game.getGameTime()-b.userInt)*0.04*b.userInt2
// (4) Add the stored damage, other kings would have done to this unit
set damage = damage + b.userReal
if(GetUnitState(target.getUnit(), UNIT_STATE_LIFE) > 0 ) then
// Creep is alive: Add all stored damage to the normal dealt damage
if(caster.userReal > 0) then
call caster.getTeam().displayFloatingText("Feel the Wrath!", caster, 15,15,200)
// Add stored damage
set damage = damage + (caster.userReal*(0.5+caster.getLevel()*0.04))
set caster.userReal = 0.0 // Reset stored damage
endif
call SFXAtUnit("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", target.getUnit())
call caster.doSpellDamage(b.getBuffedUnit(), damage, caster.calcSpellCritNoBonus())
call caster.getTeam().displayFloatingText(I2S(R2I(damage)), target,15,15,200) //Show at TARGET
else
// Creep is dead: Store damage for the next alive creep
set caster.userReal = caster.userReal + damage
call caster.getTeam().displayFloatingText("+"+I2S(R2I(damage)), caster,15,15,200) //Show at CASTER
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 icyCurseMod = Modifier.create()
call icyCurseMod.addModification(MOD_DEBUFF_DURATION, 0.30, 0.008)
set natac_icyCurse_BuffType = BuffType.create(5, 0.0, false)
call natac_icyCurse_BuffType.setBuffModifier(icyCurseMod)
call natac_icyCurse_BuffType.setBuffIcon('@@0@@')
set natac_kingsPresent_Aura = BuffType.createAuraEffectType(false)
call natac_kingsPresent_Aura.addEventOnCreate (EventHandler.initAuraBuff)
call natac_kingsPresent_Aura.setEventOnRefresh(EventHandler.enterNewArea)
call natac_kingsPresent_Aura.addEventOnCleanup(EventHandler.doDamage)
call natac_kingsPresent_Aura.setBuffIcon('@@1@@')
set natac_storedDamage_MuliboardValue = MultiboardValues.create(1)
call natac_storedDamage_MuliboardValue.setKey(0, "Stored Damage")
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
call natac_icyCurse_BuffType.apply(tower, Event.getTarget(), tower.getLevel())
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userReal = 0 // Damage stored for creeps dying under the auras effect.
endfunction
On Tower Details function onTowerDetails takes Tower tower returns MultiboardValues
call natac_storedDamage_MuliboardValue.setValue(0, formatFloat(tower.userReal,0))
return natac_storedDamage_MuliboardValue
endfunction
Tower Aura
AURA_auraEffect: natac_kingsPresent_Aura
AURA_power: 500
AURA_level: 500
AURA_auraRange: 900
AURA_targetType: TARGET_TYPE_CREEPS
AURA_levelAdd: 20
AURA_powerAdd: 20
AURA_targetSelf: false
|
Description: