Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
Summons Melting phoenixes that will loop around a target AoE, while looping, the Phoenixes deal DPS to enemy units within 225 AoE. After Looping, they will stop at 500 height and at the center of the AoE where they will melt deffinetly and burst into flames damaging and knockbacking all enemy units in the AoE.
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
MP_DestroyTree Equal to True
Then - Actions
Destructible - Pick every destructible within MP_DPS_AoE[x] of loc2 and do (Actions)
Loop - Actions
Unit - Order HarvestDummy to Harvest (Picked destructible)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of HarvestDummy) Equal to (Order(harvest))
Then - Actions
Destructible - Kill (Picked destructible)
Else - Actions
Unit - Order HarvestDummy to Stop
Else - Actions
Set UGroup = (Units within MP_DPS_AoE[x] of loc2 matching ((((((Matching unit) is Mechanical) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of Unit)) Equal to True)) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) is Magic Immun
Unit Group - Pick every unit in UGroup and do (Actions)
Loop - Actions
Set Unit1 = (Picked unit)
Unit - Cause Unit to damage Unit1, dealing (MP_DPS[x] x 0.03) damage of attack type Spells and damage type MP_DT
Special Effect - Create a special effect attached to the origin of Unit1 using MP_L_Fx
Special Effect - Destroy (Last created special effect)
Custom script: call DestroyGroup(udg_UGroup)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
y2 Less than or equal to 0.00
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Load 7 of Key from MP_HA) Equal to True
Then - Actions
Unit - Create 1 MP_PhoenixFx for (Owner of Unit) at loc2 facing Default building facing degrees
Set Unit1 = (Last created unit)
Set y3 = (MP_AoE[x] / 1.70)
Animation - Change Unit1's size to (y3%, 0.00%, 0.00%) of its original size
Set UGroup = (Units within MP_AoE[x] of loc2 matching ((((((Matching unit) is A structure) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of Unit)) Equal to True)) and (((Matching unit) is alive) Equal to True)) and (((Matching unit) is Magic Immune)
Unit Group - Pick every unit in UGroup and do (Unit - Cause Unit1 to damage (Picked unit), dealing MP_Damage[x] damage of attack type Spells and damage type MP_DT)
Custom script: call DestroyGroup(udg_UGroup)
Unit - Kill Unit1
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
MP_Knockback Equal to True
Then - Actions
Set UGroup = (Units within MP_AoE[x] of loc2 matching ((((((Matching unit) is A structure) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of Unit)) Equal to True)) and (((Matching unit) is alive) Equal to True)) and ((((Matching unit) is Magic Immune)
Unit Group - Add all units of UGroup to MPKB_Group
Unit Group - Pick every unit in UGroup and do (Actions)
Loop - Actions
Set Unit1 = (Picked unit)
Set loc3 = (Position of Unit1)
Unit - Make Unit1 face loc over 0.00 seconds
Custom script: set udg_Key_1 = GetHandleId(udg_Unit1)
Hashtable - Save (Angle from loc2 to loc3) as 0 of Key_1 in MP_HA
Hashtable - Save MP_KB_Range[x] as 1 of Key_1 in MP_HA
Hashtable - Save MP_KBSpeed[x] as 2 of Key_1 in MP_HA
Custom script: call RemoveLocation(udg_loc3)
Else - Actions
Else - Actions
Hashtable - Clear all child hashtables of child Key in MP_HA
Unit Group - Remove Unit from MP_Group
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(MP_Group is empty) Equal to True
(MPKB_Group is empty) Equal to True
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Custom script: call RemoveLocation(udg_loc)
Custom script: call RemoveLocation(udg_loc1)
Custom script: call RemoveLocation(udg_loc2)
Else - Actions
-------- Knockback Loop --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(MPKB_Group is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in MPKB_Group and do (Actions)
Loop - Actions
Set Unit = (Picked unit)
Custom script: set udg_Key = GetHandleId(udg_Unit)
Set loc = (Position of Unit)
Set loc1 = (loc offset by ((Load 2 of Key from MP_HA) x 0.03) towards (Load 0 of Key from MP_HA) degrees)
Set y = (Angle from loc1 to loc)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain pathing at loc1 of type Walkability is off) Equal to False
Special Effect - Create a special effect at loc1 using MP_KB_Fx
Special Effect - Destroy (Last created special effect)
Set y2 = (Load 1 of Key from MP_HA)
Set y2 = (y2 - ((Load 2 of Key from MP_HA) x 0.03))
Hashtable - Save y2 as 1 of Key in MP_HA
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
y2 Less than or equal to 0.00
Then - Actions
Unit Group - Remove Unit from MPKB_Group
Hashtable - Clear all child hashtables of child Key in MP_HA
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(MP_Group is empty) Equal to True
(MPKB_Group is empty) Equal to True
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Custom script: call RemoveLocation(udg_loc)
Custom script: call RemoveLocation(udg_loc1)
Else - Actions
V. 1.0 Uploaded on hive V. 1.1
Required changes made
DPS increased from 35/60/85 to 50/100/150
Tree Destruction reworked, now destroys trees while looping instead of when spell ends
Added Doom Guard for better testing
V. 1.2
Fixed some issues
V. 1.3
Fixed some wanted things
Now the phoenix is 35% transparent
Added some new things like -MP command to see the map preview
V. 1.4
Added a customizable knockback range
Fused Hash Create Trigger and Damage trigger in the Loop trigger
V. 1.5
Minor Trigger Changes
V. 1.6
Made it Configurable to destroy trees, yes or no
Changed the Number of Loops variable from an integer variable to a real variable making it possible for the phoenix to loop half the circle for example
Made it configurable to knockback or no
V. 2.0 (Final Version)
Added Variables to all of the Spells and Unit-Types to prevent users from having problems in the loop and cast triggers, noticeably wrong unit-type in the loop and cast and wrong Fx Spell for the looping Phoenix
New Ability-based
This is the Final Version btw, it can not be better than this (yh, I lied xD)
V. 3.0
Name Changed to Melting Phoenixes
Now you can make more than one phoenix loop in the AoE
Now Phoenixes are able to pass through the map border (no possible in last versions)
Melting of phoenixes no longer stuns
Knocback is more smooth
Knockback now doesn't affect the unit's order
Removed the Stun+damage ability (war stomp)
Added a variable for damage instead of the ability based damage
Why are you using cameras to make your screenshots? There's that Print Screen button in your keyboard you know.
Anyway, Spell looks cool. Though you're using a lot of triggers for just a single spell and I'm too lazy to check out all of them so I won't rate it yet.
EDIT: you might want to put these lines into another map init. just sayin'
Why are you using cameras to make your screenshots? There's that Print Screen button in your keyboard you know.
Anyway, Spell looks cool. Though you're using a lot of triggers for just a single spell and I'm too lazy to check out all of them so I won't rate it yet.
u really need to apply more time to efficiency. this is probably the 10th time i have told u. anything u use twice or more store into a variable and use the variable. ex: picked unit and key picked unit. store them.
Hashtable - Save y2 as 1 of (Key (Picked unit)) in MP_HA
Hmmmm.
edit
Also, you can move Unit - Order HarvestDummy to Stop outside of the Then/Else blocks and put it once under the If block since you're calling it in both blocks in either case.
UPDATED AGAIN, do not see triggers on hive, see in map, will correct that tomorrow with better screenshots
EDIT:
I think it would be cleaner to have the Damage Trigger just iterate over the units in the group. The trigger running it would have to clean the group on its own. In programming, it's best to make it so that every object cleans up after itself!
Yeah, a better screenshot would be a valid change to this spell resource.
I'd also recommend combining all the extra triggers into the loop trigger to make the spell run faster because executing and evaluating triggers a lot is computationally expensive :/
Okay, so, to wrap it up, all I want from you right now:
- Update the actual in-game screenshot of this spell that shows up in the spells section
- Change the scaling to use (y3, 0, 0) instead of (y3, y3, y3)
- Combine the Hash Save and Damage triggers into the loop. Running a trigger is quite expensive as an operation.
- Make an Order/string/integer or whatever variable and set it to (Tauren Chieftain - War Stomp) on map init in the configuration trigger so people can change it without having to go through your code.
@screenshots (DONE)
@scale (DONE)
@combination, you want the spell to be 100% efficient, you will have to make 2 other trigfer for the damage and hash save (you can not pick unit groups in the same time) i merged the loop trigger and the knock ack loop trigger thaught
@order string, what is the usefullness of that, i set a variable ability to the warstomp ability, and another one for the main spell, so only if the other users want to change the warstomp, there is no specific need to make a whole story about the order string since it will stay the same
(All those changes are in the current version of the spell)
you want the spell to be 100% efficient, you will have to make 2 other trigfer for the damage and hash save (you can not pick unit groups in the same time)
The 2 other triggers just make it slower because what's happening under the hood is the same as what would happen if you merged the damage/hash save triggers into the loop trigger + this extra heavy code twice:
JASS:
if TriggerEvaluate(trig) then
call TriggerExecute(trig)
endif
TriggerEvaluate followed by TriggerExecute 66 times per minute is really a speed killer
edit
Oh, and one other point: In Warcraft III GUI/JASS, no two things happen at once. Everything is procedural, sequential and synchronous.
Just to say, if i pick a group, while i am already picking another group, if i use (Picked Unit) which unit will refer the picked unit, to the first group or second, ex;
trigger
Unit Group - pick every units in Ugroup 1 do actions
Unit Group - pick every units in Ugroup 2 do actions
Set Unit = Picked Unit
In this case, picked unit will refer to to which group, i think it will go to the first
Note: i am out of reach from my laptop now, so can't test it now
You are mistaken, the part you are referring to is the knockback part, so it has nothing related to the first one, there is a comment that clears where the knockback system starts:
Spell Updated, to V. 2.0 which is the Final Version (Yh, right... i lied xD)
This update has the feature to prevent users to get Bugs noticed like wrong unit-type for the creation in the loop trigger
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.