Sorceress v1
3800
|
ID: 160
Family ID:
Author: cedi
Rarity: unique
Element: astral
Attack Type: Magic
Attack Range: 1200
Attack CD: 3
Damage: 5760-5771
Abil. Factor: 0.45
Status: Approved
|
Choose Modification
Cycle through the modifications: Slow: 8% for 5 seconds, -20% dmg Silence: 5 seconds, 50% chance, -40% dmg Health Regeneration: -10% for 5 seconds, -25% dmg Armor: -6% for 5 seconds, -25% dmg Spell Vulnerability: 12% for 5 seconds, -25% dmg AoE: 50, -15% dmg
Add Modification
Adds the bonus to the missile if the tower has enough damage left.
Remove Modification
Removes the bonus to the missile and returns the damage used.
Magic Missile
Whenever this tower attacks it launches a magic missile in the target's direction. The missile hits all units in 150 AoE and deals 100% of the tower's attack damage as spell damage to the hit units. The missile travels 1200 units. Level Bonus: +2% spell damage |
Download
Toggle Triggers Autocast
AUTOCAST_cooldown: 0
AUTOCAST_autoRange: 0
AUTOCAST_manacost: 0
AUTOCAST_range: 0
AUTOCAST_targetType: 0
AUTOCAST_numBuffsBeforeIdle: 0
caster_art:
target_art:
AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE
AUTOCAST_buffType: 0
AUTOCAST_isExtended: false
AUTOCAST_targetSelf: true
private function onAutocast takes Tower tower returns nothing
set tower.userInt2 = tower.userInt2 + 1
if tower.userInt2 > 6 then
set tower.userInt2 = 1
endif
call tower.getOwner().displaySmallFloatingText( strings[tower.userInt2], tower, 255, 255, 255, 40 )
endfunction
Autocast
AUTOCAST_cooldown: 0
AUTOCAST_autoRange: 0
AUTOCAST_manacost: 0
AUTOCAST_range: 0
AUTOCAST_targetType: 0
AUTOCAST_numBuffsBeforeIdle: 0
caster_art:
target_art:
AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE
AUTOCAST_buffType: 0
AUTOCAST_isExtended: false
AUTOCAST_targetSelf: true
private function onAutocast takes Tower tower returns nothing
local Data d = tower.userInt
//inc
if tower.userInt2 == 1 then
//slow
if d.dmg >= 20 then
set d.slow = d.slow + 8
set d.dmg = d.dmg - 20
endif
elseif tower.userInt2 == 2 then
//silence
if d.dmg >= 40 then
set d.silence = d.silence + 5
set d.dmg = d.dmg - 40
endif
elseif tower.userInt2 == 3 then
//regen
if d.dmg >= 25 then
set d.regen = d.regen + 10
set d.dmg = d.dmg - 25
endif
elseif tower.userInt2 == 4 then
//armor
if d.dmg >= 25 then
set d.armor = d.armor + 6
set d.dmg = d.dmg - 25
endif
elseif tower.userInt2 == 5 then
//spell
if d.dmg >= 25 then
set d.spell = d.spell + 12
set d.dmg = d.dmg - 25
endif
elseif tower.userInt2 == 6 then
//aoe
if d.dmg >= 15 then
set d.aoe = d.aoe + 50
set d.dmg = d.dmg - 15
endif
endif
endfunction
Autocast
AUTOCAST_cooldown: 0
AUTOCAST_autoRange: 0
AUTOCAST_manacost: 0
AUTOCAST_range: 0
AUTOCAST_targetType: 0
AUTOCAST_numBuffsBeforeIdle: 0
caster_art:
target_art:
AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE
AUTOCAST_buffType: 0
AUTOCAST_isExtended: false
AUTOCAST_targetSelf: true
private function onAutocast takes Tower tower returns nothing
local Data d = tower.userInt
//inc
if tower.userInt2 == 1 then
//slow
if d.slow >= 8 then
set d.slow = d.slow - 8
set d.dmg = d.dmg + 20
endif
elseif tower.userInt2 == 2 then
//silence
if d.silence >= 5 then
set d.silence = d.silence - 5
set d.dmg = d.dmg + 40
endif
elseif tower.userInt2 == 3 then
//regen
if d.regen >= 10 then
set d.regen = d.regen - 10
set d.dmg = d.dmg + 25
endif
elseif tower.userInt2 == 4 then
//armor
if d.armor >= 6 then
set d.armor = d.armor - 6
set d.dmg = d.dmg + 25
endif
elseif tower.userInt2 == 5 then
//spell
if d.spell >= 12 then
set d.spell = d.spell - 12
set d.dmg = d.dmg + 25
endif
elseif tower.userInt2 == 6 then
//aoe
if d.aoe > 150 then
set d.aoe = d.aoe - 50
set d.dmg = d.dmg + 15
endif
endif
endfunction
Header globals
ProjectileType PT
BuffType Slow
BuffType Armor
BuffType Spell
BuffType Regen
string array strings[7]
MultiboardValues MB
endglobals
struct Data
integer slow = 0 //+0.05
integer silence = 0 //+5.0
integer regen = 0 //+0.05
integer armor = 0 //+1
integer spell = 0 //+0.06
integer aoe = 150 //No percentage, integer value!
integer dmg = 100
endstruct
function coll takes Projectile P, Unit U returns nothing
local Tower T = P.getCaster()
local Data d = T.userInt
if d.slow > 0.0 then
//slow
call Slow.apply( T, U, d.slow )
endif
if d.silence > 0.0 then
//silence
if ( T.calcChance( 0.5 ) ) then
call cb_silence.applyOnlyTimed( T, U, d.silence )
endif
endif
if d.regen > 0.0 then
//regen
call Regen.apply( T, U, d.regen )
endif
if d.armor > 0.0 then
//armor
call Armor.apply( T, U, d.armor )
endif
if d.spell > 0.0 then
//spell
call Spell.apply( T, U, d.spell )
endif
if d.dmg > 0.0 then
call T.doSpellDamage( U, T.getCurrentAttackDamageWithBonus() * ( d.dmg / 100.00 ), T.calcSpellCritNoBonus() )
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 PT = ProjectileType.createRanged( "Abilities\\Weapons\\FaerieDragonMissile\\FaerieDragonMissile.mdl", 1200.0, 1200.0 )
call PT.enableCollision( coll, 150.0, TARGET_CREEPS, false )
call m.addModification( MOD_MOVESPEED, 0.00, -0.01 )
set Slow = BuffType.create( 5.0, 0.0, false )
call Slow.setBuffModifier( m )
call Slow.setBuffIcon( '@@0@@' )
set m = Modifier.create()
call m.addModification( MOD_ARMOR_PERC, 0.0, -0.01 )
set Armor = BuffType.create( 5.0, 0.0, false )
call Armor.setBuffModifier( m )
call Armor.setBuffIcon( '@@1@@' )
set m = Modifier.create()
call m.addModification( MOD_SPELL_DAMAGE_RECEIVED, 0.0, 0.01 )
set Spell = BuffType.create( 5.0, 0.0, false )
call Spell.setBuffModifier( m )
call Spell.setBuffIcon( '@@2@@' )
set m = Modifier.create()
call m.addModification( MOD_HP_REGEN_PERC, 0.0, -0.01 )
set Regen = BuffType.create( 5.0, 0.00, false )
call Regen.setBuffModifier( m )
call Regen.setBuffIcon( '@@3@@' )
set strings[1] = "Slow"
set strings[2] = "Silence"
set strings[3] = "Health Regeneration"
set strings[4] = "Armor"
set strings[5] = "Spell Vulnerability"
set strings[6] = "AoE"
set MB = MultiboardValues.create( 2 )
call MB.setKey( 0, "Damage %" )
call MB.setKey( 1, "Modification" )
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
local Data d = tower.userInt
local Projectile P = Projectile.createFromUnitToUnit( PT, tower, 1.0, 1.0, tower, Event.getTarget(), false, true, false )
call P.setCollisionParameters( d.aoe, TARGET_CREEPS )
call P.setScale( d.aoe / 150.0 * 6.0 ) //150 aoe has a missile size of 4 (8)
set P.z = 60.0
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
set Event.damage = 0
endfunction
On Level Up function onLevelUp takes Tower tower returns nothing
local Data d = tower.userInt
if Event.isLevelUp() then
set d.dmg = d.dmg + 2
else
set d.dmg = d.dmg - 2
endif
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
local Data data = Data.create()
set tower.userInt = data
set tower.userInt2 = 1
set tower.userInt3 = 0
set data.dmg = data.dmg + tower.getLevel() * 2
endfunction
On Tower Destruction function onDestruct takes Tower tower returns nothing
local Data data = tower.userInt
call data.destroy()
endfunction
On Tower Details
goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
local Data d = tower.userInt
local Playor p = Event.getMBObserver()
local real t = 3.0
call MB.setValue( 0, I2S( d.dmg ) + "%" )
call MB.setValue( 1, strings[tower.userInt2] )
call p.clearScreen()
call p.displayTimedText( "|cffFF8000Sorceress Stats:|r", t )
call p.displayTimedText( "Slow: |cffFFFF80" + I2S( d.slow ) + "%|r", t )
call p.displayTimedText( "Silence: |cffFFFF80" + I2S( d.silence ) + "|r seconds", t )
call p.displayTimedText( "Health Regeneration: |cffFFFF80-" + I2S( d.regen ) + "%|r", t )
call p.displayTimedText( "Armor: |cffFFFF80-" + I2S( d.armor ) + "%|r", t )
call p.displayTimedText( "Spell Vulnerability: |cffFFFF80-" + I2S( d.spell ) + "%|r", t )
call p.displayTimedText( "AoE: |cffFFFF80" + I2S( d.aoe ) + "|r", t )
return MB
endfunction
|
Description:
Latest Upload Comment: