scorpion182
New Member
- Reaction score
- 5
This was my submission for the Hive Hero Contest #2. Contains 4 Spells.
1. Tremor
Ability Type: Active
Target Type: None
Effect: Area Damage & Summon
Description:
Slams the ground causing 3 boulders rippled out from the ground and dealing initial damage. When a boulder crushes the ground it takes damage, and summons a lava spawn.
Level 1 - Deals 50 initial damage, 90 damage each boulder.
Level 2 - Deals 100 initial damage, 180 damage each boulder.
Level 3 - Deals 150 initial damage, 270 damage each boulder.
2. Magma Crush
Ability Type: Active
Target Type: None
Effect: Area Damage
Description:
Slams the ground, tossing nearby enemy units into the air. Deals damage on impact.
Level 1 - Deals 60 damage.
Level 2 - Deals 100 damage.
Level 3 - Deals 140 damage.
3. Enrage
Ability Type: Passive
Effect: Area Damage, Knockback, Remove Buffs
Description:
Grocklar has a 10% chance to unleash his rage aura. Knocking back nearby enemy units, and remove all negative buffs from him.
Level 1 - Deals 75 knockback damage.
Level 2 - Deals 100 knockback damage.
Level 3 - Deals 125 knockback damage.
4. Meteor Shower
Ability Type: Channeling
Target Type: None
Effect: Area Damage, Ignite
Description:
Calls massive meteors fall from the sky, dealing massive damage and ignite to anyone who is directly hit by it.
Credits:
History
1. Tremor
Ability Type: Active
Target Type: None
Effect: Area Damage & Summon
Description:
Slams the ground causing 3 boulders rippled out from the ground and dealing initial damage. When a boulder crushes the ground it takes damage, and summons a lava spawn.
Level 1 - Deals 50 initial damage, 90 damage each boulder.
Level 2 - Deals 100 initial damage, 180 damage each boulder.
Level 3 - Deals 150 initial damage, 270 damage each boulder.
JASS:
//============================================================================================
//Tremor by scorpion182
//2009
//
//Requires :
//- vJASS compiler
//- TimerUtils by Vexorian
//- ParabolicMovement by Moyack
//Importing: You need to copy the following triggers below:
//- This trigger
//- TimerUtils,ParabolicMovement then
//- You need to copy the custom objects from the object editor.
//- Make sure the rawcodes of those objects matches the corresponding
// rawcode ids in this spell
//- Make sure you import the dummy.mdx model as well and gives it
// the path: war3mapImported\dummy.mdx
//- Enjoy! Give credit where due!
//============================================================================================
scope VSlaM initializer INIT
//====Config Option===========================================================================
globals
private constant integer DUMMY_ID=039;e000039; //dummy unit rawcode
private constant integer SPELL_ID=039;A000039; //tremor ability rawcode
private constant real TIME_LIFE=15.0 //lava spawn time life
private constant real DISTANCE=1500.0 //tremor distance
private constant real M_H=500. //maximum height
private constant real INIT_AOE=250. //inital damage AoE
private constant real SPEED=15.0 //tremor movement speed
private constant string CASTER_FX="Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl" //caster fx
private constant string ATT_POINT="origin" //attachment point
private constant string TREMOR_MISSILE="Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl" //tremor fx
private constant attacktype AT=ATTACK_TYPE_HERO //attack type
private constant damagetype DT=DAMAGE_TYPE_NORMAL //damage type
private constant weapontype WT=WEAPON_TYPE_WHOKNOWS //weapon type
private integer array LAVA[3]
private boolexpr b
endglobals
private function LAVA_SPAWN takes nothing returns nothing
//=======Lava Spawn Config====================================================================
set LAVA[0]=039;nlv1039; //lava spawn lvl1 rawcode
set LAVA[1]=039;nlv2039; //lava spawn lvl2 rawcode
set LAVA[2]=039;nlv3039; //lava spawn lvl3 rawcode
//============================================================================================
endfunction
private constant function INITIAL_DAMAGE takes integer lvl returns real
return 50.*lvl //initial damage
endfunction
private constant function TREMOR_DAMAGE takes integer lvl returns real
return 90.*lvl //tremor damage
endfunction
//============================================================================================
private struct data
unit caster
unit array missile[3]
timer t
real dist
real pos
effect array fx[3]
real array deg[3]
static method create takes unit c, timer t returns data
local data d=data.allocate()
set d.caster=c
set d.t=t
set d.dist=0.
set d.deg[0]=0.
set d.deg[1]=120.
set d.deg[2]=-120.
return d
endmethod
private method onDestroy takes nothing returns nothing
local integer i=0
loop
exitwhen i>2
call KillUnit(.missile<i>)
call DestroyEffect(.fx<i>)
set .missile<i>=null
set .fx<i>=null
set i=i+1
endloop
call ReleaseTimer(.t)
endmethod
endstruct
private function filter takes nothing returns boolean
return (IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) and (IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)==false) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction
private function Move takes nothing returns nothing
local timer t=GetExpiredTimer()
local data d=data(GetTimerData(t))
local real x
local real y
local integer i=0
local group g
local unit PickedUnit
local integer lvl=GetUnitAbilityLevel(d.caster,SPELL_ID)
local real dmg=TREMOR_DAMAGE(lvl)
if (d.pos > 0) then
loop
exitwhen i>2
call SetUnitPosition(d.missile<i>, GetUnitX(d.missile<i>) + SPEED * Cos(bj_DEGTORAD*(GetUnitFacing(d.missile<i>)+d.deg<i>)), GetUnitY(d.missile<i>) + SPEED * Sin(bj_DEGTORAD*(GetUnitFacing(d.missile<i>)+d.deg<i>)))
set d.pos = d.pos - SPEED
call SetUnitFlyHeight(d.missile<i>, ParabolaZ(M_H, d.dist, d.pos), 0)
set i=i+1
endloop
call TimerStart(t,0.03125,false,function Move)
else
set i=0
loop
exitwhen i>2
set PickedUnit=CreateUnit(GetOwningPlayer(d.missile<i>),LAVA[lvl-1],GetUnitX(d.missile<i>),GetUnitY(d.missile<i>),GetUnitFacing(d.missile<i>))
call UnitApplyTimedLife(PickedUnit,039;BTLF039;,TIME_LIFE)
set g=CreateGroup()
call GroupEnumUnitsInRange(g,GetUnitX(d.missile<i>),GetUnitY(d.missile<i>),200.,b)
loop
set PickedUnit = FirstOfGroup(g)
exitwhen PickedUnit==null
if IsUnitEnemy(PickedUnit,GetOwningPlayer(d.caster)) then
call UnitDamageTarget(d.caster,PickedUnit, dmg, true, false, AT, DT, WT)
endif
call GroupRemoveUnit(g, PickedUnit)
endloop
call DestroyGroup(g)
set i=i+1
endloop
call d.destroy()
endif
set t=null
endfunction
private function Actions takes nothing returns nothing
local data d
local timer t=NewTimer()
local unit caster=GetSpellAbilityUnit()
local real x=GetUnitX(caster) + DISTANCE * Cos(GetUnitFacing(caster) * bj_DEGTORAD)
local real y=GetUnitY(caster) + DISTANCE * Sin(GetUnitFacing(caster) * bj_DEGTORAD)
local real dx = x - GetUnitX(caster)
local real dy = y - GetUnitY(caster)
local integer i=0
local group g
local unit f
local integer lvl=GetUnitAbilityLevel(caster,SPELL_ID)
local real dmg=INITIAL_DAMAGE(lvl)
set g=CreateGroup()
call GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),INIT_AOE,b)
loop
set f = FirstOfGroup(g)
exitwhen f==null
if IsUnitEnemy(f,GetOwningPlayer(caster)) then
call UnitDamageTarget(caster,f, dmg, true, false, AT, DT, WT)
endif
call GroupRemoveUnit(g, f)
endloop
call DestroyGroup(g)
set d=d.create(GetSpellAbilityUnit(),t)
call DestroyEffect(AddSpecialEffectTarget(CASTER_FX,caster,ATT_POINT))
loop
exitwhen i>2
set d.missile<i>=CreateUnit(GetOwningPlayer(caster),DUMMY_ID,GetUnitX(caster),GetUnitY(caster),GetUnitFacing(caster))
call SetUnitScale(d.missile<i>,2.,2.,2.)
set d.fx<i>=AddSpecialEffectTarget(TREMOR_MISSILE,d.missile<i>,"origin")
set i=i+1
endloop
set d.dist=SquareRoot(dx * dx + dy * dy)
set d.pos=d.dist
call SetTimerData(t,integer(d))
call TimerStart(t,0.03125,false,function Move)
set f=null
set g=null
set caster=null
set t=null
endfunction
private function INIT takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition(t, Condition( function Conditions ) )
call TriggerAddAction(t, function Actions )
call LAVA_SPAWN()
set b=Condition(function filter)
set t=null
endfunction
endscope
</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>
2. Magma Crush
Ability Type: Active
Target Type: None
Effect: Area Damage
Description:
Slams the ground, tossing nearby enemy units into the air. Deals damage on impact.
Level 1 - Deals 60 damage.
Level 2 - Deals 100 damage.
Level 3 - Deals 140 damage.
JASS:
//============================================================================================
//Magma Crush by scorpion182
//2009
//
//Requires :
//- vJASS compiler
//- TimerUtils by Vexorian
//- ParabolicMovement by Moyack
//Importing: You need to copy the following triggers below:
//- This trigger
//- TimerUtils,ParabolicMovement, then
//- You need to copy the custom objects from the object editor.
//- Make sure the rawcodes of those objects matches the corresponding
// rawcode ids in this spell
//- Make sure you import the dummy.mdx model as well and gives it
// the path: war3mapImported\dummy.mdx
//- Enjoy! Give credit where due!
//============================================================================================
scope MC initializer init
//====Config Option===========================================================================
globals
private constant integer DUMMY_ID=039;e000039; //dummy unit rawcode
private constant integer SPELL_ID=039;A001039; //tremor ability rawcode
private constant string CASTER_FX="Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl" //caster fx
private constant string VICTIM_FX1="Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl" //victim fx1
private constant string VICTIM_FX2="Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl" //victim fx2
private constant string C_ATT_POINT="origin" //caster attachment point
private constant string V_ATT_POINT="origin" //target attachment point
private constant attacktype AT=ATTACK_TYPE_HERO //attack type
private constant damagetype DT=DAMAGE_TYPE_NORMAL //damage type
private constant weapontype WT=WEAPON_TYPE_WHOKNOWS //weapon type
private constant real MAX_HEIGHT=500. //maximum height
private constant real SPEED=15 //target movement when fly
private constant real RANGE=350. //aoe
endglobals
private constant function INITIAL_DAMAGE takes integer lvl returns real
return 20+40.*lvl //initial damage
endfunction
//============================================================================================
private struct data
unit caster
timer t
group victim
real pos
real dis
static method create takes unit c, timer t returns data
local data d=data.allocate()
set d.caster=c
set d.t=t
set d.victim=CreateGroup()
set d.pos=MAX_HEIGHT
set d.dis=MAX_HEIGHT
return d
endmethod
private method onDestroy takes nothing returns nothing
local unit f
loop
set f=FirstOfGroup(.victim)
exitwhen f==null
call GroupRemoveUnit(.victim,f)
call PauseUnit(f,false)
call SetUnitAnimation(f,"stand")
endloop
call DestroyGroup(.victim)
call ReleaseTimer(.t)
endmethod
endstruct
private function CopyGroup takes group g returns group
set bj_groupAddGroupDest = CreateGroup()
call ForGroup(g, function GroupAddGroupEnum)
return bj_groupAddGroupDest
endfunction
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction
private function filter takes nothing returns boolean
return (IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) and (IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)==false) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Start takes nothing returns nothing
local timer t=GetExpiredTimer()
local data d=data(GetTimerData(t))
local unit f
local group g=CreateGroup()
local integer lvl=GetUnitAbilityLevel(d.caster,SPELL_ID)
local real dmg=INITIAL_DAMAGE(lvl)
set g=CopyGroup(d.victim)
if (d.pos > 0) then
set d.pos = d.pos - SPEED
loop
set f=FirstOfGroup(g)
exitwhen f==null
call GroupRemoveUnit(g,f)
call SetUnitFlyHeight(f, ParabolaZ(MAX_HEIGHT, d.dis, d.pos), 0)
endloop
call TimerStart(t,0.03125,false,function Start)
else
loop
set f=FirstOfGroup(g)
exitwhen f==null
call GroupRemoveUnit(g,f)
call SetUnitFlyHeight(f,0,0)
call DestroyEffect(AddSpecialEffectTarget(VICTIM_FX1,f,V_ATT_POINT))
call DestroyEffect(AddSpecialEffectTarget(VICTIM_FX2,f,V_ATT_POINT))
call UnitDamageTarget(d.caster,f, dmg, true, false, AT, DT, WT)
endloop
call d.destroy()
endif
call DestroyGroup(g)
set f=null
set g=null
set t=null
endfunction
private function Actions takes nothing returns nothing
local timer t=NewTimer()
local data d=data.create(GetTriggerUnit(),t)
local boolexpr b=Condition(function filter)
local group g=CreateGroup()
local unit f
set f=CreateUnit(GetOwningPlayer(d.caster),DUMMY_ID,GetUnitX(d.caster),GetUnitY(d.caster),0)
call UnitApplyTimedLife(f,039;BTLF039;,0.3)
call SetUnitScale(f,2.0,2.0,2.0)
call SetTimerData(t,integer(d))
call GroupEnumUnitsInRange(d.victim,GetUnitX(d.caster),GetUnitY(d.caster),RANGE,b)
set g=CopyGroup(d.victim)
call DestroyEffect(AddSpecialEffectTarget(CASTER_FX,f,C_ATT_POINT))
loop
set f=FirstOfGroup(g)
exitwhen f==null
call GroupRemoveUnit(g,f)
if (IsUnitEnemy(f,GetOwningPlayer(d.caster))) then
call PauseUnit(f,true)
call SetUnitAnimation(f,"death")
call UnitAddAbility(f,039;Amrf039;)
call UnitRemoveAbility(f,039;Amrf039;)
else
call GroupRemoveUnit(d.victim,f)
endif
endloop
call TimerStart(t,0.03125,false,function Start)
call DestroyGroup(g)
set f=null
set g=null
set b=null
set t=null
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition(t, Condition( function Conditions ) )
call TriggerAddAction(t, function Actions )
set t=null
endfunction
endscope
3. Enrage
Ability Type: Passive
Effect: Area Damage, Knockback, Remove Buffs
Description:
Grocklar has a 10% chance to unleash his rage aura. Knocking back nearby enemy units, and remove all negative buffs from him.
Level 1 - Deals 75 knockback damage.
Level 2 - Deals 100 knockback damage.
Level 3 - Deals 125 knockback damage.
JASS:
//============================================================================================
//Enrage by scorpion182
//2009
//
//Requires :
//- vJASS compiler
//- TimerUtils by Vexorian
//- Knockback System by Rising Dusk
//
//Importing: You need to copy the following triggers below:
//- This trigger
//- TimerUtils, Knockback, then
//- You need to copy the custom objects from the object editor.
//- Make sure the rawcodes of those objects matches the corresponding
// rawcode ids in this spell
//- Make sure you import the dummy.mdx model as well and gives it
// the path: war3mapImported\dummy.mdx
//- Enjoy! Give credit where due!
//============================================================================================
scope ENR initializer init
//====Config Option===========================================================================
globals
private constant integer DUMMY_ID=039;e000039; //dummy unit rawcode
private constant integer SPELL_ID=039;A005039; //Enrage ability rawcode
private constant string CASTER_FX="Abilities\\Spells\\NightElf\\BattleRoar\\RoarCaster.mdl" //caster fx
private constant string ATT_POINT="origin" //caster's attachment point
private constant attacktype AT=ATTACK_TYPE_HERO //attack type
private constant damagetype DT=DAMAGE_TYPE_NORMAL //damage type
private constant weapontype WT=WEAPON_TYPE_WHOKNOWS //weapon type
private constant integer CHANCE=10 //10% chance
private constant real RANGE=350.0 //aoe
private constant real STARTSPEED=800. //knockback start speed
private constant real DECREMENT=40. //knockback decrement
endglobals
private constant function INITIAL_DAMAGE takes integer lvl returns real
return 50+25.*lvl //initial damage
endfunction
//============================================================================================
private function Conditions takes nothing returns boolean
local integer i=GetRandomInt(1,100)
return GetUnitAbilityLevel(GetTriggerUnit(),SPELL_ID) > 0 and i<=CHANCE
endfunction
private function filter takes nothing returns boolean
return (IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) and (IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)==false) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Actions takes nothing returns nothing
local unit caster=GetTriggerUnit()
local unit f=CreateUnit(GetOwningPlayer(caster),DUMMY_ID,GetUnitX(caster),GetUnitY(caster),0)
local real a
local group g=CreateGroup()
local boolexpr b=Condition(function filter)
local integer lvl=GetUnitAbilityLevel(caster,SPELL_ID)
local real dmg=INITIAL_DAMAGE(lvl)
call UnitApplyTimedLife(f,039;BTLF039;,0.5)
call SetUnitScale(f,2.0,2.0,2.0)
call DestroyEffect(AddSpecialEffectTarget(CASTER_FX,caster,ATT_POINT))
call UnitRemoveBuffs(caster,false,true)
call GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),RANGE,b)
loop
set f=FirstOfGroup(g)
exitwhen f==null
call GroupRemoveUnit(g,f)
if (IsUnitEnemy(f,GetOwningPlayer(caster))) then
set a = 57.29582 * Atan2(GetUnitY(f) - GetUnitY(caster), GetUnitX(f) - GetUnitX(caster))
call UnitDamageTarget(caster,f, dmg, true, false, AT, DT, WT)
call KnockbackTarget(caster, f, a, STARTSPEED, DECREMENT, true, false, false)
endif
endloop
call DestroyGroup(g)
call DestroyBoolExpr(b)
set b=null
set f=null
set g=null
set caster=null
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition(t, Condition( function Conditions ) )
call TriggerAddAction(t, function Actions )
set t=null
endfunction
endscope
4. Meteor Shower
Ability Type: Channeling
Target Type: None
Effect: Area Damage, Ignite
Description:
Calls massive meteors fall from the sky, dealing massive damage and ignite to anyone who is directly hit by it.
JASS:
//============================================================================================
//Meteor Shower by scorpion182
//2009
//
//Requires :
//- vJASS compiler
//- TimerUtils by Vexorian
//
//Importing: You need to copy the following triggers below:
//- This trigger
//- TimerUtils, then
//- You need to copy the custom objects from the object editor.
//- Make sure the rawcodes of those objects matches the corresponding
// rawcode ids in this spell
//- Make sure you import the dummy.mdx model as well and gives it
// the path: war3mapImported\dummy.mdx
//- Enjoy! Give credit where due!
//============================================================================================
scope MS initializer Init
//====Config Option===========================================================================
globals
private constant integer DUMMY_ID=039;e000039; //dummy unit rawcode
private constant integer DUMMY_M_ID=039;h000039; //storm launcher unit
private constant integer SPELL_ID=039;A002039; //meteor shower ability rawcode
private constant integer DUMMY_SPELL=039;A003039; //meteor shower dummy ability rawcode
private constant integer IGNITE=039;A004039; //ignite rawcode
private constant string ORDER="dispel"
private constant real AOE=600. //spell aoe
private constant real METEOR_RANGE=175.0 //meteor aoe
private constant attacktype AT=ATTACK_TYPE_HERO //attack type
private constant damagetype DT=DAMAGE_TYPE_NORMAL //damage type
private constant weapontype WT=WEAPON_TYPE_WHOKNOWS //weapon type
private boolexpr b
endglobals
private constant function INITIAL_DAMAGE takes integer lvl returns real
return 50.*lvl //initial damage
endfunction
//============================================================================================
private struct data
unit caster
timer t1
static method create takes unit c, timer t1 returns data
local data d=data.allocate()
set d.caster=c
set d.t1=t1
return d
endmethod
private method onDestroy takes nothing returns nothing
call ReleaseTimer(.t1)
endmethod
endstruct
private function filter takes nothing returns boolean
return (IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) and (IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)==false) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction
private function Shower takes nothing returns nothing
local timer time=GetExpiredTimer()
local data d=data(GetTimerData(time))
local unit c
local unit t
local integer i =0
local real an = GetRandomReal ( 1 , 360 )
local real dis = GetRandomReal ( 1 , AOE )
local real rad = an *0.01734216
local real x = GetUnitX (d.caster) + dis * Cos ( rad )
local real y = GetUnitY (d.caster) + dis * Sin ( rad )
local group grp=CreateGroup()
local unit PickedUnit
local integer lvl=GetUnitAbilityLevel(d.caster,SPELL_ID)
if GetUnitCurrentOrder(d.caster) == OrderId(ORDER) then
set c = CreateUnit( GetOwningPlayer(d.caster ),DUMMY_M_ID,x ,y , 0 )
call SetUnitScale(c,2.,2.,2.)
call UnitApplyTimedLife(c,039;BTLF039;,1.0)
call SetUnitFlyHeight(c,2000,0)
call UnitAddAbility( c , 039;Avul039; )
set an = GetRandomReal ( 1 , 360 )
set dis = GetRandomReal ( 1 , AOE )
set rad = an *0.01734216
set x = GetUnitX (d.caster) + dis * Cos ( rad )
set y = GetUnitY (d.caster) + dis * Sin ( rad )
set t = CreateUnit(GetOwningPlayer(d.caster),DUMMY_M_ID, x , y , 0 )
call UnitApplyTimedLife(t,039;BTLF039;,1.0)
call UnitRemoveAbility( t , 039;Aloc039; )
call UnitAddAbility( c, DUMMY_SPELL )
call IssueTargetOrder( c,"thunderbolt", t)
call GroupEnumUnitsInRange(grp,x,y,METEOR_RANGE,b)
loop
set PickedUnit = FirstOfGroup(grp)
exitwhen PickedUnit==null
if IsUnitEnemy(PickedUnit,GetOwningPlayer(d.caster)) then
set t = CreateUnit(GetOwningPlayer(d.caster),DUMMY_ID, x , y , 0 )
call UnitApplyTimedLife(t,039;BTLF039;,0.3)
call UnitAddAbility(t,IGNITE)
call SetUnitAbilityLevel(t,IGNITE,GetUnitAbilityLevel(d.caster,SPELL_ID))
call IssueTargetOrder(t,"acidbomb",PickedUnit)
call UnitDamageTarget(d.caster,PickedUnit,INITIAL_DAMAGE(lvl),true, false, AT, DT, WT)
endif
call GroupRemoveUnit(grp, PickedUnit)
endloop
call DestroyGroup(grp)
call TimerStart(time,0.3,false,function Shower)
else
call d.destroy()
endif
set grp=null
set PickedUnit=null
set c=null
set t=null
set time=null
endfunction
private function Actions takes nothing returns nothing
local timer t1=NewTimer()
local data d=data.create(GetSpellAbilityUnit(),t1)
call SetTimerData(t1,integer(d))
call TimerStart(t1,0.0,false,function Shower)
set t1=null
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition(t, Condition( function Conditions ) )
call TriggerAddAction(t, function Actions )
set b=Condition(function filter)
set t=null
endfunction
endscope
Credits:
Spells:
- scorpion182
Systems:
- Vexorian (TimerUtils)
- Rising_Dusk (Knockback)
- By Moyack and Spec
Models:
- Vexorian (dummy.mdx)
Skins:
- evilwart-dragon (mountain.blp)
Icons:
- KelThuzad (BTNBloodlust)
- FrIkY (BTNFireImpact)
- anarchianbedlam (BTNRagnarok)
- Mr.Goblin (BTNRainoffire)
- scorpion182
Systems:
- Vexorian (TimerUtils)
- Rising_Dusk (Knockback)
- By Moyack and Spec
Models:
- Vexorian (dummy.mdx)
Skins:
- evilwart-dragon (mountain.blp)
Icons:
- KelThuzad (BTNBloodlust)
- FrIkY (BTNFireImpact)
- anarchianbedlam (BTNRagnarok)
- Mr.Goblin (BTNRainoffire)
History
v1.0-First Release
v1.1-Some Optimizations
v1.2-Use Better Parabolic Function & More Optimizations
v1.1-Some Optimizations
v1.2-Use Better Parabolic Function & More Optimizations