Teacher v1
70
|
ID: 427
Family ID:
Author: Deikorim / Limfa
Rarity: uncommon
Element: astral
Attack Type: Elemental
Attack Range: 900
Attack CD: 1.5
Damage: 86-90
Status: Approved
|
Specials:
+20% exp gain
Knowledge
When the teacher attacks there's a 10% chance a random tower in 600 range will learn from her, gaining 1 experience. Level Bonus: +0.6% chance |
Download
Toggle Triggers Header globals
//@export
ProjectileType knowledge_green
//@export
ProjectileType knowledge_blue
//@export
ProjectileType knowledge_red
//@export
MultiboardValues limfa_teacherboard
endglobals
function hit takes Projectile p, Unit result returns nothing
local Tower t = p.getCaster()
if result.getUID() == p.userInt then
call result.addExp(p.userReal)
if Tower(p.userInt2).getUID() == t.getUID() then
set t.userReal2 = t.userReal2 + p.userReal * result.getProp_ExpReceived()
endif
endif
endfunction
//@export
function teacher_attack takes Tower tower, real xp returns nothing
local Iterate inRange
local Unit result
local ProjectileType pt
local Projectile p
local integer i
if tower.calcChance(0.10+0.006*tower.getLevel()) then
set inRange = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TOWERS,600)
set result = inRange.nextRandom()
if result == tower then
set result = inRange.nextRandom()
endif
if result != 0 then
set i = GetRandomInt(1,3)
if i == 1 then
set pt = knowledge_green
elseif i == 2 then
set pt = knowledge_red
elseif i == 3 then
set pt = knowledge_blue
endif
set p = Projectile.createFromUnitToUnit(pt, tower, 1.0, 1.0, tower, result, true, false, true)
call p.setScale(0.7)
set p.userReal = xp
set p.userInt = result.getUID()
set p.userInt2 = tower.getUID()
call inRange.destroy()
endif
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
set limfa_teacherboard = MultiboardValues.create(1)
call limfa_teacherboard.setKey(0,"Xp Granted")
set knowledge_green = ProjectileType.create( "Objects\\InventoryItems\\tomeGreen\\tomeGreen.mdl", 20.0, 450.00 )
call knowledge_green.enableFreeRotation()
call knowledge_green.disableExplodeOnHit()
call knowledge_green.enableHoming( ProjectileTargetEvent.hit, 0 )
set knowledge_blue = ProjectileType.create( "Objects\\InventoryItems\\tomeBlue\\tomeBlue.mdl", 20.0, 450.00 )
call knowledge_blue.enableFreeRotation()
call knowledge_blue.disableExplodeOnHit()
call knowledge_blue.enableHoming( ProjectileTargetEvent.hit, 0 )
set knowledge_red = ProjectileType.create( "Objects\\InventoryItems\\tomeRed\\tomeRed.mdl", 20.0, 450.00 )
call knowledge_red.enableFreeRotation()
call knowledge_red.disableExplodeOnHit()
call knowledge_red.enableHoming( ProjectileTargetEvent.hit, 0 )
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
call teacher_attack(tower,1)
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
|
Embershell Turtle Hatchling v1
70
|
ID: 532
Family ID:
Author: Velex
Rarity: uncommon
Element: fire
Attack Type: Decay
Attack Range: 800
Attack CD: 0.25
Damage: 50-49
Mana: 10
Mana regen: 1
Status: Approved
|
Description: Embershell Turtles are volatile creatures who tend to sporadically attack just about everything. Luckily, they tend to run out of steam rather quickly.
Specials:
+0.5 mana/lvl
Overheat
Each attack costs 1 mana, which is regenerated at a rate of 1 mana per second. |
Download
Toggle Triggers 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 < 1) then
call tower.orderStop()
else
call SetUnitState(towerUnit , UNIT_STATE_MANA, mana-1)
endif
set towerUnit = null
endfunction
|
Broken Fire Pit v1
70
|
ID: 555
Family ID:
Author: Boekie
Rarity: common
Element: fire
Attack Type: Decay
Attack Range: 800
Attack CD: 0.9
Damage: 57-57
Status: Approved
|
Description: A fire pit that has the ability to unleash some powerful flames.
Specials:
2x multicrit
Hot Coals
Whenever this tower kills a creep it gains 15% bonus crit chance for 7.5 seconds. Level Bonus: +0.05 sec duration +0.3% crit chance |
Download
Toggle Triggers Header globals
//@export
BuffType boekie_coals_buff
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_ATK_CRIT_CHANCE,0.15,0.001)
set boekie_coals_buff = BuffType.create(0.0,0.0,true) //0.0 time since I will apply it custom timed
call boekie_coals_buff.setBuffModifier(m)
call boekie_coals_buff.setBuffIcon('@@0@@')
call boekie_coals_buff.setStackingGroup("boekie_coals")
endfunction
On Kill function onKill takes Tower tower returns nothing
local integer lvl = tower.getLevel()
call boekie_coals_buff.applyCustomTimed(tower,tower,lvl*3,7.5+0.05*lvl)
endfunction
|
Broken Cage v1
70
|
ID: 580
Family ID:
Author: Chronos
Rarity: common
Element: darkness
Attack Type: Decay
Attack Range: 800
Attack CD: 1.5
Damage: 88-93
Status: Approved
|
Description: Common darkness tower, adept at eliminating magical, nature and undead foes.
Banish
Magic, undead and nature creeps damaged by this tower suffer an additional 35% of that damage as spelldamage. Level Bonus: +1% damage |
Download
Toggle Triggers On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
if creep.getCategory() <= CATEGORY_NATURE then
call tower.doSpellDamage(creep, Event.damage * (0.35 + (0.01 * tower.getLevel())), tower.calcSpellCritNoBonus())
call SFXAtUnit("Abilities\\Spells\\NightElf\\ManaBurn\\ManaBurnTarget.mdl", creep.getUnit())
endif
endfunction
|
Small Frozen Mushroom v1
70
|
ID: 591
Family ID:
Author: BetrayedKnight
Rarity: common
Element: ice
Attack Type: Elemental
Attack Range: 950
Attack CD: 1.1
Damage: 57-62
Status: Approved
|
Description: A colony of mushrooms able to chill living flesh. Deals bonus damage to humanoids orcs and nature but is weak against undead.
Specials:
-50% dmg to undead +35% dmg to nature (+1.2%/lvl) +35% dmg to orcs (+1.2%/lvl) +35% dmg to humanoids (+1.2%/lvl) |
Download
|
Rotted Flashing Grave v1
70
|
ID: 650
Family ID:
Author: Natac
Rarity: common
Element: storm
Attack Type: Energy
Attack Range: 2000
Attack CD: 1
Damage: 36-36
Status: Approved
|
Description: A common grave of a fallen storm warrior, whose wrath outlasts its death and still seeks for revenge.
Specials:
+10% dmg to magical (+1%/lvl)
Wrath of the Storm - Aura
The enormous wrath of the dead warrior flows out of this tower undirected. So the tower only hits a random target in range each attack. |
Download
Toggle Triggers Header globals
//@export
BuffType natac_flashingGraveRandomTarget_BuffType
endglobals
function setUserInt takes Buff b returns nothing
set b.userInt = b.getCaster() // To avoid this call on every "onAttack"-Event
endfunction
function attackRandomTarget takes Buff b returns nothing
local Tower tower = b.userInt
local Iterate iterator = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, 2000)
local integer loopIndex = 0 // Temp integer variable in both loops. Used as array index and total number of possible targets
local Unit loopUnit // Temp unit variable. Used for the loop and to store the choosen target
local Unit array unitsInRange // Contains all units found by the iterator
// --- Find a random Target ---
// Add all units to the array. So the array gets filled and we can also count the number of
// possible targets in the loopIndex.
loop
set loopUnit = iterator.next()
exitwhen loopUnit == 0
set unitsInRange[loopIndex] = loopUnit
set loopIndex = loopIndex + 1
endloop
set loopUnit = unitsInRange[GetRandomInt(0,loopIndex-1)] // Get random target
call IssueTargetOrder(tower.getUnit(), "attack", loopUnit.getUnit())
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 natac_flashingGraveRandomTarget_BuffType = BuffType.createAuraEffectType(true)
call natac_flashingGraveRandomTarget_BuffType.addEventOnCreate(EventHandler.setUserInt)
call natac_flashingGraveRandomTarget_BuffType.addEventOnAttack(EventHandler.attackRandomTarget, 1, 0)
endfunction
Tower Aura
AURA_auraEffect: natac_flashingGraveRandomTarget_BuffType
AURA_power: 1
AURA_level: 1
AURA_auraRange: 0
AURA_targetType: TARGET_TYPE_PLAYER_TOWERS + TARGET_TYPE_ELEMENT_STORM
AURA_levelAdd: 0
AURA_powerAdd: 0
AURA_targetSelf: true
|
Skink v1
150
|
ID: 254
Family ID:
Author: cedi
Rarity: uncommon
Element: nature
Attack Type: Decay
Attack Range: 800
Attack CD: 1
Damage: 28-34
Status: Approved
|
Description: It likes to hug people.
Poisonous Skin - Aura
This and any towers in 200 range gain a poisonous attack. The poison deals 3 spell damage per second for 5 seconds. The effect stacks and is attack speed and range adjusted. Level Bonus: +0.12 spell damage per second |
Download
Toggle Triggers Header globals
//@export
BuffType cedi_skinkA //Aura
//@export
BuffType cedi_skinkB //Buff
endglobals
function poisenskin takes Buff B returns nothing
local Tower C = B.getCaster()
local Tower T = B.getBuffedUnit()
local Unit U = Event.getTarget()
local Buff P = U.getBuffOfType( cedi_skinkB )
local real dmg = ( C.userReal + C.userReal2 * C.getLevel() ) * T.getCurrentAttackspeed() / ( T.getRange() / 800.00 )
if P != 0 then
if P.getCaster().getUID() == P.userInt then
call P.refreshDuration()
set P.userReal = P.userReal + dmg
else
set dmg = P.userReal + dmg
call P.removeBuff()
set P = cedi_skinkB.apply( C, U, C.getLevel() )
set P.userInt = C.getUID()
set P.userReal = dmg
endif
else
set P = cedi_skinkB.apply( C, U, C.getLevel() )
set P.userInt = C.getUID()
set P.userReal = dmg
endif
endfunction
function dot takes Buff B returns nothing
local Tower T = B.getCaster()
call T.doSpellDamage( B.getBuffedUnit(), B.userReal, T.calcSpellCritNoBonus() )
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\CorrosiveBreath\\ChimaeraAcidTargetArt.mdl", T.getUnit(), "head" ) )
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_skinkA = BuffType.createAuraEffectType( true )
call cedi_skinkA.setBuffIcon( '@@0@@' )
call cedi_skinkA.addEventOnAttack( poisenskin, 1.0, 0.0 )
set cedi_skinkB = BuffType.create( 5.00, 0.0, false )
call cedi_skinkB.setBuffIcon( '@@1@@' )
call cedi_skinkB.addPeriodicEvent( dot, 1.0 )
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userReal = 3
set tower.userReal2 = 0.12
endfunction
Tower Aura
AURA_powerAdd: 1
AURA_auraEffect: cedi_skinkA
AURA_levelAdd: 1
AURA_power: 0
AURA_targetType: TARGET_TYPE_TOWERS
AURA_targetSelf: true
AURA_level: 0
AURA_auraRange: 200
|
Description: