1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still havn't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. The Lich King demands your service! We've reached the 19th edition of the Icon Contest. Come along and make some chilling servants for the one true king.
    Dismiss Notice
  5. The 4th SFX Contest has started. Be sure to participate and have a fun factor in it.
    Dismiss Notice
  6. The poll for the 21st Terraining Contest is LIVE. Be sure to check out the entries and vote for one.
    Dismiss Notice
  7. The results are out! Check them out.
    Dismiss Notice
  8. Don’t forget to sign up for the Hive Cup. There’s a 555 EUR prize pool. Sign up now!
    Dismiss Notice
  9. The Hive Workshop Cup contest results have been announced! See the maps that'll be featured in the Hive Workshop Cup tournament!
    Dismiss Notice
  10. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Trigger Viewer

Sweeping Beam.w3x
Variables
Sweep
Ini
Sweep Cast
Sweep Loop
Map
Revive
Enter map-specific custom script code below. This text will be included in the map script after variables are declared and before any trigger code.

		
Name Type Is Array Initial Value
a real No
g group No
i integer No
i2 integer No
r real No
r2 real No
Sweep_Caster unit Yes
Sweep_Data real Yes
Sweep_DataCount integer No
Sweep_Group group Yes
Sweep_Lightning lightning Yes
Sweep_Max integer No
u unit No
u2 unit No
x real No
x2 real No
y real No
y2 real No
zLoc location No
Ini
  Events
    Map initialization
  Conditions
  Actions
    Set Sweep_DataCount = 14
    Set zLoc = (Point(0, 0))
Sweep Cast
  Events
    Unit - A unit Starts the effect of an ability
  Conditions
    (Ability being cast) Equal to S|cffffcc00w|reeping Beam
  Actions
    -------- Caster --------
    Set u = (Triggering unit)
    -------- Caster coords --------
    Custom script: set udg_x2 = GetUnitX(udg_u)
    Custom script: set udg_y2 = GetUnitY(udg_u)
    -------- Two beams just look best but other numbers will work, too --------
    Set i2 = 2
    For each (Integer i) from 1 to i2, do (Actions)
      Loop - Actions
        -------- Radius of beam --------
        Set r = 200.00
        -------- Coords of target point --------
        Custom script: set udg_x = GetSpellTargetX()
        Custom script: set udg_y = GetSpellTargetY()
        -------- Offset angle of beam --------
        Set a = ((Atan2((y - y2), (x - x2))) + ((Real(((360 / i2) x i))) + 90.00))
        -------- Calculating beam target point coords based on that --------
        Set x = (x + (r x (Cos(a))))
        Set y = (y + (r x (Sin(a))))
        -------- Direction of beam --------
        Set a = (a + 180.00)
        -------- Create sweep lightning --------
        Set Sweep_Max = (Sweep_Max + 1)
        Lightning - Create a Finger of Death lightning effect from source zLoc to target zLoc
        Set Sweep_Lightning[Sweep_Max] = (Last created lightning effect)
        Custom script: if udg_Sweep_Group[udg_i] == null then
        Custom script: set udg_Sweep_Group[udg_i] = CreateGroup()
        Custom script: endif
        -------- Caster again --------
        Set Sweep_Caster[Sweep_Max] = u
        -------- Start distance value (should be 0) --------
        Set Sweep_Data[(Sweep_Max x Sweep_DataCount)] = 0.00
        -------- Distance the beam will travel --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 1)] = (r x 2.00)
        -------- Speed of beam (will move 8 every 1/0.03 sec) --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 2)] = 8.00
        -------- X of target point --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 3)] = x
        -------- Y of target point --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 4)] = y
        -------- X component of speed --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 5)] = (Sweep_Data[((Sweep_Max x Sweep_DataCount) + 2)] x (Cos(a)))
        -------- Y component of speed --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 6)] = (Sweep_Data[((Sweep_Max x Sweep_DataCount) + 2)] x (Sin(a)))
        -------- Caster beam offset distance --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 7)] = 70.00
        -------- Caster beam offset angle --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 8)] = (a - ((Atan2((y - y2), (x - x2))) + 90.00))
        -------- Caster beam height offset --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 9)] = 130.00
        -------- Aoe of beam --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 10)] = 150.00
        -------- Damage of beam --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 11)] = 50.00
        -------- Sfx start count --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 12)] = 0.00
        -------- Sfx max count --------
        Set Sweep_Data[((Sweep_Max x Sweep_DataCount) + 13)] = 3.00
    Trigger - Turn on Sweep_Loop <gen>
Sweep Loop
  Events
    Time - Every 0.03 seconds of game time
  Conditions
  Actions
    -------- Standard d4rk_g4nd4lf indexing --------
    For each (Integer i) from 1 to Sweep_Max, do (Actions)
      Loop - Actions
        Set u = Sweep_Caster[i]
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            u Not equal to No unit
            (Life of u) Greater than 0.00
            Sweep_Data[(i x Sweep_DataCount)] Less than Sweep_Data[((i x Sweep_DataCount) + 1)]
          Then - Actions
            -------- Count on distance --------
            Set Sweep_Data[(i x Sweep_DataCount)] = (Sweep_Data[(i x Sweep_DataCount)] + Sweep_Data[((i x Sweep_DataCount) + 2)])
            -------- Lightning coords caster --------
            Custom script: set udg_x2 = GetUnitX(udg_u)
            Custom script: set udg_y2 = GetUnitY(udg_u)
            -------- Apply offset based on facing --------
            Set a = ((Facing of u) + (Sweep_Data[((i x Sweep_DataCount) + 8)] - 90.00))
            Set x2 = (x2 + (Sweep_Data[((i x Sweep_DataCount) + 7)] x (Cos(a))))
            Set y2 = (y2 + (Sweep_Data[((i x Sweep_DataCount) + 7)] x (Sin(a))))
            -------- Get terrain z-height --------
            Custom script: call MoveLocation(udg_zLoc, udg_x2, udg_y2)
            Custom script: set udg_r2 = GetLocationZ(udg_zLoc)
            -------- Apply z offset --------
            Set r2 = (r2 + Sweep_Data[((i x Sweep_DataCount) + 9)])
            -------- Lightning coords target point --------
            -------- Move lightning target coords --------
            Set x = (Sweep_Data[((i x Sweep_DataCount) + 3)] + Sweep_Data[((i x Sweep_DataCount) + 5)])
            Set y = (Sweep_Data[((i x Sweep_DataCount) + 4)] + Sweep_Data[((i x Sweep_DataCount) + 6)])
            -------- Save new position --------
            Set Sweep_Data[((i x Sweep_DataCount) + 3)] = x
            Set Sweep_Data[((i x Sweep_DataCount) + 4)] = y
            Custom script: call MoveLocation(udg_zLoc, udg_x, udg_y)
            -------- Create special effect every x iterations --------
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                Sweep_Data[((i x Sweep_DataCount) + 12)] Greater than or equal to Sweep_Data[((i x Sweep_DataCount) + 13)]
              Then - Actions
                Set Sweep_Data[((i x Sweep_DataCount) + 12)] = 0.00
                Special Effect - Create a special effect at zLoc using Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
                Special Effect - Destroy (Last created special effect)
              Else - Actions
                Set Sweep_Data[((i x Sweep_DataCount) + 12)] = (Sweep_Data[((i x Sweep_DataCount) + 12)] + 1)
            Set r = Sweep_Data[((i x Sweep_DataCount) + 10)]
            -------- Pick units in range --------
            Custom script: call GroupEnumUnitsInRange(udg_g, udg_x, udg_y, udg_r, null)
            Unit Group - Pick every unit in g and do (Actions)
              Loop - Actions
                Set u2 = (Picked unit)
                -------- Check if picked unit is valid target --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  If - Conditions
                    (Life of u2) Greater than 0.00
                    (u2 is A structure) Equal to False
                    (u2 is A flying unit) Equal to False
                    (u2 is Mechanical) Equal to False
                    (u2 is Magic Immune) Equal to False
                    (u2 is in Sweep_Group[i]) Equal to False
                    (u2 belongs to an enemy of (Owner of u)) Equal to True
                  Then - Actions
                    -------- Add to group so it won't get damaged twice --------
                    Unit Group - Add u2 to Sweep_Group[i]
                    -------- Damage --------
                    Unit - Cause u to damage u2, dealing Sweep_Data[((i x Sweep_DataCount) + 11)] damage of attack type Spells and damage type Unknown
                  Else - Actions
            -------- Move lightning --------
            Custom script: call MoveLightningEx(udg_Sweep_Lightning[udg_i], true, udg_x, udg_y, GetLocationZ(udg_zLoc), udg_x2, udg_y2, udg_r2)
          Else - Actions
            -------- Clean up and resort data --------
            Set Sweep_Caster[i] = Sweep_Caster[Sweep_Max]
            Lightning - Destroy Sweep_Lightning[i]
            Set Sweep_Lightning[i] = Sweep_Lightning[Sweep_Max]
            Unit Group - Remove all units from Sweep_Group[i]
            Unit Group - Add all units of Sweep_Group[Sweep_Max] to Sweep_Group[i]
            Unit Group - Remove all units from Sweep_Group[Sweep_Max]
            For each (Integer i2) from 0 to (Sweep_DataCount - 1), do (Actions)
              Loop - Actions
                Set Sweep_Data[((i x Sweep_DataCount) + i2)] = Sweep_Data[((Sweep_Max x Sweep_DataCount) + i2)]
            Set Sweep_Max = (Sweep_Max - 1)
            Set i = (i - 1)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                Sweep_Max Less than 1
              Then - Actions
                Trigger - Turn off (This trigger)
              Else - Actions
Revive
  Events
    Unit - A unit Dies
  Conditions
  Actions
    Wait 5.00 game-time seconds
    Custom script: call MoveLocation(udg_zLoc, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()))
    Unit - Create 1 (Unit-type of (Triggering unit)) for (Owner of (Triggering unit)) at zLoc facing (Facing of (Triggering unit)) degrees
    Unit - Remove (Triggering unit) from the game