Larcenist
REP: Respect, Envy, Prosperity?
- Reaction score
- 211
DotA Invoker-style Hero Template
Version 1.5: Fixed Wex, no more aura buff or anything.
Version 1.4b: Noticed some really stupid triggering in the Sun Strike trigger and fixed it. Removed the Quas aura and triggered the HP regen.
Version 1.4: Added Sun Strike (EEE).
Version 1.3b: Added instructions on how the triggers acually work and how to customize them to whatever you would want to do with them. It's located inside the ReadMe folder in the trigger editor.
Version 1.3: Changed the Instance Counting trigger so it works with 2 instances. Changed the Timer triggers, and and the Alternative Leveling Trigger.
Version 1.2: Changed Exort Bonus damage from Command aura to item damage bonus, so it looks a lot smoother. Added Alacrity (WWW) and Ghost Walk (QQW).
Version 1.1: Fixed a bug that occured when you invoked the same spell twice in a row.
Note that this works as a template for anyone who wants to make a Hero of Invoker-style.
This is my first anything uploaded here, so give me a lot of criticism.
Just one thing to point out:
1. There is a lag for a brief period when adding the Spell Book.
Features:
Jass/GUI? - GUI
MUI/MPI? - MPI unless I screwed up somewhere
Leakless - Yes
Imporant Notice!
This Spellpack does not include all the spells the Invoker gains from using his ulti. This only includes the following spells:
For those of you who haven't played the DotA hero Invoker, here's a short summary of what his abilities do. The Invoker can manipulate elements in order to gain different kinds of buffs. Each skill has got a max level of 7, and he can have up to 3 instances of these elements, giving each buff a max level of 21.
Spell descriptions:
Quas:
Gives 0.75 HP regen/sec per level per instance. (Max 15.75 HP regen per second).
Wex:
Gives 2% AS and 1% MS per level per instance. (Max 42% AS and 21% MS)
Exort:
Gives 3 damage per level per instance. (Max 63 damage).
Invoke:
Combines the properties of the elements currently being manipulated, creating a new spell at Invoker's disposal. The invoked spell is determined by the combination of Quas, Wex and Exort.
Ghost Walk (QQW)
Invoker manipulates the ice and electrical energies around him, rendering his body invisible. The elemental imbalance created as a consequence slows nearby enemies by up to 40% based on Quas, and Invoker from 30 to 0% based on Wex.
Alacrity (WWW)
Invoker infuses an ally with an immense surge of energy, increasing their attack speed to a maximum of 160% based on Wex for 5 seconds.
Sun Strike (EEE)
Sends a catastrophic ray of fiery energy from the sun at any targeted location after a 1.7 second delay, incinerating all enemies standing beneath it. Deals 75-450 damage based on Exort which is spread over all enemy units within its 200 AoE.
Codes: (Warning there is A LOT of If-Then-Else actions)
Initialization Settings and adding the Spell Book: (I added a comment on this one how the trigger would look in a regular map)
The use of Quas, Wex and Exort: (And the Instance Counting trigger)
The triggers for Wex and Exort looks the same, just other SphereValues.
Also the triggered HP regen from Quas:
A trigger to increase the bonuses when leveling any of the three Elemental-abilities:
And finally the Invoke trigger:
Invoked Spells:
Ghost Walk
Alacrity:
Sun Strike:
And the trigger to set the level of invoked spells that need it: (The use of "Invoke" runs this trigger automatically)
Screenshots:
Enjoy.
Version 1.5: Fixed Wex, no more aura buff or anything.
Version 1.4b: Noticed some really stupid triggering in the Sun Strike trigger and fixed it. Removed the Quas aura and triggered the HP regen.
Version 1.4: Added Sun Strike (EEE).
Version 1.3b: Added instructions on how the triggers acually work and how to customize them to whatever you would want to do with them. It's located inside the ReadMe folder in the trigger editor.
Version 1.3: Changed the Instance Counting trigger so it works with 2 instances. Changed the Timer triggers, and and the Alternative Leveling Trigger.
Version 1.2: Changed Exort Bonus damage from Command aura to item damage bonus, so it looks a lot smoother. Added Alacrity (WWW) and Ghost Walk (QQW).
Version 1.1: Fixed a bug that occured when you invoked the same spell twice in a row.
Note that this works as a template for anyone who wants to make a Hero of Invoker-style.
This is my first anything uploaded here, so give me a lot of criticism.
Just one thing to point out:
1. There is a lag for a brief period when adding the Spell Book.
Features:
Jass/GUI? - GUI
MUI/MPI? - MPI unless I screwed up somewhere
Leakless - Yes
Imporant Notice!
This Spellpack does not include all the spells the Invoker gains from using his ulti. This only includes the following spells:
- Quas
- Wex
- Exort
- Invoke
- Alacrity (WWW)
- Ghost Walk (QQW)
- Sun Strike (EEE)
For those of you who haven't played the DotA hero Invoker, here's a short summary of what his abilities do. The Invoker can manipulate elements in order to gain different kinds of buffs. Each skill has got a max level of 7, and he can have up to 3 instances of these elements, giving each buff a max level of 21.
Spell descriptions:
Quas:
Gives 0.75 HP regen/sec per level per instance. (Max 15.75 HP regen per second).
Wex:
Gives 2% AS and 1% MS per level per instance. (Max 42% AS and 21% MS)
Exort:
Gives 3 damage per level per instance. (Max 63 damage).
Invoke:
Combines the properties of the elements currently being manipulated, creating a new spell at Invoker's disposal. The invoked spell is determined by the combination of Quas, Wex and Exort.
Ghost Walk (QQW)
Invoker manipulates the ice and electrical energies around him, rendering his body invisible. The elemental imbalance created as a consequence slows nearby enemies by up to 40% based on Quas, and Invoker from 30 to 0% based on Wex.
Alacrity (WWW)
Invoker infuses an ally with an immense surge of energy, increasing their attack speed to a maximum of 160% based on Wex for 5 seconds.
Sun Strike (EEE)
Sends a catastrophic ray of fiery energy from the sun at any targeted location after a 1.7 second delay, incinerating all enemies standing beneath it. Deals 75-450 damage based on Exort which is spread over all enemy units within its 200 AoE.
Codes: (Warning there is A LOT of If-Then-Else actions)
Initialization Settings and adding the Spell Book: (I added a comment on this one how the trigger would look in a regular map)
Code:
Invoke Settings
Events
Map initialization
Conditions
Actions
Set Exort1 = Sphere - Exort 1
Set Exort2 = Sphere - Exort 2
Set Exort3 = Sphere - Exort 3
Set Quas1 = Sphere - Quas 1
Set Quas2 = Sphere - Quas 2
Set Quas3 = Sphere - Quas 3
Set Wex1 = Sphere - Wex 1
Set Wex2 = Sphere - Wex 2
Set Wex3 = Sphere - Wex 3
Set InvokeSpells[3] = Blizzard [QQQ] (Invoke)
Set InvokeSpells[12] = Ghost Walk [QQW]
Set InvokeSpells[21] = Storm Bolt [QWW] (Invoke)
Set InvokeSpells[30] = Alacrity (WWW)
Set InvokeSpells[102] = Siphon Mana [QQE] (Invoke)
Set InvokeSpells[111] = Banish [QWE] (Invoke)
Set InvokeSpells[120] = Holy Light [WWE] (Invoke)
Set InvokeSpells[201] = Divine Shield [QEE] (Invoke)
Set InvokeSpells[210] = Flame Strike [WEE] (Invoke)
Set InvokeSpells[300] = Phoenix [EEE] (Invoke)
Code:
Spell Book Adding
Events
Time - Elapsed game time is 0.50 seconds
Conditions
Actions
Unit Group - Pick every unit in (Units owned by Player 1 (Red) matching (((Matching unit) is A Hero) Equal to True)) and do (Actions)
Loop - Actions
Unit - Add Invoker Spell Book to (Picked unit)
Player - Disable Invoker Spell Book for (Owner of (Picked unit))
Trigger - Turn off (This trigger)
The use of Quas, Wex and Exort: (And the Instance Counting trigger)
Code:
Quas
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Quas
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereCheck[(Player number of (Owner of (Triggering unit)))] Equal to 3
Then - Actions
Set SphereCheck[(Player number of (Owner of (Triggering unit)))] = 1
Else - Actions
Set SphereCheck[(Player number of (Owner of (Triggering unit)))] = (SphereCheck[(Player number of (Owner of (Triggering unit)))] + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereCheck[(Player number of (Owner of (Triggering unit)))] Equal to 1
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue1[(Player number of (Owner of (Triggering unit)))] Equal to 0
Then - Actions
Set SphereValue1[(Player number of (Owner of (Triggering unit)))] = 1
Set Sphere1[(Player number of (Owner of (Triggering unit)))] = Quas1
Unit - Add Sphere1[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue1[(Player number of (Owner of (Triggering unit)))] Equal to 10
Then - Actions
Set SphereValue1[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere1[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere1[(Player number of (Owner of (Triggering unit)))] = Quas1
Unit - Add Sphere1[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue1[(Player number of (Owner of (Triggering unit)))] Equal to 100
Then - Actions
Set SphereValue1[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere1[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere1[(Player number of (Owner of (Triggering unit)))] = Quas1
Unit - Add Sphere1[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereCheck[(Player number of (Owner of (Triggering unit)))] Equal to 2
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue2[(Player number of (Owner of (Triggering unit)))] Equal to 0
Then - Actions
Set SphereValue2[(Player number of (Owner of (Triggering unit)))] = 1
Set Sphere2[(Player number of (Owner of (Triggering unit)))] = Quas2
Unit - Add Sphere2[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue2[(Player number of (Owner of (Triggering unit)))] Equal to 10
Then - Actions
Set SphereValue2[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere2[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere2[(Player number of (Owner of (Triggering unit)))] = Quas2
Unit - Add Sphere2[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue2[(Player number of (Owner of (Triggering unit)))] Equal to 100
Then - Actions
Set SphereValue2[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere2[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere2[(Player number of (Owner of (Triggering unit)))] = Quas2
Unit - Add Sphere2[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereCheck[(Player number of (Owner of (Triggering unit)))] Equal to 3
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue3[(Player number of (Owner of (Triggering unit)))] Equal to 0
Then - Actions
Set SphereValue3[(Player number of (Owner of (Triggering unit)))] = 1
Set Sphere3[(Player number of (Owner of (Triggering unit)))] = Quas3
Unit - Add Sphere3[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue3[(Player number of (Owner of (Triggering unit)))] Equal to 10
Then - Actions
Set SphereValue3[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere3[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere3[(Player number of (Owner of (Triggering unit)))] = Quas3
Unit - Add Sphere3[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SphereValue3[(Player number of (Owner of (Triggering unit)))] Equal to 100
Then - Actions
Set SphereValue3[(Player number of (Owner of (Triggering unit)))] = 1
Unit - Remove Sphere3[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set Sphere3[(Player number of (Owner of (Triggering unit)))] = Quas3
Unit - Add Sphere3[(Player number of (Owner of (Triggering unit)))] to (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Else - Actions
Else - Actions
The triggers for Wex and Exort looks the same, just other SphereValues.
Code:
Instance Counting
Events
Conditions
Actions
Player Group - Pick every player in (All players) and do (Actions)
Loop - Actions
Set InvokeInteger[(Player number of (Picked player))] = (SphereValue1[(Player number of (Picked player))] + (SphereValue2[(Player number of (Picked player))] + SphereValue3[(Player number of (Picked player))]))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 1
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 2
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 2
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 3
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 3
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 10
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 11
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 12
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 2
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 20
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 2
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 21
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 2
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 30
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 0
Set WexInstances[(Player number of (Picked player))] = 3
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 100
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 101
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 102
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 2
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 110
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 111
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 120
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 1
Set WexInstances[(Player number of (Picked player))] = 2
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 200
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 2
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 201
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 1
Set ExortInstances[(Player number of (Picked player))] = 2
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 210
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 2
Set WexInstances[(Player number of (Picked player))] = 1
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 300
Then - Actions
Set QuasInstances[(Player number of (Picked player))] = 0
Set ExortInstances[(Player number of (Picked player))] = 3
Set WexInstances[(Player number of (Picked player))] = 0
Else - Actions
Unit - Set level of Wex Attack Speed bonus for Invoker[(Player number of (Picked player))] to (((Level of Wex for Invoker[(Player number of (Picked player))]) x WexInstances[(Player number of (Picked player))]) + 1)
Unit - Set level of Wex Movement Speed Bonus for Invoker[(Player number of (Picked player))] to (((Level of Wex for Invoker[(Player number of (Picked player))]) x WexInstances[(Player number of (Picked player))]) + 1)
Unit - Set level of Exort Bonus Damage for Invoker[(Player number of (Picked player))] to (((Level of Exort for Invoker[(Player number of (Picked player))]) x ExortInstances[(Player number of (Picked player))]) + 1)
Also the triggered HP regen from Quas:
Code:
Quas HP Regen
Events
Time - Every 1.00 seconds of game time
Conditions
Actions
Set QuasHPRegenGroup = (Units in (Playable map area) matching ((((Matching unit) is alive) Equal to True) and (((Unit-type of (Matching unit)) Equal to Invoker) and ((Level of Quas for (Matching unit)) Greater than 0))))
Unit Group - Pick every unit in QuasHPRegenGroup and do (Actions)
Loop - Actions
Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + (0.75 x ((Real((Level of Quas for (Picked unit)))) x (Real(QuasInstances[(Player number of (Owner of (Picked unit)))])))))
Custom script: call DestroyGroup (udg_QuasHPRegenGroup)
A trigger to increase the bonuses when leveling any of the three Elemental-abilities:
Code:
Learning Skills
Events
Unit - A unit Learns a skill
Conditions
Or - Any (Conditions) are true
Conditions
(Learned Hero Skill) Equal to Exort
(Learned Hero Skill) Equal to Quas
(Learned Hero Skill) Equal to Wex
Actions
Set Invoker[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
Trigger - Run Instance Counting <gen> (checking conditions)
Trigger - Run Alternative Spell leveling <gen> (checking conditions)
And finally the Invoke trigger:
Code:
Invoke
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Invoke
Actions
Set Invoker[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
Set InvokeInteger[(Player number of (Owner of (Triggering unit)))] = (SphereValue1[(Player number of (Owner of (Triggering unit)))] + (SphereValue2[(Player number of (Owner of (Triggering unit)))] + SphereValue3[(Player number of (Owner of (Triggering unit)))]))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Invoke for (Triggering unit)) Equal to 1
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeSpell1Check[(Player number of (Owner of (Triggering unit)))] Equal to False
Then - Actions
Unit - Add InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]] to (Triggering unit)
Set InvokeSpell1[(Player number of (Owner of (Triggering unit)))] = InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Set InvokeSpell1Check[(Player number of (Owner of (Triggering unit)))] = True
Else - Actions
Unit - Remove InvokeSpell1[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Unit - Add InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]] to (Triggering unit)
Set InvokeSpell1[(Player number of (Owner of (Triggering unit)))] = InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeSpell1Check[(Player number of (Owner of (Triggering unit)))] Equal to False
Then - Actions
Unit - Add InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]] to (Triggering unit)
Set InvokeSpell1[(Player number of (Owner of (Triggering unit)))] = InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Set InvokeSpell1Check[(Player number of (Owner of (Triggering unit)))] = True
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeSpell2Check[(Player number of (Owner of (Triggering unit)))] Equal to False
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeSpell1[(Player number of (Owner of (Triggering unit)))] Not equal to InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Then - Actions
Set InvokeSpell2[(Player number of (Owner of (Triggering unit)))] = InvokeSpell1[(Player number of (Owner of (Triggering unit)))]
Unit - Add InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]] to (Triggering unit)
Set InvokeSpell1[(Player number of (Owner of (Triggering unit)))] = InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Set InvokeSpell2Check[(Player number of (Owner of (Triggering unit)))] = True
Else - Actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeSpell1[(Player number of (Owner of (Triggering unit)))] Not equal to InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Then - Actions
Unit - Remove InvokeSpell2[(Player number of (Owner of (Triggering unit)))] from (Triggering unit)
Set InvokeSpell2[(Player number of (Owner of (Triggering unit)))] = InvokeSpell1[(Player number of (Owner of (Triggering unit)))]
Unit - Add InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]] to (Triggering unit)
Set InvokeSpell1[(Player number of (Owner of (Triggering unit)))] = InvokeSpells[InvokeInteger[(Player number of (Owner of (Triggering unit)))]]
Else - Actions
Trigger - Run Alternative Spell leveling <gen> (checking conditions)
Invoked Spells:
Ghost Walk
Code:
Ghost Walk
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Ghost Walk [QQW]
Actions
Set GhostWalkCaster[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
Set GhostWalkCasterLoc[(Player number of (Owner of (Triggering unit)))] = (Position of GhostWalkCaster[(Player number of (Owner of (Triggering unit)))])
Unit - Create 1 Dummy Unit for (Owner of GhostWalkCaster[(Player number of (Owner of (Triggering unit)))]) at GhostWalkCasterLoc[(Player number of (Owner of (Triggering unit)))] facing Default building facing degrees
Set GhostWalkDummy[(Player number of (Owner of (Triggering unit)))] = (Last created unit)
Unit - Add Ghost Walk Slow Aura to GhostWalkDummy[(Player number of (Owner of (Triggering unit)))]
Unit - Set level of Ghost Walk Slow Aura for GhostWalkDummy[(Player number of (Owner of (Triggering unit)))] to (Level of Quas for GhostWalkCaster[(Player number of (Owner of (Triggering unit)))])
Custom script: call RemoveLocation (udg_GhostWalkCasterLoc[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))])
Countdown Timer - Start GhostWalkTimer[(Player number of (Owner of (Triggering unit)))] as a Repeating timer that will expire in 0.05 seconds
Code:
Ghost Walk Timer
Events
Time - GhostWalkTimer[1] expires
Time - GhostWalkTimer[2] expires
Time - GhostWalkTimer[3] expires
Time - GhostWalkTimer[4] expires
Time - GhostWalkTimer[5] expires
Time - GhostWalkTimer[6] expires
Time - GhostWalkTimer[7] expires
Time - GhostWalkTimer[8] expires
Time - GhostWalkTimer[9] expires
Time - GhostWalkTimer[10] expires
Time - GhostWalkTimer[11] expires
Time - GhostWalkTimer[12] expires
Conditions
Actions
Player Group - Pick every player in (All players) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(GhostWalkCaster[(Player number of (Picked player))] has buff Ghost Walk ) Equal to True
Then - Actions
Set GhostWalkCasterLoc[(Player number of (Picked player))] = (Position of GhostWalkCaster[(Player number of (Picked player))])
Unit - Move GhostWalkDummy[(Player number of (Picked player))] instantly to GhostWalkCasterLoc[(Player number of (Picked player))]
Custom script: call RemoveLocation (udg_GhostWalkCasterLoc[GetConvertedPlayerId(GetEnumPlayer())])
Else - Actions
Unit - Kill GhostWalkDummy[(Player number of (Picked player))]
Countdown Timer - Pause GhostWalkTimer[(Player number of (Picked player))]
Alacrity:
Code:
Alacrity
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Alacrity (WWW)
Actions
Set AlacrityTarget[(Player number of (Owner of (Triggering unit)))] = (Target unit of ability being cast)
Unit - Add Alacrity Attack Speed bonus to AlacrityTarget[(Player number of (Owner of (Triggering unit)))]
Unit - Set level of Alacrity Attack Speed bonus for AlacrityTarget[(Player number of (Owner of (Triggering unit)))] to (Level of Wex for (Triggering unit))
Countdown Timer - Start AlacrityTimer[(Player number of (Owner of (Triggering unit)))] as a One-shot timer that will expire in 5.00 seconds
Code:
Alacrity Timer
Events
Time - AlacrityTimer[1] expires
Time - AlacrityTimer[2] expires
Time - AlacrityTimer[3] expires
Time - AlacrityTimer[4] expires
Time - AlacrityTimer[5] expires
Time - AlacrityTimer[6] expires
Time - AlacrityTimer[7] expires
Time - AlacrityTimer[8] expires
Time - AlacrityTimer[9] expires
Time - AlacrityTimer[10] expires
Time - AlacrityTimer[11] expires
Time - AlacrityTimer[12] expires
Conditions
Actions
Player Group - Pick every player in (All players) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Remaining time for AlacrityTimer[(Player number of (Picked player))]) Equal to 0.00
Then - Actions
Unit - Remove Alacrity Attack Speed bonus from AlacrityTarget[(Player number of (Picked player))]
Else - Actions
Sun Strike:
Code:
Sun Strike
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Sun Strike [EEE]
Actions
Set SunStrikeCaster[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
Set SunStrikeLoc[(Player number of (Owner of (Triggering unit)))] = (Target point of ability being cast)
Unit - Create 1 Dummy Unit for (Owner of (Triggering unit)) at SunStrikeLoc[(Player number of (Owner of (Triggering unit)))] facing Default building facing degrees
Unit - Add Sun Strike Dummyskill to (Last created unit)
Unit - Order (Last created unit) to Human Blood Mage - Flame Strike SunStrikeLoc[(Player number of (Owner of (Triggering unit)))]
Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
Custom script: call RemoveLocation (udg_SunStrikeLoc[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))])
Code:
Sun Strike Dummyskill
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Sun Strike Dummyskill
Actions
Set SunStrikeLoc[(Player number of (Owner of (Triggering unit)))] = (Target point of ability being cast)
Set SunStrikeGroup[(Player number of (Owner of (Triggering unit)))] = (Units within 200.00 of SunStrikeLoc[(Player number of (Owner of (Triggering unit)))] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggerin
Set SunStrikeDamage[(Player number of (Owner of (Triggering unit)))] = (75.00 + ((62.50 x ((Real((Level of Exort for SunStrikeCaster[(Player number of (Owner of (Triggering unit)))]))) - 1.00)) / (Real((Number of units in SunStrikeGroup[(Player number of (Owner of (Triggering unit)))])))))
Special Effect - Create a special effect at SunStrikeLoc[(Player number of (Owner of (Triggering unit)))] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
Special Effect - Destroy (Last created special effect)
Unit Group - Pick every unit in SunStrikeGroup[(Player number of (Owner of (Triggering unit)))] and do (Actions)
Loop - Actions
Unit - Cause SunStrikeCaster[(Player number of (Owner of (Triggering unit)))] to damage (Picked unit), dealing SunStrikeDamage[(Player number of (Owner of (Triggering unit)))] damage of attack type Spells and damage type Normal
Custom script: call RemoveLocation (udg_SunStrikeLoc[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))])
Custom script: call DestroyGroup (udg_SunStrikeGroup[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))])
And the trigger to set the level of invoked spells that need it: (The use of "Invoke" runs this trigger automatically)
Code:
Alternative Spell leveling
Events
Conditions
Actions
Player Group - Pick every player in (All players) and do (Actions)
Loop - Actions
Set InvokeInteger[(Player number of (Picked player))] = (SphereValue1[(Player number of (Picked player))] + (SphereValue2[(Player number of (Picked player))] + SphereValue3[(Player number of (Picked player))]))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
InvokeInteger[(Player number of (Picked player))] Equal to 12
Then - Actions
Unit - Set level of Ghost Walk [QQW] for Invoker[(Player number of (Picked player))] to (Level of Wex for Invoker[(Player number of (Picked player))])
Else - Actions
Screenshots:
Enjoy.