• 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!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Wave of Souls Version: Secret 2

First of all thx to maker for teaching me how to detect some blockers(trees, pathing blockers, pathing terrain etc).
This spell is created for my project dungeon of the chillling lord, but I uploaded it here so u can see is it coded good. I is channeling spell. I think it will be very useful for u for any kind of pvp or boss fight maps so enjoy it.

Keywords:
soul, spirit, wavechilling, ice, frozen, hammerfist, aoe, cluster rockets, lich, dark, unhoy
Contents

Just another Warcraft III map (Map)

Reviews
Wave of Souls | Reviewed by Maker | 14th Apr 2013 APPROVED The spell is MUI The spell looks nice [tr] Null the point variables after removing them The caster should deal the damage Add importing instructions You...

Moderator

M

Moderator


Wave of Souls | Reviewed by Maker | 14th Apr 2013
APPROVED


126248-albums6177-picture66521.png


  • The spell is MUI
  • The spell looks nice
126248-albums6177-picture66523.png


  • Null the point variables after removing them
  • The caster should deal the damage
  • Add importing instructions
  • You could look into using only one dummy unit type
    and creating only one dummy caster for unit group pick
  • Use active icon
[tr]
 
Level 16
Joined
Jul 31, 2012
Messages
2,217
Would like. XD It looks like to I will have to explain this every time when I post spells. I AM ON CELL-PHONE I CANNOT POST THEM. IF SOMEONE CAN POST THEM IT WOULD BE GREAT

Here are the Triggers for you
  • Wave of Souls Start
    • Events
      • Unit - A unit Begins channeling an ability
    • Conditions
      • (Ability being cast) Equal to Wave of Souls
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • WoS_Times Equal to 0
        • Then - Actions
          • Trigger - Turn on Wave of Souls Loop <gen>
        • Else - Actions
      • Set WoS_Skip = (WoS_Skip + 1)
      • Set WoS_Times = (WoS_Times + 1)
      • Set WoS_Caster[WoS_Times] = (Triggering unit)
      • Set WoS_SpellLvl[WoS_Times] = (Level of Wave of Souls for WoS_Caster[WoS_Times])
      • Set WoS_Point1 = (Position of WoS_Caster[WoS_Times])
      • Set WoS_Point2 = (Target point of ability being cast)
      • Set WoS_Off[WoS_Times] = False
      • Set WoS_Angle[WoS_Times] = (Angle from WoS_Point1 to WoS_Point2)
      • Set WoS_Loop[WoS_Times] = 4
      • Custom script: call RemoveLocation(udg_WoS_Point1)
      • Custom script: call RemoveLocation(udg_WoS_Point2)
  • Wave of Souls Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer WoS) from 1 to WoS_Times, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • WoS_Off[WoS] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current order of WoS_Caster[WoS]) Not equal to (Order(flamestrike))
                • Then - Actions
                  • Set WoS_Skip = (WoS_Skip - 1)
                  • Set WoS_Off[WoS] = True
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS_Skip Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                      • Set WoS_Times = 0
                    • Else - Actions
                • Else - Actions
                  • Set WoS_Loop[WoS] = (WoS_Loop[WoS] + 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS_Loop[WoS] Equal to 5
                    • Then - Actions
                      • Set WoS_Loop[WoS] = 0
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • WoS2_Times Equal to 0
                        • Then - Actions
                          • Trigger - Turn on Wave of Souls Loop2 <gen>
                        • Else - Actions
                      • Set WoS2_Times = (WoS2_Times + 1)
                      • Set WoS2_Skip = (WoS2_Skip + 1)
                      • Set WoS2_Off[WoS2_Times] = False
                      • Set WoS2_Distance[WoS2_Times] = (Random real number between 350.00 and 550.00)
                      • Set WoS_Point1 = (Position of WoS_Caster[WoS])
                      • Unit - Create 1 WoS Dummy for (Owner of WoS_Caster[WoS]) at WoS_Point1 facing (WoS_Angle[WoS] + (Random real number between -35.00 and 35.00)) degrees
                      • Set WoS_Dummy[WoS2_Times] = (Last created unit)
                      • Set WoS2_SpellLvl[WoS2_Times] = WoS_SpellLvl[WoS]
                      • Custom script: call RemoveLocation(udg_WoS_Point1)
                    • Else - Actions
            • Else - Actions
  • Wave of Souls Loop2
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer WoS) from 1 to WoS2_Times, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • WoS2_Off[WoS] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • WoS2_Distance[WoS] Less than or equal to 0.00
                • Then - Actions
                  • Unit - Kill WoS_Dummy[WoS]
                  • Set WoS_Skip = (WoS2_Skip - 1)
                  • Set WoS2_Off[WoS] = True
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS2_Skip Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                      • Set WoS2_Times = 0
                    • Else - Actions
                • Else - Actions
                  • Set WoS_Point1 = (Position of WoS_Dummy[WoS])
                  • Set WoS_Point2 = (WoS_Point1 offset by 10.00 towards (Facing of WoS_Dummy[WoS]) degrees)
                  • Item - Create Mask of Death at WoS_Point2
                  • Set TempPoint = (Position of (Last created item))
                  • Item - Remove (Last created item)
                  • Custom script: set bj_wantDestroyGroup=true
                  • Unit Group - Pick every unit in (Units within 50.00 of WoS_Point2 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of WoS_Dummy[WoS])) Equal to True) and (((Matching unit) is Magic Immune) Not equal to True)))) and do (Actions)
                    • Loop - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Number of units in (Last created unit group)) Greater than 0
                        • Then - Actions
                          • Set WoS2_Distance[WoS] = 0.00
                          • Unit - Create 1 WoS Dummy Caster for (Owner of WoS_Dummy[WoS]) at WoS_Point2 facing Default building facing degrees
                          • Set DummyCaster = (Last created unit)
                          • Unit - Set level of Wave of Souls for DummyCaster to WoS2_SpellLvl[WoS]
                          • Unit - Order DummyCaster to Undead Lich - Frost Nova (Picked unit)
                          • Unit - Add a 0.20 second Generic expiration timer to DummyCaster
                        • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between WoS_Point2 and TempPoint) Greater than 0.50
                    • Then - Actions
                      • Set WoS2_Distance[WoS] = 0.00
                    • Else - Actions
                      • Set WoS2_Distance[WoS] = (WoS2_Distance[WoS] - 10.00)
                      • Custom script: set udg_TempX = GetLocationX(udg_WoS_Point2)
                      • Custom script: set udg_TempY = GetLocationY(udg_WoS_Point2)
                      • Custom script: call SetUnitX(udg_WoS_Dummy[udg_WoS], udg_TempX)
                      • Custom script: call SetUnitY(udg_WoS_Dummy[udg_WoS], udg_TempY)
                  • Custom script: call RemoveLocation(udg_TempPoint)
                  • Custom script: call RemoveLocation(udg_WoS_Point1)
                  • Custom script: call RemoveLocation(udg_WoS_Point2)
            • Else - Actions
Nice Spell btw and how can you upload a spell on your cell phone :ogre_rage: why don't you post them right away?????
 
Here are the Triggers for you
  • Wave of Souls Start
    • Events
      • Unit - A unit Begins channeling an ability
    • Conditions
      • (Ability being cast) Equal to Wave of Souls
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • WoS_Times Equal to 0
        • Then - Actions
          • Trigger - Turn on Wave of Souls Loop <gen>
        • Else - Actions
      • Set WoS_Skip = (WoS_Skip + 1)
      • Set WoS_Times = (WoS_Times + 1)
      • Set WoS_Caster[WoS_Times] = (Triggering unit)
      • Set WoS_SpellLvl[WoS_Times] = (Level of Wave of Souls for WoS_Caster[WoS_Times])
      • Set WoS_Point1 = (Position of WoS_Caster[WoS_Times])
      • Set WoS_Point2 = (Target point of ability being cast)
      • Set WoS_Off[WoS_Times] = False
      • Set WoS_Angle[WoS_Times] = (Angle from WoS_Point1 to WoS_Point2)
      • Set WoS_Loop[WoS_Times] = 4
      • Custom script: call RemoveLocation(udg_WoS_Point1)
      • Custom script: call RemoveLocation(udg_WoS_Point2)
  • Wave of Souls Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer WoS) from 1 to WoS_Times, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • WoS_Off[WoS] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current order of WoS_Caster[WoS]) Not equal to (Order(flamestrike))
                • Then - Actions
                  • Set WoS_Skip = (WoS_Skip - 1)
                  • Set WoS_Off[WoS] = True
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS_Skip Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                      • Set WoS_Times = 0
                    • Else - Actions
                • Else - Actions
                  • Set WoS_Loop[WoS] = (WoS_Loop[WoS] + 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS_Loop[WoS] Equal to 5
                    • Then - Actions
                      • Set WoS_Loop[WoS] = 0
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • WoS2_Times Equal to 0
                        • Then - Actions
                          • Trigger - Turn on Wave of Souls Loop2 <gen>
                        • Else - Actions
                      • Set WoS2_Times = (WoS2_Times + 1)
                      • Set WoS2_Skip = (WoS2_Skip + 1)
                      • Set WoS2_Off[WoS2_Times] = False
                      • Set WoS2_Distance[WoS2_Times] = (Random real number between 350.00 and 550.00)
                      • Set WoS_Point1 = (Position of WoS_Caster[WoS])
                      • Unit - Create 1 WoS Dummy for (Owner of WoS_Caster[WoS]) at WoS_Point1 facing (WoS_Angle[WoS] + (Random real number between -35.00 and 35.00)) degrees
                      • Set WoS_Dummy[WoS2_Times] = (Last created unit)
                      • Set WoS2_SpellLvl[WoS2_Times] = WoS_SpellLvl[WoS]
                      • Custom script: call RemoveLocation(udg_WoS_Point1)
                    • Else - Actions
            • Else - Actions
  • Wave of Souls Loop2
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer WoS) from 1 to WoS2_Times, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • WoS2_Off[WoS] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • WoS2_Distance[WoS] Less than or equal to 0.00
                • Then - Actions
                  • Unit - Kill WoS_Dummy[WoS]
                  • Set WoS_Skip = (WoS2_Skip - 1)
                  • Set WoS2_Off[WoS] = True
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • WoS2_Skip Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                      • Set WoS2_Times = 0
                    • Else - Actions
                • Else - Actions
                  • Set WoS_Point1 = (Position of WoS_Dummy[WoS])
                  • Set WoS_Point2 = (WoS_Point1 offset by 10.00 towards (Facing of WoS_Dummy[WoS]) degrees)
                  • Item - Create Mask of Death at WoS_Point2
                  • Set TempPoint = (Position of (Last created item))
                  • Item - Remove (Last created item)
                  • Custom script: set bj_wantDestroyGroup=true
                  • Unit Group - Pick every unit in (Units within 50.00 of WoS_Point2 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of WoS_Dummy[WoS])) Equal to True) and (((Matching unit) is Magic Immune) Not equal to True)))) and do (Actions)
                    • Loop - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Number of units in (Last created unit group)) Greater than 0
                        • Then - Actions
                          • Set WoS2_Distance[WoS] = 0.00
                          • Unit - Create 1 WoS Dummy Caster for (Owner of WoS_Dummy[WoS]) at WoS_Point2 facing Default building facing degrees
                          • Set DummyCaster = (Last created unit)
                          • Unit - Set level of Wave of Souls for DummyCaster to WoS2_SpellLvl[WoS]
                          • Unit - Order DummyCaster to Undead Lich - Frost Nova (Picked unit)
                          • Unit - Add a 0.20 second Generic expiration timer to DummyCaster
                        • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between WoS_Point2 and TempPoint) Greater than 0.50
                    • Then - Actions
                      • Set WoS2_Distance[WoS] = 0.00
                    • Else - Actions
                      • Set WoS2_Distance[WoS] = (WoS2_Distance[WoS] - 10.00)
                      • Custom script: set udg_TempX = GetLocationX(udg_WoS_Point2)
                      • Custom script: set udg_TempY = GetLocationY(udg_WoS_Point2)
                      • Custom script: call SetUnitX(udg_WoS_Dummy[udg_WoS], udg_TempX)
                      • Custom script: call SetUnitY(udg_WoS_Dummy[udg_WoS], udg_TempY)
                  • Custom script: call RemoveLocation(udg_TempPoint)
                  • Custom script: call RemoveLocation(udg_WoS_Point1)
                  • Custom script: call RemoveLocation(udg_WoS_Point2)
            • Else - Actions
Nice Spell btw and how can you upload a spell on your cell phone :ogre_rage: why don't you post them right away?????
mate long and boring story. I dont have net on pc and I steal wireless xD
 
Review

Before submitting Spells/Systems, please make sure to read the updated rules :http://www.hiveworkshop.com/forums/submissions-414/spell-submission-rules-230362/

1) You need a configuration trigger

2) Move all of the unit group conditions inside it, so that it will be readable.

3) You don't need two triggers for the loops,merge the two of them.

4) Add the following to your configuration trigger:
- Set WoS2_Distance[WoS2_Times] = (Random real number between 350.00 and 550.00)
the values 350 and 550

- (Units within 50.00 of WoS_Point2
value 50

- Set WoS2_Distance[WoS] = (WoS2_Distance[WoS] - 10.00)
value 10

-(Distance between WoS_Point2 and TempPoint) Greater than 0.50
value 0.5

- WoS_Loop[WoS] Equal to 5
value 5

- (WoS_Point1 offset by 10.00 towards (Facing of WoS_Dummy[WoS]) degrees)
value 10

-(WoS_Angle[WoS] + (Random real number between -35.00 and 35.00)) degrees
value -35 and 35

5)You don't need location offset to move the unit, use this method:
JASS:
call SetUnitX(myUnit, GetUnitX(myUnit) + speed * Cos(angle * bj_DEGTORAD))
call SetUnitY(myUnit, GetUnitY(myUnit) + speed * Sin(angle * bj_DEGTORAD))
Note : If the unit's default move type is flying, this won't work,so make the movetype foot.
Then to make it flying,use this :
JASS:
if UnitAddAbility(myUnit, 'Amrf') and UnitRemoveAbility(myUnit, 'Amrf') then
endif
7)TempX,TempY,TempPoint and other variables that doesn't have prefixes must have prefixes

8)Use dummy.mdx for much easier dummy model configuration.
 
Level 30
Joined
Nov 29, 2012
Messages
6,637
Downloaded and tested. It is really a cool spell and fits for BOSS! Im not quite or you could say I do not know how to review triggers because I am also weak at this but the trigger looks neat and everything is followed in the trigger. Nice job, 5/5 and a +2 REP!
 
Level 4
Joined
Dec 3, 2014
Messages
64
ok i like the spell in YOUR MAP. If i copy it into my maps (i need only one but i tried multiple to get sure). after i past in the triggers and save i get the error massage: in Loop 2 the code lines :238; 239; 240; 241 are broken or not working or something.
 
Have you read the "import file" trigger-readme in the map?

I think you might have forgotten this point:
3)Open you map and past all things inside(triggers, units, spells). You will maybe have to create next variables: TempX and TempY (put them to real). Configure condition, for spell, also maybe units get messed up so also fix this actions Unit - Create 1 etc to it fits to this trigger.
 
Top