A spellpack from a map I'm working on. Decided I'd share my resources with the public. It has been updated to make Mag happy. I would redownload if you have any version besides 1.3, as it is the most efficient and most customizable.
Triggers
Hashtable And Configurables
Events
Map initialization
Conditions Actions
Hashtable - Create a hashtable Set hashtable = (Last created hashtable) -------- --------------- -------- -------- --------------- -------- -------- PLEASE READ -------- -------- In order to edit the duration of power of the slow from Chilling Touch, you must edit the ability named Slow in the object editor -------- -------- Values such as cast range, cooldown, manacost and all that can be edited in the object editor -------- -------- If you make the spells go to a higher level you need to extend these arrays up to the maximum level. Otherwise the spell will malfunction -------- -------- --------------- -------- -------- --------------- -------- -------- ARCTIC BLAST -------- -------- --------------- -------- -------- Edit the damage -------- Set chillingblastdamage[1] = 70.00 Set chillingblastdamage[2] = 140.00 Set chillingblastdamage[3] = 210.00 Set chillingblastdamage[4] = 280.00 -------- Edit the AoE per level -------- Set chillingblastaoe[1] = 250.00 Set chillingblastaoe[2] = 250.00 Set chillingblastaoe[3] = 250.00 Set chillingblastaoe[4] = 250.00 -------- Edit the speed -------- Set chillingblastspeed[1] = 29.00 Set chillingblastspeed[2] = 29.00 Set chillingblastspeed[3] = 29.00 Set chillingblastspeed[4] = 29.00 -------- --------------- -------- -------- ICE TOMB -------- -------- --------------- -------- -------- Edit the time it takes the unit to freeze if it doesnt move away from the location -------- Set icetombduration[1] = 3.60 Set icetombduration[2] = 3.60 Set icetombduration[3] = 3.60 Set icetombduration[4] = 3.60 -------- Edit the distance the unit must be in order to escape the ice tomb -------- Set icetombdistance[1] = 600.00 Set icetombdistance[2] = 600.00 Set icetombdistance[3] = 600.00 Set icetombdistance[4] = 600.00 -------- --------------- -------- -------- GLACIAL SURGE -------- -------- --------------- -------- -------- Edit the intelligence multiplier per level. -------- Set glacialsurgeintmultiplier[1] = 2 Set glacialsurgeintmultiplier[2] = 4 Set glacialsurgeintmultiplier[3] = 6 -------- Edit the AoE of the glacial surge -------- Set glacialsurgeaoe[1] = 160.00 Set glacialsurgeaoe[2] = 160.00 Set glacialsurgeaoe[3] = 160.00 -------- Edit the speed of the projectile -------- Set glacialsurgespeed[1] = 69.00 Set glacialsurgespeed[2] = 69.00 Set glacialsurgespeed[3] = 69.00
Chilling Blast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Arctic Blast
Actions
Set caster = (Triggering unit) Set target2 = (Target unit of ability being cast) Set point1 = (Position of target2) Set point2 = (Position of caster) Set angle = (Angle from point2 to point1) Unit - Create 1 Arctic Blast for (Triggering player) at point2 facing angle degrees Set target = (Last created unit) Unit Group - Add target to snowballgroup Custom script: set udg_handle = GetHandleId(udg_target) Hashtable - Save Handle Oftarget2 as 1 of handle in hashtable Hashtable - Save Handle Ofcaster as 2 of handle in hashtable Hashtable - Save angle as 3 of handle in hashtable Custom script: call RemoveLocation(udg_point1) Custom script: call RemoveLocation(udg_point2) Trigger - Turn on Chilling Blast Loop <gen>
Chilling Blast Loop
Events
Time - Every 0.03 seconds of game time
Conditions Actions
Unit Group - Pick every unit in snowballgroup and do (Actions)
Loop - Actions
Set target = (Picked unit) Custom script: set udg_handle = GetHandleId(udg_target) Set point1 = (Position of (Load 1 of handle in hashtable)) Set point2 = (Position of target) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between point1 and point2) Greater than or equal to (chillingblastspeed[(Level of Arctic Blast for caster)] + 1.00)
Then - Actions
Set angle = (Angle from point2 to point1) Set point3 = (point2 offset by chillingblastspeed[(Level of Arctic Blast for caster)] towards angle degrees) Unit - Move target instantly to point3 Custom script: call RemoveLocation(udg_point3)
Else - Actions
Set caster = (Load 2 of handle in hashtable) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Arctic Blast for caster) Greater than 0
Then - Actions
Unit - Add Slow to target Unit - Set level of Slow for target to (Level of Chilling Touch for caster)
Else - Actions
Special Effect - Create a special effect at point1 using Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl Special Effect - Destroy (Last created special effect) Custom script: set bj_wantDestroyGroup = true Unit Group - Pick every unit in (Units within chillingblastaoe[(Level of Arctic Blast for caster)] of point1 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching u and do (Actions)
Loop - Actions
Unit - Cause caster to damage (Picked unit), dealing chillingblastdamage[(Level of Arctic Blast for caster)] damage of attack type Spells and damage type Normal Unit - Order target to Human Sorceress - Slow (Picked unit)
Unit - Kill target Unit Group - Remove target from snowballgroup Hashtable - Clear all child hashtables of child handle in hashtable If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Set caster = (Triggering unit) Set target = (Target unit of ability being cast) Set point1 = (Position of target) Unit - Create 1 Ice Tomb for (Owner of caster) at point1 facing Default building facing degrees Set target2 = (Last created unit) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Arctic Blast for caster) Greater than 0
Then - Actions
Unit - Add Slow to target2 Unit - Set level of Slow for target2 to (Level of Chilling Touch for caster) Unit - Order target2 to Human Sorceress - Slow target
Else - Actions
Set timer = icetombduration[(Level of Ice Tomb for caster)] Special Effect - Create a special effect attached to the overhead of target using Abilities\Spells\Other\Drain\ManaDrainTarget.mdl Set sfx = (Last created special effect) Unit Group - Add target to IceTombGroup Custom script: set udg_handle = GetHandleId(udg_target) Hashtable - Save Handle Ofcaster as 4 of handle in hashtable Hashtable - Save Handle Oftarget2 as 5 of handle in hashtable Hashtable - Save timer as 6 of handle in hashtable Hashtable - Save Handle Ofsfx as 7 of handle in hashtable Trigger - Turn on Ice Tomb Loop <gen>
Ice Tomb Loop
Events
Time - Every 0.03 seconds of game time
Conditions Actions
Unit Group - Pick every unit in IceTombGroup and do (Actions)
Loop - Actions
Set target = (Picked unit) Custom script: set udg_handle = GetHandleId(udg_target) Set timer = (Load 6 of handle from hashtable) Set target2 = (Load 5 of handle in hashtable) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
timer Greater than 0.00
Then - Actions
Hashtable - Save (timer - 0.03) as 6 of handle in hashtable Set point1 = (Position of target) Set point2 = (Position of target2) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between point1 and point2) Greater than icetombdistance[(Level of Ice Tomb for caster)]
Then - Actions
Special Effect - Destroy (Load 7 of handle in hashtable) Unit - Kill target2 Hashtable - Clear all child hashtables of child handle in hashtable Unit Group - Remove target from IceTombGroup If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Set caster = (Load 4 of handle in hashtable) Unit - Add Storm Bolt to target2 Unit - Set level of Storm Bolt for target2 to (Level of Ice Tomb for caster) Unit - Order target2 to Human Mountain King - Storm Bolt target Special Effect - Destroy (Load 7 of handle in hashtable) Unit - Kill target2 Hashtable - Clear all child hashtables of child handle in hashtable Unit Group - Remove target from IceTombGroup If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in IceTombGroup) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Glacial Surge
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Glacial Surge
Actions
Set caster = (Triggering unit) Set point1 = (Target point of ability being cast) Unit - Create 1 Dummy for (Owner of caster) at point1 facing Default building facing degrees Set target = (Last created unit) Unit - Hide caster Unit - Add Invulnerable (Neutral) to caster Unit - Turn collision for caster Off Unit Group - Add caster to GlacialSurgeGroup Special Effect - Create a special effect attached to the chest of caster using Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl Set sfx = (Last created special effect) Custom script: set udg_handle = GetHandleId(udg_caster) Hashtable - Save Handle Oftarget as 8 of handle in hashtable Hashtable - Save Handle Ofsfx as 9 of handle in hashtable Custom script: call RemoveLocation(udg_point1) Trigger - Turn on Glacial Surge Loop <gen>
Glacial Surge Loop
Events
Time - Every 0.03 seconds of game time
Conditions Actions
Unit Group - Pick every unit in GlacialSurgeGroup and do (Actions)
Loop - Actions
Set caster = (Picked unit) Custom script: set udg_handle = GetHandleId(udg_caster) Set target = (Load 8 of handle in hashtable) Set point1 = (Position of caster) Set point2 = (Position of target) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between point2 and point1) Greater than (glacialsurgespeed[(Level of Glacial Surge for caster)] + 1.00)
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Arctic Blast for caster) Greater than 0
Then - Actions
Unit - Add Slow to target2 Unit - Set level of Slow for target2 to (Level of Chilling Touch for caster)
Else - Actions
Set GlacialSurgeTargetGroup = (Load 10 of handle in hashtable) Set point3 = (point1 offset by glacialsurgespeed[(Level of Glacial Surge for caster)] towards (Angle from point1 to point2) degrees) Unit - Move caster instantly to point3 Unit - Create 1 Glacial Surge for (Owner of caster) at point3 facing Default building facing degrees Set target2 = (Last created unit) Unit - Add a 1.00 second Generic expiration timer to target2 Custom script: set bj_wantDestroyGroup = true Unit Group - Pick every unit in (Units within glacialsurgeaoe[(Level of Glacial Surge for caster)] of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to Fa and do (Actions)
Loop - Actions
Unit - Order target2 to Human Sorceress - Slow (Picked unit) Unit Group - Add (Picked unit) to GlacialSurgeTargetGroup Unit - Cause caster to damage (Picked unit), dealing (Real((glacialsurgeintmultiplier[(Level of Glacial Surge for caster)] x (Intelligence of caster (Include bonuses))))) damage of attack type Spells and damage type Normal
Hashtable - Save Handle OfGlacialSurgeTargetGroup as 10 of handle in hashtable Custom script: call RemoveLocation(udg_point3)
Else - Actions
Custom script: set bj_wantDestroyGroup = true If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Arctic Blast for caster) Greater than 0
Then - Actions
Unit - Add Slow to target2 Unit - Set level of Slow for target2 to (Level of Chilling Touch for caster)
Else - Actions
Unit Group - Pick every unit in (Units within 160.00 of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to False) and (((Matching unit) belongs to an enemy and do (Actions)
Loop - Actions
Unit - Cause caster to damage (Picked unit), dealing (Real((glacialsurgeintmultiplier[(Level of Glacial Surge for caster)] x (Intelligence of caster (Include bonuses))))) damage of attack type Spells and damage type Normal Unit - Order target2 to Human Sorceress - Slow (Picked unit) Unit Group - Add (Picked unit) to GlacialSurgeTargetGroup
Unit - Unhide caster Unit - Remove Invulnerable (Neutral) from caster Unit - Turn collision for caster On Selection - Select caster for (Owner of caster) Unit - Kill target Special Effect - Destroy (Load 9 of handle in hashtable) Unit Group - Remove caster from GlacialSurgeGroup Hashtable - Clear all child hashtables of child handle in hashtable If (All Conditions are True) then do (Then Actions) else do (Else Actions)
This is actually a really nice spellpack.
I love how all the spells are dependent on each other, but this is going to need more configuration.
A user needs to be able to change the abilities used inside the spell triggers by modifying just one variable in a configuration trigger.
He should also be able to modify damage and duration.
Reserved post. Not like I ever use it but still it's reserved.
Please comment, rate, all that jazz. If it isn't clear enough I can add documentation, although anyone who knows their way around triggers at all should be able to edit values such as duration and damage.
Instead of moderating this, I'll do things the easy way <:
Trigger
Set angle = (Angle from point2 to point1) Unit - Create 1 Arctic Blast for (Owner of caster) at point2 facing (Angle from point2 to point1) degrees
You can use 'angle' when you create the unit.
You can replace (Owner of caster) with (Triggering player).
You shouldn't select a unit without clearing the selection for a certain player because that actually adds the unit to the currently selected ones. It would be quite strange.
There should be configuration triggers for easy configuration.
(To configure durations, special effects, damage, abilities so that you don't have to look through all the triggers and change the value when you import the spell, like "Chilling Touch", etc..)
Also, you can totally optimize this:
Trigger
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of Arctic Blast for caster) Greater than 0
Then - Actions
Unit - Add Slow to target2 Unit - Set level of Slow for target2 to (Level of Chilling Touch for caster) Custom script: set bj_wantDestroyGroup = true Unit Group - Pick every unit in (Units within 160.00 of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to False) and (((Matching unit) belongs to an enemy and do (Actions)
Loop - Actions
Unit - Order target2 to Human Sorceress - Slow (Picked unit)
Else - Actions
Custom script: set bj_wantDestroyGroup = true Unit Group - Pick every unit in (Units within 160.00 of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to False) and (((Matching unit) belongs to an enemy and do (Actions)
Loop - Actions
Unit Group - Add (Picked unit) to GlacialSurgeTargetGroup Unit - Cause caster to damage (Picked unit), dealing (Real(((Level of Glacial Surge for caster) x ((Intelligence of caster (Include bonuses)) x 2)))) damage of attack type Spells and damage type Normal
You can set a boolean inside the if block to true, and in the enumeration that's outside the block at the end,
you would check if this boolean is true, and if it is, then do this: Unit - Order target2 to Human Sorceress - Slow (Picked unit)
I will implement all suggested changes except for the selection event. If you are playing a game in which you are controlling more than one hero at a time, and you use this skill then suddenly deselect everything but this hero, it would be quite frustrating.
I will make configurable values for the things that can be changed within the triggers. The duration of the slow is totally OE dependant so I'm not going to waste time with that.
I'm literally uploading the updates as we speak.
EDIT: Hopefully everything will be in approvable order. Anyone who has downloaded for use should redownload, it is now more efficient and more customizable.
I know, but I can't keep it set to "Pending" because then it would still show up in the "Pending Spells" list, and this way, when you update it, I would directly know because the state would be reset to "Pending".
edit
Okay, this is in an approvable state, but there's just one thing I noticed, you're adding the Slow ability to the dummy and setting the level INSIDE the enumeration, so it's actually being added and set multiple times =o
You could move that code out of the enum code.
And one other nice configurable would be AoE ^.^
As for the Slow, no problem, you would need an entire movement system to pull that one off :P
I know, but I can't keep it set to "Pending" because then it would still show up in the "Pending Spells" list, and this way, when you update it, I would directly know because the state would be reset to "Pending".
edit
Okay, this is in an approvable state, but there's just one thing I noticed, you're adding the Slow ability to the dummy and setting the level INSIDE the enumeration, so it's actually being added and set multiple times =o
You could move that code out of the enum code.
And one other nice configurable would be AoE ^.^
As for the Slow, no problem, you would need an entire movement system to pull that one off :P
Changes have been implemented. It won't repeatedly set the level and add the ability. Also AoE value has been added for the two spells with AoE, and I have slightly updated the documentation.
I just noticed that Arctic Blast/Chilling Blast doesn't exactly work correctly o-o
It deals damage around the frost giant rather than the ball and it only damages one unit.
I just noticed that Arctic Blast/Chilling Blast doesn't exactly work correctly o-o
It deals damage around the frost giant rather than the ball and it only damages one unit.
Also, the speed should be configurable too :p
You probably want to kick me in the face now
After looking over my triggers I saw the problem.
Arctic blast was using the aoe of glacial surge. I was setting the aoe for it twice in the load trigger. Additionally it was using the aoe of glacial surge in the actual damage trigger itself. So when glacial surge wasn't skilled, it was picking enemies within 0 area of effect.
It's a five minute fix. Plus adding a configurable for the range should not take long. I'll update this very soon.
EDIT: Lol whoops I forgot to change the name. It should say v1.3
Hi.I just want to use glacial surge in my map.I tried,but it didnt work.I changed the trigger a little bit.These are the triggers :
Glacial Surge
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Glacial Surge
Actions
Set caster = (Triggering unit) Set point1 = (Target point of ability being cast) Unit - Create 1 Dummy for (Owner of caster) at point1 facing Default building facing degrees Set target = (Last created unit) Unit - Hide caster Unit - Add Invulnerable (Neutral) to caster Unit - Turn collision for caster Off Unit Group - Add caster to GlacialSurgeGroup Special Effect - Create a special effect attached to the chest of caster using Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl Set sfx = (Last created special effect) Custom script: set udg_handle = GetHandleId(udg_caster) Hashtable - Save Handle Oftarget as 8 of handle in hashtable Hashtable - Save Handle Ofsfx as 9 of handle in hashtable Custom script: call RemoveLocation(udg_point1) Trigger - Turn on Glacial Surge Loop <gen>
Glacial Surge Loop
Events
Time - Every 0.03 seconds of game time
Conditions Actions
Unit Group - Pick every unit in GlacialSurgeGroup and do (Actions)
Loop - Actions
Set caster = (Picked unit) Custom script: set udg_handle = GetHandleId(udg_caster) Set target = (Load 8 of handle in hashtable) Set point1 = (Position of caster) Set point2 = (Position of target) If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between point2 and point1) Greater than (glacialsurgespeed[(Level of Glacial Surge for caster)] + 1.00)
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions Then - Actions
Do nothing
Else - Actions
Set GlacialSurgeTargetGroup = (Load 10 of handle in hashtable) Set point3 = (point1 offset by glacialsurgespeed[(Level of Glacial Surge for caster)] towards (Angle from point1 to point2) degrees) Unit - Move caster instantly to point3 Unit - Create 1 Glacial Surge for (Owner of caster) at point3 facing Default building facing degrees Set target2 = (Last created unit) Unit - Add a 1.00 second Generic expiration timer to target2 Custom script: set bj_wantDestroyGroup = true Unit Group - Pick every unit in (Units within glacialsurgeaoe[(Level of Glacial Surge for caster)] of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to Fa and do (Actions)
Loop - Actions
Unit - Order target2 to Human Sorceress - Slow (Picked unit) Unit Group - Add (Picked unit) to GlacialSurgeTargetGroup Unit - Cause caster to damage (Picked unit), dealing (Real((glacialsurgeintmultiplier[(Level of Glacial Surge for caster)] x (Strength of caster (Include bonuses))))) damage of attack type Spells and damage type Normal
Hashtable - Save Handle OfGlacialSurgeTargetGroup as 10 of handle in hashtable Custom script: call RemoveLocation(udg_point3)
Else - Actions
Custom script: set bj_wantDestroyGroup = true If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions Then - Actions
Do nothing
Else - Actions
Unit Group - Pick every unit in (Units within 160.00 of point3 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is in GlacialSurgeTargetGroup) Equal to False) and (((Matching unit) belongs to an enemy and do (Actions)
Loop - Actions
Unit - Cause caster to damage (Picked unit), dealing (Real((glacialsurgeintmultiplier[(Level of Glacial Surge for caster)] x (Strength of caster (Include bonuses))))) damage of attack type Spells and damage type Normal Unit - Order target2 to Human Sorceress - Slow (Picked unit) Unit Group - Add (Picked unit) to GlacialSurgeTargetGroup
Unit - Unhide caster Unit - Remove Invulnerable (Neutral) from caster Unit - Turn collision for caster On Selection - Select caster for (Owner of caster) Unit - Kill target Special Effect - Destroy (Load 9 of handle in hashtable) Unit Group - Remove caster from GlacialSurgeGroup Hashtable - Clear all child hashtables of child handle in hashtable If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Please specifically describe exactly what went wrong. Is the movement still working? Is it not stopping where its supposed to? Is it not hurting enemies?
Since you changed the information in the if/then/else statement, simply delete it altogether. Don't just leave an empty if/then/else with a do nothing in it. NEVER use do nothing.
My guess is that you didn't import the hashtable. The trigger with the hashtable in it also has to be in your map for this spell to work. I'd recommend uploading your map in either the triggers and script or general mapping sections and asking for help to customize it how you want.
Wrong. Make sure you copied the object editor ability into your game. It is dependant on the OE ability so without it, it won't work.
It doesn't even work in the map uploaded by you, without changing anything. =/
Every ability adds Chilling Touch to the enemy, except Glacial Surge.
I don't get it.