Spellpack Time Guardian

popo80000

New Member
Reaction score
20
Time Guardian

It is..
GUI
MUI
Lagless
Leakless

Import Difficulty: Easy


Abilities:
Time Walk
TimeWalk.jpg

Walk into the future with his shadow. After his shadow finishes walking through the path of time, he moves himself into the future that his shadow has created for him.
Level 1 - Maximum range of 700.
Level 2 - Maximum range of 900.
Level 3 - Maximum range of 1100.
Level 4 - Maximum range of 1300.
Trigger:
  • Time Walk
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Time Walk
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TimeWalk_Counts Greater than 500
        • Then - Actions
          • Set TimeWalk_Counts = 0
        • Else - Actions
      • Set TimeWalk_Counts = (TimeWalk_Counts + 1)
      • Set TimeWalk_Caster[TimeWalk_Counts] = (Casting unit)
      • Set TimeWalk_CasterLoc = (Position of TimeWalk_Caster[TimeWalk_Counts])
      • Set TimeWalk_TargetPoint = (Target point of ability being cast)
      • Set TimeWalk_Angle[TimeWalk_Counts] = (Angle from TimeWalk_CasterLoc to TimeWalk_TargetPoint)
      • Set TimeWalk_Distance[TimeWalk_Counts] = (Distance between TimeWalk_CasterLoc and TimeWalk_TargetPoint)
      • Set TimeWalk_DistanceMoved[TimeWalk_Counts] = 0.00
      • Set TimeWalk_DistanceCounts[TimeWalk_Counts] = 0.00
      • Set TimeWalk_Colour[TimeWalk_Counts] = 25.00
      • Unit - Create 1 Dummy Time Walk for (Owner of TimeWalk_Caster[TimeWalk_Counts]) at TimeWalk_CasterLoc facing TimeWalk_Angle[TimeWalk_Counts] degrees
      • Animation - Change (Last created unit)'s vertex coloring to (25.00%, 25.00%, 25.00%) with 0.00% transparency
      • Unit - Set the custom value of (Last created unit) to TimeWalk_Counts
      • Unit Group - Add (Last created unit) to TimeWalk_DummyGroup
      • Custom script: call RemoveLocation(udg_TimeWalk_CasterLoc)
      • Custom script: call RemoveLocation(udg_TimeWalk_TargetPoint)
      • Trigger - Turn on Time Walk Effects <gen>
Trigger:
  • Time Walk Effects
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in TimeWalk_DummyGroup and do (Actions)
        • Loop - Actions
          • Set TimeWalk_Dummy = (Picked unit)
          • Set TimeWalk_CustomValue = (Custom value of TimeWalk_Dummy)
          • Set TimeWalk_Point[1] = (Position of TimeWalk_Dummy)
          • Set TimeWalk_Point[2] = (TimeWalk_Point[1] offset by 20.00 towards TimeWalk_Angle[TimeWalk_CustomValue] degrees)
          • Destructible - Pick every destructible within 80.00 of TimeWalk_Point[2] and do (Actions)
            • Loop - Actions
              • Destructible - Kill (Picked destructible)
          • Unit - Move TimeWalk_Dummy instantly to TimeWalk_Point[2]
          • Animation - Play TimeWalk_Dummy's walk animation
          • Set TimeWalk_DistanceMoved[TimeWalk_CustomValue] = (TimeWalk_DistanceMoved[TimeWalk_CustomValue] + 20.00)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TimeWalk_DistanceMoved[TimeWalk_CustomValue] Greater than or equal to TimeWalk_Distance[TimeWalk_CustomValue]
            • Then - Actions
              • Special Effect - Create a special effect attached to the chest of TimeWalk_Caster[TimeWalk_CustomValue] using Abilities\Spells\Items\SpellShieldAmulet\SpellShieldCaster.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call SetUnitX( udg_TimeWalk_Caster[udg_TimeWalk_CustomValue], GetLocationX( udg_TimeWalk_Point[2] ) )
              • Custom script: call SetUnitY( udg_TimeWalk_Caster[udg_TimeWalk_CustomValue], GetLocationY( udg_TimeWalk_Point[2] ) )
              • Unit - Remove TimeWalk_Dummy from the game
              • Unit Group - Remove TimeWalk_Dummy from TimeWalk_DummyGroup
              • Set TimeWalk_Caster[TimeWalk_CustomValue] = No unit
            • Else - Actions
              • Set TimeWalk_DistanceCounts[TimeWalk_CustomValue] = (TimeWalk_DistanceCounts[TimeWalk_CustomValue] + 20.00)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TimeWalk_DistanceCounts[TimeWalk_CustomValue] Greater than or equal to 40.00
                • Then - Actions
                  • Set TimeWalk_Colour[TimeWalk_CustomValue] = (TimeWalk_Colour[TimeWalk_CustomValue] + 2.50)
                  • Set TimeWalk_DistanceCounts[TimeWalk_CustomValue] = 0.00
                  • Set TimeWalk_FadeCounts = (TimeWalk_FadeCounts + 1)
                  • Set TimeWalk_Fade[TimeWalk_FadeCounts] = 0.00
                  • Set TimeWalk_FadeColour[TimeWalk_FadeCounts] = TimeWalk_Colour[TimeWalk_CustomValue]
                  • Unit - Create 1 Dummy Time Walk for (Owner of TimeWalk_Caster[TimeWalk_CustomValue]) at TimeWalk_Point[2] facing TimeWalk_Angle[TimeWalk_CustomValue] degrees
                  • Animation - Change (Last created unit)'s vertex coloring to (TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%) with 0.00% transparency
                  • Unit - Set the custom value of (Last created unit) to TimeWalk_FadeCounts
                  • Unit Group - Add (Last created unit) to TimeWalk_FadeGroup
                • Else - Actions
          • Animation - Change TimeWalk_Dummy's vertex coloring to (TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%) with 0.00% transparency
          • Custom script: call RemoveLocation(udg_TimeWalk_Point[1])
          • Custom script: call RemoveLocation(udg_TimeWalk_Point[2])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in TimeWalk_FadeGroup) Greater than 0
        • Then - Actions
          • Unit Group - Pick every unit in TimeWalk_FadeGroup and do (Actions)
            • Loop - Actions
              • Set TimeWalk_FadeCustomValue = (Custom value of (Picked unit))
              • Animation - Play (Picked unit)'s walk animation
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TimeWalk_Fade[TimeWalk_FadeCustomValue] Greater than or equal to 100.00
                • Then - Actions
                  • Unit - Remove (Picked unit) from the game
                  • Unit Group - Remove (Picked unit) from TimeWalk_FadeGroup
                • Else - Actions
                  • Set TimeWalk_Fade[TimeWalk_FadeCustomValue] = (TimeWalk_Fade[TimeWalk_FadeCustomValue] + 2.50)
                  • Animation - Change (Picked unit)'s vertex coloring to (TimeWalk_FadeColour[TimeWalk_FadeCustomValue]%, TimeWalk_FadeColour[TimeWalk_FadeCustomValue]%, TimeWalk_FadeColour[TimeWalk_FadeCustomValue]%) with TimeWalk_Fade[TimeWalk_FadeCustomValue]% transparency
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Number of units in TimeWalk_DummyGroup) Equal to 0
              • (Number of units in TimeWalk_FadeGroup) Equal to 0
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TimeWalk_FadeCounts Greater than 500
            • Then - Actions
              • Set TimeWalk_FadeCounts = 0
            • Else - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

Time Whirl
There was actually an explosion effect, you'll have to test the map to see it for yourself.
TimeWhirl.jpg

Creates a concentration of energy at a point, causing nearby enemy to be sucked in. After 3.5 seconds, the huge concentration of energy will detonate, pushing all nearby enemy away from it and deals damage. Enemy that is near to the area of explosion will takes halved of the damage. Damage is pure.
Level 1 - 200 AoE, deals 80 damage.
Level 2 - 250 AoE, deals 160 damage.
Level 3 - 300 AoE, deals 240 damage.
Level 4 - 350 AoE, deals 320 damage.
Trigger:
  • Time Whirl
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Time Whirl
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TimeWhirl_Counts Greater than 500
        • Then - Actions
          • Set TimeWhirl_Counts = 0
        • Else - Actions
      • Set TimeWhirl_Counts = (TimeWhirl_Counts + 1)
      • Set TimeWhirl_Caster[TimeWhirl_Counts] = (Casting unit)
      • Set TimeWhirl_CasterLoc = (Position of TimeWhirl_Caster[TimeWhirl_Counts])
      • Set TimeWhirl_TargetPoint[TimeWhirl_Counts] = (Target point of ability being cast)
      • Set TimeWhirl_Level = (Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_Counts])
      • Set TimeWhirl_Area[1] = 200.00
      • Set TimeWhirl_Area[2] = 250.00
      • Set TimeWhirl_Area[3] = 300.00
      • Set TimeWhirl_Area[4] = 350.00
      • Destructible - Pick every destructible within TimeWhirl_Area[TimeWhirl_Level] of TimeWhirl_TargetPoint[TimeWhirl_Counts] and do (Actions)
        • Loop - Actions
          • Destructible - Kill (Picked destructible)
      • Set TimeWhirl_Timer[TimeWhirl_Counts] = 0.00
      • Set TimeWhirl_DummySize[TimeWhirl_Counts] = 260.00
      • Unit - Create 1 Dummy Time Whirl for (Owner of TimeWhirl_Caster[TimeWhirl_Counts]) at TimeWhirl_TargetPoint[TimeWhirl_Counts] facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to ((160.00 + (25.00 x (Real(TimeWhirl_Level))))%, (160.00 + (25.00 x (Real(TimeWhirl_Level))))%, (160.00 + (25.00 x (Real(TimeWhirl_Level))))%) of its original size
      • Unit - Set the custom value of (Last created unit) to TimeWhirl_Counts
      • Unit Group - Add (Last created unit) to TimeWhirl_DummyGroup
      • Custom script: call RemoveLocation (udg_TimeWhirl_CasterLoc)
      • Trigger - Turn on Time Whirl Effects <gen>
Trigger:
  • Time Whirl Effects
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in TimeWhirl_DummyGroup and do (Actions)
        • Loop - Actions
          • Set TimeWhirl_CustomValue = (Custom value of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TimeWhirl_Timer[TimeWhirl_CustomValue] Greater than or equal to 3.50
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TimeWhirl_DummySize[TimeWhirl_CustomValue] Greater than or equal to 600.00
                • Then - Actions
                  • Unit Group - Pick every unit in TimeWhirl_CollisionGroup and do (Actions)
                    • Loop - Actions
                      • Unit - Turn collision for (Picked unit) On
                      • Unit Group - Remove (Picked unit) from TimeWhirl_CollisionGroup
                  • Unit - Kill (Picked unit)
                  • Unit Group - Remove (Picked unit) from TimeWhirl_DummyGroup
                • Else - Actions
                  • Set TimeWhirl_DummySize[TimeWhirl_CustomValue] = (TimeWhirl_DummySize[TimeWhirl_CustomValue] + 40.00)
                  • Animation - Change (Picked unit)'s size to (TimeWhirl_DummySize[TimeWhirl_CustomValue]%, TimeWhirl_DummySize[TimeWhirl_CustomValue]%, TimeWhirl_DummySize[TimeWhirl_CustomValue]%) of its original size
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TimeWhirl_DummySize[TimeWhirl_CustomValue] Equal to 300.00
                    • Then - Actions
                      • Special Effect - Create a special effect at TimeWhirl_TargetPoint[TimeWhirl_CustomValue] using Abilities\Spells\Orc\LightningBolt\LightningBoltMissile.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Set TimeWhirl_UnitGroup[2] = (Units within TimeWhirl_Area[(Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_CustomValue])] of TimeWhirl_TargetPoint[TimeWhirl_CustomValue] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal to True) and
                      • Unit Group - Pick every unit in TimeWhirl_UnitGroup[2] and do (Actions)
                        • Loop - Actions
                          • Unit - Cause TimeWhirl_Caster[TimeWhirl_CustomValue] to damage (Picked unit), dealing (37.50 x (Real((Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_CustomValue])))) damage of attack type Chaos and damage type Universal
                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
                          • Special Effect - Destroy (Last created special effect)
                      • Set TimeWhirl_UnitGroup[3] = (Units within (TimeWhirl_Area[(Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_CustomValue])] + 100.00) of TimeWhirl_TargetPoint[TimeWhirl_CustomValue] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal t
                      • Unit Group - Pick every unit in TimeWhirl_UnitGroup[3] and do (Actions)
                        • Loop - Actions
                          • Unit - Cause TimeWhirl_Caster[TimeWhirl_CustomValue] to damage (Picked unit), dealing (37.50 x (Real((Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_CustomValue])))) damage of attack type Chaos and damage type Universal
                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
                          • Special Effect - Destroy (Last created special effect)
                      • Custom script: call DestroyGroup (udg_TimeWhirl_UnitGroup[2])
                      • Custom script: call DestroyGroup (udg_TimeWhirl_UnitGroup[3])
                      • Unit - Create 1 Dummy for (Owner of TimeWhirl_Caster[TimeWhirl_CustomValue]) at TimeWhirl_TargetPoint[TimeWhirl_CustomValue] facing Default building facing degrees
                      • Unit - Set the custom value of (Last created unit) to TimeWhirl_CustomValue
                      • Unit Group - Add (Last created unit) to TimeWhirl_KnockGroup
                    • Else - Actions
            • Else - Actions
              • Set TimeWhirl_Timer[TimeWhirl_CustomValue] = (TimeWhirl_Timer[TimeWhirl_CustomValue] + 0.02)
              • Set TimeWhirl_UnitGroup[1] = (Units within TimeWhirl_Area[(Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_CustomValue])] of TimeWhirl_TargetPoint[TimeWhirl_CustomValue] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal to True) and
              • Unit Group - Pick every unit in TimeWhirl_UnitGroup[1] and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked unit) is in TimeWhirl_CollisionGroup) Not equal to True
                    • Then - Actions
                      • Unit Group - Add (Picked unit) to TimeWhirl_CollisionGroup
                      • Unit - Turn collision for (Picked unit) Off
                    • Else - Actions
                  • Set TimeWhirl_Target = (Picked unit)
                  • Set TimeWhirl_TargetLoc = (Position of TimeWhirl_Target)
                  • Unit - Wake up TimeWhirl_Target
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between TimeWhirl_TargetLoc and TimeWhirl_TargetPoint[TimeWhirl_CustomValue]) Greater than or equal to 10.00
                    • Then - Actions
                      • Set TimeWhirl_Angle = (Angle from TimeWhirl_TargetLoc to TimeWhirl_TargetPoint[TimeWhirl_CustomValue])
                      • Set TimeWhirl_Point[1] = (TimeWhirl_TargetLoc offset by 5.50 towards (TimeWhirl_Angle + 75.00) degrees)
                      • Custom script: call SetUnitX( udg_TimeWhirl_Target, GetLocationX( udg_TimeWhirl_Point[1] ) )
                      • Custom script: call SetUnitY( udg_TimeWhirl_Target, GetLocationY( udg_TimeWhirl_Point[1] ) )
                      • Custom script: call RemoveLocation (udg_TimeWhirl_Point[1])
                    • Else - Actions
                  • Custom script: call RemoveLocation (udg_TimeWhirl_TargetLoc)
              • Custom script: call DestroyGroup (udg_TimeWhirl_UnitGroup[1])
      • Unit Group - Pick every unit in TimeWhirl_KnockGroup and do (Actions)
        • Loop - Actions
          • Set TimeWhirl_KnockCustomValue = (Custom value of (Picked unit))
          • Set TimeWhirl_UnitGroup[4] = (Units within (TimeWhirl_Area[(Level of Time Whirl for TimeWhirl_Caster[TimeWhirl_KnockCustomValue])] + 100.00) of TimeWhirl_TargetPoint[TimeWhirl_KnockCustomValue] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is aliv
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Number of units in TimeWhirl_UnitGroup[4]) Greater than 0
            • Then - Actions
              • Unit Group - Pick every unit in TimeWhirl_UnitGroup[4] and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked unit) is in TimeWhirl_CollisionGroup) Not equal to True
                    • Then - Actions
                      • Unit Group - Add (Picked unit) to TimeWhirl_CollisionGroup
                      • Unit - Turn collision for (Picked unit) Off
                    • Else - Actions
                  • Set TimeWhirl_KnockUnit = (Picked unit)
                  • Set TimeWhirl_KnockUnitLoc = (Position of TimeWhirl_KnockUnit)
                  • Set TimeWhirl_KnockAngle = (Angle from TimeWhirl_TargetPoint[TimeWhirl_KnockCustomValue] to TimeWhirl_KnockUnitLoc)
                  • Set TimeWhirl_Distance = (Distance between TimeWhirl_TargetPoint[TimeWhirl_KnockCustomValue] and TimeWhirl_KnockUnitLoc)
                  • Set TimeWhirl_Point[2] = (TimeWhirl_KnockUnitLoc offset by (4.00 + (1000.00 / TimeWhirl_Distance)) towards TimeWhirl_KnockAngle degrees)
                  • Destructible - Pick every destructible within 90.00 of TimeWhirl_Point[2] and do (Actions)
                    • Loop - Actions
                      • Destructible - Kill (Picked destructible)
                  • Custom script: call SetUnitX( udg_TimeWhirl_KnockUnit, GetLocationX( udg_TimeWhirl_Point[2] ) )
                  • Custom script: call SetUnitY( udg_TimeWhirl_KnockUnit, GetLocationY( udg_TimeWhirl_Point[2] ) )
                  • Special Effect - Create a special effect at TimeWhirl_Point[2] using Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation (udg_TimeWhirl_KnockUnitLoc)
                  • Custom script: call RemoveLocation (udg_TimeWhirl_Point[2])
            • Else - Actions
              • Unit Group - Pick every unit in TimeWhirl_CollisionGroup and do (Actions)
                • Loop - Actions
                  • Unit - Turn collision for (Picked unit) On
                  • Unit Group - Remove (Picked unit) from TimeWhirl_CollisionGroup
              • Unit Group - Remove (Picked unit) from TimeWhirl_KnockGroup
              • Unit - Remove (Picked unit) from the game
              • Custom script: call RemoveLocation (udg_TimeWhirl_TargetPoint[udg_TimeWhirl_KnockCustomValue])
              • Set TimeWhirl_Caster[TimeWhirl_KnockCustomValue] = No unit
          • Custom script: call DestroyGroup (udg_TimeWhirl_UnitGroup[4])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Number of units in TimeWhirl_DummyGroup) Equal to 0
              • (Number of units in TimeWhirl_KnockGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

Reverse
Reverse.jpg

Gives a chance that the damage taken will be reflected to its' source. Whenever an amount of damage is reflected, an energy burst will occur around this unit, thus nearby enemy will be knocked back and takes pure damage.
Level 1 - 5% chance to reflect damage, every 150 damage reflected will cause a energy burst dealing 25 damage.
Level 2 - 10% chance to reflect damage, every 135 damage reflected will cause a energy burst dealing 50 damage.
Level 3 - 15% chance to reflect damage, every 120 damage reflected will cause a energy burst dealing 75 damage.
Level 4 - 20% chance to reflect damage, every 100 damage reflected will cause a energy burst dealing 100 damage.
Trigger:
  • Reverse
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Reverse
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Learning Hero) is in Reverse_StartGroup) Not equal to True
        • Then - Actions
          • Unit Group - Add (Learning Hero) to Reverse_StartGroup
          • Trigger - Add to Reverse Damage <gen> the event (Unit - (Learning Hero) Takes damage)
          • Set Reverse_Counts = (Reverse_Counts + 1)
          • Set Reverse_Caster[Reverse_Counts] = (Learning Hero)
          • Set Reverse_DamageTaken[Reverse_Counts] = 0.00
          • Set Reverse_DamageBurst[1] = 150.00
          • Set Reverse_DamageBurst[2] = 135.00
          • Set Reverse_DamageBurst[3] = 120.00
          • Set Reverse_DamageBurst[4] = 100.00
          • Set Reverse_Point[1] = (Position of Reverse_Caster[Reverse_Counts])
          • Unit - Create 1 Dummy for (Owner of Reverse_Caster[Reverse_Counts]) at Reverse_Point[1] facing Default building facing degrees
          • Unit - Set the custom value of (Last created unit) to Reverse_Counts
          • Unit Group - Add (Last created unit) to Reverse_DummyGroup
          • Custom script: call RemoveLocation (udg_Reverse_Point[1])
        • Else - Actions
Trigger:
  • Reverse Damage
    • Events
    • Conditions
      • ((Attacked unit) is in Reverse_StartGroup) Equal to True
      • ((Attacked unit) has buff Reverse ) Equal to True
    • Actions
      • Unit Group - Pick every unit in Reverse_DummyGroup and do (Actions)
        • Loop - Actions
          • Set Reverse_CustomValue = (Custom value of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Attacked unit) Equal to Reverse_Caster[Reverse_CustomValue]
            • Then - Actions
              • Set Reverse_RandomNumber = (Random percentage)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Reverse_RandomNumber Less than or equal to (5.00 x (Real((Level of Reverse for Reverse_Caster[Reverse_CustomValue]))))
                • Then - Actions
                  • Set Reverse_DamageTaken[Reverse_CustomValue] = (Reverse_DamageTaken[Reverse_CustomValue] + (Damage taken))
                  • Unit - Set life of Reverse_Caster[Reverse_CustomValue] to ((Life of Reverse_Caster[Reverse_CustomValue]) + (Damage taken))
                  • Unit - Cause (Picked unit) to damage (Damage source), dealing (Damage taken) damage of attack type Chaos and damage type Universal
                  • Special Effect - Create a special effect attached to the origin of Reverse_Caster[Reverse_CustomValue] using Abilities\Spells\Items\SpellShieldAmulet\SpellShieldCaster.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Reverse_DamageTaken[Reverse_CustomValue] Greater than or equal to Reverse_DamageBurst[(Level of Reverse for Reverse_Caster[Reverse_CustomValue])]
                    • Then - Actions
                      • Set Reverse_DamageTaken[Reverse_CustomValue] = 0.00
                      • Set Reverse_Point[2] = (Position of Reverse_Caster[Reverse_CustomValue])
                      • Special Effect - Create a special effect at Reverse_Point[2] using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect attached to the origin of Reverse_Caster[Reverse_CustomValue] using Abilities\Spells\NightElf\Taunt\TauntCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect attached to the origin of Reverse_Caster[Reverse_CustomValue] using Abilities\Spells\Items\TomeOfRetraining\TomeOfRetrainingCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Set Reverse_UnitGroup[1] = (Units within 250.00 of Reverse_Point[2] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of Reverse_Caster[Reverse_CustomValue])) Equal to True)
                      • Unit Group - Pick every unit in Reverse_UnitGroup[1] and do (Actions)
                        • Loop - Actions
                          • Unit - Cause Reverse_Caster[Reverse_CustomValue] to damage (Picked unit), dealing (25.00 x (Real((Level of Reverse for Reverse_Caster[Reverse_CustomValue])))) damage of attack type Chaos and damage type Universal
                      • Set Reverse_NumberofUnits = (Number of units in Reverse_UnitGroup[1])
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Reverse_Loop Greater than 500
                        • Then - Actions
                          • Set Reverse_Loop = 0
                        • Else - Actions
                      • Set Reverse_Loop = (Reverse_Loop + 1)
                      • For each (Integer Reverse_Loop) from 1 to Reverse_NumberofUnits, do (Actions)
                        • Loop - Actions
                          • Set Reverse_UnitGroup[2] = (Random 1 units from Reverse_UnitGroup[1])
                          • Unit Group - Pick every unit in Reverse_UnitGroup[2] and do (Actions)
                            • Loop - Actions
                              • Set Reverse_Affected[Reverse_Loop] = (Picked unit)
                              • Set Reverse_AffectedLoc[Reverse_Loop] = (Position of Reverse_Affected[Reverse_Loop])
                              • Set Reverse_Angle[Reverse_Loop] = (Angle from Reverse_Point[2] to Reverse_AffectedLoc[Reverse_Loop])
                              • Set Reverse_Speed[Reverse_Loop] = 15.00
                              • Set Reverse_Distance[Reverse_Loop] = 0.00
                              • Unit Group - Remove (Picked unit) from Reverse_UnitGroup[1]
                              • Custom script: call RemoveLocation(udg_Reverse_AffectedLoc[udg_Reverse_Loop])
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Reverse Burst <gen> is on) Not equal to True
                                • Then - Actions
                                  • Trigger - Turn on Reverse Burst <gen>
                                • Else - Actions
                          • Custom script: call DestroyGroup (udg_Reverse_UnitGroup[2])
                      • Custom script: call DestroyGroup (udg_Reverse_UnitGroup[1])
                      • Custom script: call RemoveLocation (udg_Reverse_Point[2])
                    • Else - Actions
                • Else - Actions
            • Else - Actions
Trigger:
  • Reverse Burst
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Reverse_Loop) from 1 to Reverse_NumberofUnits, do (Actions)
        • Loop - Actions
          • Set Reverse_AffectedLoc[Reverse_Loop] = (Position of Reverse_Affected[Reverse_Loop])
          • Set Reverse_Movement[Reverse_Loop] = (Reverse_AffectedLoc[Reverse_Loop] offset by Reverse_Speed[Reverse_Loop] towards Reverse_Angle[Reverse_Loop] degrees)
          • Destructible - Pick every destructible within 90.00 of Reverse_Movement[Reverse_Loop] and do (Actions)
            • Loop - Actions
              • Destructible - Kill (Picked destructible)
          • Custom script: call SetUnitX( udg_Reverse_Affected[udg_Reverse_Loop], GetLocationX( udg_Reverse_Movement[udg_Reverse_Loop] ) )
          • Custom script: call SetUnitY( udg_Reverse_Affected[udg_Reverse_Loop], GetLocationY( udg_Reverse_Movement[udg_Reverse_Loop] ) )
          • Set Reverse_Distance[Reverse_Loop] = (Reverse_Distance[Reverse_Loop] + Reverse_Speed[Reverse_Loop])
          • Set Reverse_Speed[Reverse_Loop] = (Reverse_Speed[Reverse_Loop] - 0.30)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Reverse_Distance[Reverse_Loop] Greater than or equal to 15.00
            • Then - Actions
              • Set Reverse_Distance[Reverse_Loop] = 0.00
              • Special Effect - Create a special effect at Reverse_Movement[Reverse_Loop] using Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_Reverse_AffectedLoc[udg_Reverse_Loop])
          • Custom script: call RemoveLocation(udg_Reverse_Movement[udg_Reverse_Loop])
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Reverse_Speed[Reverse_Loop] Less than or equal to 0.00
            • Then - Actions
              • Set Reverse_Done = (Reverse_Done + 1)
              • Set Reverse_Affected[Reverse_Loop] = No unit
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Reverse_Done Greater than or equal to Reverse_NumberofUnits
        • Then - Actions
          • Set Reverse_Done = 0
          • Trigger - Turn off (This trigger)
        • Else - Actions

Path of Time
PathofTime.jpg

Open up the path of time for a short period of time, when the path of time is opened, the time will be stopped for a short period of time. Once the path of time vanishes, it will moves the time guardian back to its' original location.
Level 1 - Open path for 4 seconds.
Level 2 - Open path for 5 seconds.
Level 3 - Open path for 6 seconds.
Trigger:
  • Path of Time
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Path of Time
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • PathofTime_Counts Greater than 500
        • Then - Actions
          • Set PathofTime_Counts = 0
        • Else - Actions
      • Set PathofTime_Counts = (PathofTime_Counts + 1)
      • Set PathofTime_Caster[PathofTime_Counts] = (Casting unit)
      • Set PathofTime_CasterLoc[PathofTime_Counts] = (Position of PathofTime_Caster[PathofTime_Counts])
      • Set PathofTime_FaceAngle[PathofTime_Counts] = (Facing of PathofTime_Caster[PathofTime_Counts])
      • Set PathofTime_Level = (Level of Path of Time for PathofTime_Caster[PathofTime_Counts])
      • Set PathofTime_Duration[1] = 4.00
      • Set PathofTime_Duration[2] = 5.00
      • Set PathofTime_Duration[3] = 6.00
      • Unit - Create 1 Dummy for (Owner of PathofTime_Caster[PathofTime_Counts]) at PathofTime_CasterLoc[PathofTime_Counts] facing Default building facing degrees
      • Unit - Set the custom value of (Last created unit) to PathofTime_Counts
      • Unit - Add a PathofTime_Duration[PathofTime_Level] second Generic expiration timer to (Last created unit)
      • Unit Group - Add (Last created unit) to PathofTime_DummyGroup
      • Set PathofTime_StopGroup = (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Not equal to Dummy Time Walk) and ((Matching unit) Not equal to PathofTime_Caster[PathofTime_Counts])))
      • Unit Group - Pick every unit in PathofTime_StopGroup and do (Actions)
        • Loop - Actions
          • Unit - Pause (Picked unit)
          • Animation - Change (Picked unit)'s animation speed to 0.00% of its original speed
      • Unit - Turn collision for PathofTime_Caster[PathofTime_Counts] Off
      • Custom script: call DestroyGroup (udg_PathofTime_StopGroup)
      • Trigger - Turn on Path of Time Effects <gen>
Trigger:
  • Path of Time Effects
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in PathofTime_DummyGroup and do (Actions)
        • Loop - Actions
          • Set PathofTime_CustomValue = (Custom value of (Picked unit))
          • Set PathofTime_Point = (Position of PathofTime_Caster[PathofTime_CustomValue])
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) is alive) Equal to True
            • Then - Actions
              • Game - Set time of day speed to 0.00% of the default speed
              • Set PathofTime_RandomHeight = (Random real number between 75.00 and 300.00)
              • Set PathofTime_RandomSize = (Random real number between 110.00 and 220.00)
              • Set PathofTime_Region = (Region centered at PathofTime_Point with size (1200.00, 1200.00))
              • Set PathofTime_RandomPoint = (Random point in PathofTime_Region)
              • Unit - Create 1 Dummy Path of Time for (Owner of PathofTime_Caster[PathofTime_CustomValue]) at PathofTime_RandomPoint facing Default building facing degrees
              • Unit - Set the custom value of (Last created unit) to PathofTime_CustomValue
              • Unit - Add Storm Crow Form to (Last created unit)
              • Unit - Remove Storm Crow Form from (Last created unit)
              • Animation - Change (Last created unit) flying height to PathofTime_RandomHeight at (PathofTime_RandomHeight / 3.00)
              • Animation - Change (Last created unit)'s size to (PathofTime_RandomSize%, PathofTime_RandomSize%, PathofTime_RandomSize%) of its original size
              • Unit Group - Add (Last created unit) to PathofTime_DestroyGroup
              • Set PathofTime_StopGroup = (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Not equal to Dummy Time Walk) and ((Matching unit) Not equal to PathofTime_Caster[PathofTime_CustomValue])))
              • Unit Group - Pick every unit in PathofTime_StopGroup and do (Actions)
                • Loop - Actions
                  • Unit - Pause (Picked unit)
                  • Animation - Change (Picked unit)'s animation speed to 0.00% of its original speed
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • PathofTime_FadeCounts Greater than 500
                • Then - Actions
                  • Set PathofTime_FadeCounts = 0
                • Else - Actions
              • Set PathofTime_FadeCounts = (PathofTime_FadeCounts + 1)
              • Set PathofTime_Fade[PathofTime_FadeCounts] = 0.00
              • Unit - Create 1 Dummy Time Walk for (Owner of PathofTime_Caster[PathofTime_CustomValue]) at PathofTime_Point facing (Facing of PathofTime_Caster[PathofTime_CustomValue]) degrees
              • Unit - Set the custom value of (Last created unit) to PathofTime_FadeCounts
              • Unit Group - Add (Last created unit) to PathofTime_FadeGroup
              • Custom script: call DestroyGroup (udg_PathofTime_StopGroup)
              • Custom script: call RemoveRect(udg_PathofTime_Region)
              • Custom script: call RemoveLocation (udg_PathofTime_RandomPoint)
            • Else - Actions
              • Unit - Turn collision for PathofTime_Caster[PathofTime_CustomValue] On
              • Special Effect - Create a special effect at PathofTime_Point using Abilities\Spells\NightElf\Blink\BlinkCaster.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call SetUnitX( udg_PathofTime_Caster[udg_PathofTime_CustomValue], GetLocationX( udg_PathofTime_CasterLoc[udg_PathofTime_CustomValue] ) )
              • Custom script: call SetUnitY( udg_PathofTime_Caster[udg_PathofTime_CustomValue], GetLocationY( udg_PathofTime_CasterLoc[udg_PathofTime_CustomValue] ) )
              • Special Effect - Create a special effect at PathofTime_CasterLoc[PathofTime_CustomValue] using Abilities\Spells\NightElf\Blink\BlinkTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Unit - Make PathofTime_Caster[PathofTime_CustomValue] face PathofTime_FaceAngle[PathofTime_CustomValue] over 0.00 seconds
              • Game - Set time of day speed to 100.00% of the default speed
              • Unit Group - Pick every unit in PathofTime_DestroyGroup and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Custom value of (Picked unit)) Equal to PathofTime_CustomValue
                    • Then - Actions
                      • Unit - Kill (Picked unit)
                      • Unit Group - Remove (Picked unit) from PathofTime_DummyGroup
                    • Else - Actions
              • Unit - Remove (Picked unit) from the game
              • Unit Group - Remove (Picked unit) from PathofTime_DummyGroup
              • Set PathofTime_Caster[PathofTime_CustomValue] = No unit
              • Set PathofTime_StopGroup = (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Not equal to Dummy Time Walk) and ((Matching unit) Not equal to PathofTime_Caster[PathofTime_CustomValue])))
              • Unit Group - Pick every unit in PathofTime_StopGroup and do (Actions)
                • Loop - Actions
                  • Unit - Unpause (Picked unit)
                  • Animation - Change (Picked unit)'s animation speed to 100.00% of its original speed
              • Custom script: call DestroyGroup (udg_PathofTime_StopGroup)
              • Custom script: call RemoveLocation (udg_PathofTime_CasterLoc[udg_PathofTime_CustomValue])
          • Custom script: call RemoveLocation (udg_PathofTime_Point)
      • Unit Group - Pick every unit in PathofTime_FadeGroup and do (Actions)
        • Loop - Actions
          • Set PathofTime_FadeCustomValue = (Custom value of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • PathofTime_Fade[PathofTime_FadeCustomValue] Greater than or equal to 100.00
            • Then - Actions
              • Unit - Remove (Picked unit) from the game
              • Unit Group - Remove (Picked unit) from PathofTime_FadeGroup
            • Else - Actions
              • Animation - Play (Picked unit)'s stand animation
              • Set PathofTime_Fade[PathofTime_FadeCustomValue] = (PathofTime_Fade[PathofTime_FadeCustomValue] + 8.00)
              • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with PathofTime_Fade[PathofTime_FadeCustomValue]% transparency
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Number of units in PathofTime_DestroyGroup) Equal to 0
              • (Number of units in PathofTime_DummyGroup) Equal to 0
              • (Number of units in PathofTime_FadeGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
Changelog
- A leak was removed. [Komaqtion]
- Loop Integer A has been replaced by Reverse_Loop. [Weep]
- Reverse_Affected[Integer A] was changed to Reverse_Affected[Reverse_Loop]. [Weep]
- Slight changes has been made to Reverse_Loop. [Weep]
- Trigger - Reverse Burst has been proven not a MUI. [Weep]
Inform me if there are any leaks. Thanks in advance! :D
If you like it, I'll hope to get +rep from you.
 

Attachments

  • Time Guardian.w3x
    72.4 KB · Views: 301

Komaqtion

You can change this now in User CP.
Reaction score
469
Second spells 1st trigger leaks this point:
Trigger:
  • Set TimeWhirl_TargetPoint[TimeWhirl_Counts] = (Target point of ability being cast)


You're only destroying this:
Trigger:
  • Custom script: call RemoveLocation (udg_TimeWhirl_TargetLoc)


But, anyways... Great pack, though this whole GUI era you've gotten in to really hurts my eyes :(
I can't believe you'd write this big code in GUI ?!
It would be both easier to write in JASS, and also a heck of a lot better readability XD
Please, learn JASS !!! :p
 

Komaqtion

You can change this now in User CP.
Reaction score
469
You'll learn it ;)

It takes time, but is soo worth it ;)

Start by converting some simple GUI triggers, and try to optimize them using JASS :thup:

(It took about 1-1.5 years from starting with JASS to where I am now XD)
 

popo80000

New Member
Reaction score
20
Wow. 1-1.5 years.
That was so long. Haha..
I think i will start learning it when i have free time. :D
 

Komaqtion

You can change this now in User CP.
Reaction score
469
Hehe XD Well, that's what I didn't do, and probably why it took so long...
I didn't dedicate the "JASS-learning" process very much, but simply used JASS here and there, and didn't really read tutorials very thoroughly :(
Now, that is what I should have done :D
 

Weep

Godspeed to the sound of the pounding
Reaction score
400
:D GUI pride! :D

Nice spells! I haven't checked out the code :)eek:) but one suggestion I noticed right away: don't use Integer A. It's faster without it (GetForLoopIndexA() is a function that does nothing but return the value of the variable bj_forLoopAIndex :nuts:), and not really any hassle to specify your own variable for the loop.
 

popo80000

New Member
Reaction score
20
Komaqtion: Haha..:D

Weep: Thanks for your compliment :).
If i don't use integer A, i can't find any better solution to it.
Because i got to set the sliding speed to make it look more realistic.
 

Weep

Godspeed to the sound of the pounding
Reaction score
400
If i don't use integer A, i can't find any better solution to it.
No, I mean to use For Each Integer Variable, Do Multiple Actions:
Trigger:
  • For each (Integer LoopIndex) from 1 to LoopCount, do (Actions)


It's cleaner, and also your custom script won't need GetForLoopIndexA(); you can just use udg_LoopIndex (or whatever name you use for your loop variable).
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
You'll learn it ;)

It takes time, but is soo worth it ;)

Start by converting some simple GUI triggers, and try to optimize them using JASS :thup:

(It took about 1-1.5 years from starting with JASS to where I am now XD)

Off-topic : I used 3 months. :D

The eye candy is nice. :thup:
 

LurkerAspect

Now officially a Super Lurker
Reaction score
118
Wow, a GUI master! I never made triggers that long...

Relax about JASS. It took me about 3 days to learn how to do the simple stuff, and created my first Sliding spell a few days afterwards. It's really quite simple once you understand the basics.
 

BlackRose

Forum User
Reaction score
239
Nice!

But maybe the first skill's images should actually be the same color as the caster instead of the player.
Time Whirl was good as well, reminded me of my Whilrpool spell.
Reverse didn't proc, so I couldn't really be bothered checking out Reverse.
I like the Path of Time. The rising of the green orbs looks amazing.
 

popo80000

New Member
Reaction score
20
Haha.. Thanks!
For the first skill, it was actually his shadow that was moving, that's why it was in black. When it is travelling, it's colour will slowly turns into the original colour.

Reverse didn't proc
What is proc?
I like the Path of Time. The rising of the green orbs looks amazing.
I added it as i felt that it is too plain to just have the time to stopped.
So, i added the rising green orbs and the fading effects to make it looks better.

PS: Aww.. I really hope that this spell pack can be approved. :(
 

Weep

Godspeed to the sound of the pounding
Reaction score
400
Good, you figured out what I meant. :D

Here are my other crits:

Time Walk
Trigger:
  • Time Walk
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Time Walk
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TimeWalk_Counts Greater than 500
        • Then - Actions
          • Set TimeWalk_Counts = 0
        • Else - Actions
      • Set TimeWalk_Counts = (TimeWalk_Counts + 1)
      • Set TimeWalk_Caster[TimeWalk_Counts] = (Casting unit)
      • Set TimeWalk_CasterLoc = (Position of TimeWalk_Caster[TimeWalk_Counts])
      • Set TimeWalk_TargetPoint = (Target point of ability being cast)
      • Set TimeWalk_Angle[TimeWalk_Counts] = (Angle from TimeWalk_CasterLoc to TimeWalk_TargetPoint)
      • Set TimeWalk_Distance[TimeWalk_Counts] = (Distance between TimeWalk_CasterLoc and TimeWalk_TargetPoint)
      • Set TimeWalk_DistanceMoved[TimeWalk_Counts] = 0.00
      • Set TimeWalk_DistanceCounts[TimeWalk_Counts] = 0.00
      • Set TimeWalk_Colour[TimeWalk_Counts] = 25.00
      • Unit - Create 1 Dummy Time Walk for (Owner of TimeWalk_Caster[TimeWalk_Counts]) at TimeWalk_CasterLoc facing TimeWalk_Angle[TimeWalk_Counts] degrees
      • Animation - Change (Last created unit)'s vertex coloring to (25.00%, 25.00%, 25.00%) with 0.00% transparency
      • Unit - Set the custom value of (Last created unit) to TimeWalk_Counts
      • Unit Group - Add (Last created unit) to TimeWalk_DummyGroup
      • Custom script: call RemoveLocation(udg_TimeWalk_CasterLoc)
      • Custom script: call RemoveLocation(udg_TimeWalk_TargetPoint)
      • Trigger - Turn on Time Walk Effects <gen>
It's preferred if you don't set a unit's custom value. If you used a unit indexing system like AIDS (requires NewGen) or GUI-AIDS you wouldn't have to use TimeWalk_Counts at all - each unit will automatically be given a unique custom value, so you could create the unit first and use its custom value for index of each array.

Trigger:
  • Time Walk Effects
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in TimeWalk_DummyGroup and do (Actions)
        • Loop - Actions
          • [...]
            • Unit - Remove TimeWalk_Dummy from the game
            • Unit Group - Remove TimeWalk_Dummy from TimeWalk_DummyGroup
You need to reverse the order of those, so you remove the unit from the group first.

Trigger:
  • [...]
    • Set TimeWalk_FadeCounts = (TimeWalk_FadeCounts + 1)
    • Set TimeWalk_Fade[TimeWalk_FadeCounts] = 0.00
    • Set TimeWalk_FadeColour[TimeWalk_FadeCounts] = TimeWalk_Colour[TimeWalk_CustomValue]
    • Unit - Create 1 Dummy Time Walk for (Owner of TimeWalk_Caster[TimeWalk_CustomValue]) at TimeWalk_Point[2] facing TimeWalk_Angle[TimeWalk_CustomValue] degrees
    • Animation - Change (Last created unit)'s vertex coloring to (TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%, TimeWalk_Colour[TimeWalk_CustomValue]%) with 0.00% transparency
    • Unit - Set the custom value of (Last created unit) to TimeWalk_FadeCounts
Again, it would be better to not set the unit's custom value, instead using an array of integers for the FadeCounts with an autoindexing system like AIDS.

Trigger:
  • [...]
    • Unit - Remove (Picked unit) from the game
    • Unit Group - Remove (Picked unit) from TimeWalk_FadeGroup
Again, reverse the order of those actions.

Trigger:
  • [...]
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • And - All (Conditions) are true
          • Conditions
            • (Number of units in TimeWalk_DummyGroup) Equal to 0
            • (Number of units in TimeWalk_FadeGroup) Equal to 0
      • Then - Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • TimeWalk_FadeCounts Greater than 500
          • Then - Actions
            • Set TimeWalk_FadeCounts = 0
          • Else - Actions
        • Trigger - Turn off (This trigger)
      • Else - Actions
This is an inefficient way to recycle indices...it only resets if no hero is currently using the spell, which is risky. Again, for this spell, an autoindexer would even take care of recycling for you.

Time Whirl
Again, it would be preferred to not set custom value, and instead use an autoindexer...

Reverse
Trigger:
  • Reverse Damage
    • Events
    • Conditions
      • ((Attacked unit) is in Reverse_StartGroup) Equal to True
      • ((Attacked unit) has buff Reverse ) Equal to True
    • Actions
      • Unit Group - Pick every unit in Reverse_DummyGroup and do (Actions)
        • Loop - Actions
          • Set Reverse_CustomValue = (Custom value of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Attacked unit) Equal to Reverse_Caster[Reverse_CustomValue]
            • Then - Actions
That is very inefficient. Basically, for every time a hero with Reverse takes damage, it has to search through every hero that has Reverse to find which one got damaged...

If you used an autoindexer you could just get the custom value of (Damaged Unit) and use that. (You'd also have to change the setup trigger to use the custom value of (Learning Hero) instead of Reverse_Counts.)

Trigger:
  • [...]
    • If - Conditions
      • Reverse_DamageTaken[Reverse_CustomValue] Greater than or equal to Reverse_DamageBurst[(Level of Reverse for Reverse_Caster[Reverse_CustomValue])]
It would be handy if you used an init trigger to set all the abilities to global variables, so a person would only have to chance them in once place to import the spells, instead of finding every reference in every trigger and changing then there (since it's likely the abilities won't have the same rawcodes after copying into another map.)

Trigger:
  • [...]
    • Set Reverse_NumberofUnits = (Number of units in Reverse_UnitGroup[1])
    • For each (Integer Reverse_Loop) from 1 to Reverse_NumberofUnits, do (Actions)
      • Loop - Actions
        • Set Reverse_UnitGroup[2] = (Random 1 units from Reverse_UnitGroup[1])
        • Unit Group - Pick every unit in Reverse_UnitGroup[2] and do (Actions)
          • Loop - Actions
            • Set Reverse_Affected[Reverse_Loop] = (Picked unit)
            • Set Reverse_AffectedLoc[Reverse_Loop] = (Position of Reverse_Affected[Reverse_Loop])
            • Set Reverse_Angle[Reverse_Loop] = (Angle from Reverse_Point[2] to Reverse_AffectedLoc[Reverse_Loop])
            • Set Reverse_Speed[Reverse_Loop] = 15.00
            • Set Reverse_Distance[Reverse_Loop] = 0.00
            • Unit Group - Remove (Picked unit) from Reverse_UnitGroup[1]
            • Custom script: call RemoveLocation(udg_Reverse_AffectedLoc[udg_Reverse_Loop])
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (Reverse Burst <gen> is on) Not equal to True
              • Then - Actions
                • Trigger - Turn on Reverse Burst <gen>
              • Else - Actions
This is very inefficient. :nuts: Just set Reverse_Loop to 0 beforehand and then use a normal Pick Every Unit action, with Set Reverse_Loop = Reverse_Loop + 1... Or, better yet, use an autoindexer (I'm getting repetitive :D) and instead use the custom value of the picked unit.

Also, as it is, this is not MUI. If a burst happens while units are still sliding from another burst, the first group of sliding units will be overwritten. (This wouldn't happen with the method that uses an autoindexer... :p)

Trigger:
  • Reverse Burst
    • [...]
      • Set Reverse_Affected[(Integer A)] = No unit
Forgot an Integer A. :D

If you did decide to use an autoindexer, this trigger would probably be better made using a unit group loop, where you'd add the sliding units to the group in the previous trigger.

Path of Time
I don't really have anything to say about this one that I haven't already mentioned about the other triggers. :)
 

BlackRose

Forum User
Reaction score
239
It certainly did not take me a week to learn normal JASS, and definitely LONGER than 3 months for me to learn vJASS.

And this has anything to do with the spell because?
 

Azlier

Old World Ghost
Reaction score
461
Trigger:
  • Destructible - Pick every destructible within 80.00 of TimeWalk_Point[2] and do (Actions)


This GUI action leaks horrendously internally.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top