• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Redemption Edge v1.0 by BetaGod

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
REDEMPTION EDGE v1.0
By BetaGod

389702_10150696677894143_629724142_9543308_316152548_n.jpg

Spawns several blades loaded with holy fury. Theese blades fly off the caster for a few seconds in a fixed direction, increasing their range; enemies in the area should know that they must get out before the blades rush quickly to the location, to damaging enemies and healing allies. The speed of the blade's flight determines bonus damage/heal, and the distance between the caster point and the target point determines the speed; so in order to achieve greater damage, it is convenient to target the spell as far away as possible.

Level 1 - 135 base damage/heal power.

Level 2 - 210 base damage/heal power.

Level 3 - Level 3 - 285 base damage/heal power.


  • Redemption Edge Init
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Redemption Edge
    • Actions
      • -------- ---------------------------------------------------------------- --------
      • -------- Don't touch this settings --------
      • -------- ---------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • RE_Skip Equal to 0
        • Then - Actions
          • Trigger - Turn on Redemption Edge Loop <gen>
        • Else - Actions
      • Set RE_Skip = (RE_Skip + 1)
      • Set RE_Times = (RE_Times + 1)
      • Set RE_Off[RE_Times] = True
      • Set RE_Caster[RE_Times] = (Triggering unit)
      • Set RE_Player[RE_Times] = (Owner of RE_Caster[RE_Times])
      • Set RE_AbilityLevel[RE_Times] = (Level of (Ability being cast) for RE_Caster[RE_Times])
      • Set RE_Location[RE_Times] = (Position of RE_Caster[RE_Times])
      • Set RE_Location3[RE_Times] = (Target point of ability being cast)
      • Set RE_Distance[RE_Times] = ((Distance between RE_Location[RE_Times] and RE_Location3[RE_Times]) x 1.50)
      • Set RE_Speed[RE_Times] = (RE_Distance[RE_Times] / 100.00)
      • Set RE_Aoe[RE_Times] = 125.00
      • Set RE_Power[RE_Times] = (((Real(RE_AbilityLevel[RE_Times])) x 75.00) + 60.00)
      • Set RE_MissileCount[RE_Times] = (RE_AbilityLevel[RE_Times] x 4)
      • Set RE_SFX1 = Abilities\Weapons\SentinelMissile\SentinelMissile.mdl
      • Set RE_SFX2 = Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
      • Set RE_SFX3 = Objects\Spawnmodels\Orc\Orcblood\OrcBloodHeroFarSeer.mdl
      • Set RE_SFX4 = Abilities\Spells\Orc\HealingWave\HealingWaveTarget.mdl
      • Set RE_Angle[RE_Times] = (360.00 / (Real(RE_MissileCount[RE_Times])))
      • Custom script: if udg_RE_Group[udg_RE_Times] == null then
      • Custom script: set udg_RE_Group[udg_RE_Times] = CreateGroup()
      • Custom script: endif
      • For each (Integer A) from 1 to RE_MissileCount[RE_Times], do (Actions)
        • Loop - Actions
          • Set RE_Location2[RE_Times] = (RE_Location[RE_Times] offset by RE_Speed[RE_Times] towards (RE_Angle[RE_Times] x (Real((Integer A)))) degrees)
          • Unit - Create 1 Dummy for RE_Player[RE_Times] at RE_Location[RE_Times] facing RE_Location2[RE_Times]
          • Set RE_Dummy[RE_Times] = (Last created unit)
          • Unit Group - Add RE_Dummy[RE_Times] to RE_Group[RE_Times]
          • Animation - Change RE_Dummy[RE_Times]'s size to (160.00%, 160.00%, 160.00%) of its original size
          • Animation - Change RE_Dummy[RE_Times]'s animation speed to 230.00% of its original speed
          • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 15.00%) with 100.00% transparency
          • Special Effect - Create a special effect attached to the chest of RE_Dummy[RE_Times] using RE_SFX1
          • Set RE_Effect[RE_Times] = (Last created special effect)
          • Special Effect - Create a special effect attached to the chest of RE_Dummy[RE_Times] using RE_SFX2
          • Set RE_Effect2[RE_Times] = (Last created special effect)
          • Custom script: call RemoveLocation(udg_RE_Location2[udg_RE_Times])
      • Custom script: call RemoveLocation(udg_RE_Location[udg_RE_Times])

  • Redemption Edge Loop
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • -------- ---------------------------------------------------------------- --------
      • -------- Don't touch this settings --------
      • -------- ---------------------------------------------------------------- --------
      • For each (Integer RE) from 1 to RE_Times, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • RE_Off[RE] Equal to True
            • Then - Actions
              • Set RE_Distance[RE] = (RE_Distance[RE] - RE_Speed[RE])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • RE_Distance[RE] Less than or equal to 0.00
                • Then - Actions
                  • Unit Group - Pick every unit in RE_Group[RE] and do (Actions)
                    • Loop - Actions
                      • Set RE_Location[RE] = (Position of (Picked unit))
                      • Set RE_Location2[RE] = (RE_Location3[RE] offset by (RE_Distance[RE] - RE_Speed[RE]) towards (Angle from RE_Location[RE] to RE_Location3[RE]) degrees)
                      • Unit - Move (Picked unit) instantly to RE_Location2[RE]
                      • Unit - Make (Picked unit) face RE_Location2[RE] over 0.00 seconds
                      • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 15.00%) with 0.00% transparency
                      • Animation - Change (Picked unit) flying height to 0.00 at 1200.00
                      • Unit - Kill (Picked unit)
                      • Special Effect - Destroy RE_Effect[RE]
                      • Special Effect - Destroy RE_Effect2[RE]
                      • Unit - Add a 0.10 second Generic expiration timer to (Picked unit)
                      • Unit Group - Remove (Picked unit) from RE_Group[RE]
                      • Custom script: call RemoveLocation(udg_RE_Location[udg_RE])
                      • Custom script: call RemoveLocation(udg_RE_Location2[udg_RE])
                  • Set RE_Power[RE] = (RE_Power[RE] x RE_Speed[RE])
                  • Set RE_Group2[RE] = (Units within RE_Aoe[RE] of RE_Location3[RE] matching ((((Matching unit) is A structure) Equal to False) and (((Matching unit) is alive) Equal to True)))
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in RE_Group2[RE] and do (Actions)
                    • Loop - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ((Picked unit) belongs to an enemy of RE_Player[RE]) Equal to True
                        • Then - Actions
                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using RE_SFX3
                          • Special Effect - Destroy (Last created special effect)
                          • Unit - Cause RE_Caster[RE] to damage (Picked unit), dealing RE_Power[RE] damage of attack type Spells and damage type Normal
                        • Else - Actions
                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using RE_SFX4
                          • Special Effect - Destroy (Last created special effect)
                          • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + RE_Power[RE])
                  • Custom script: call RemoveLocation(udg_RE_Location3[udg_RE])
                  • Set RE_Speed[RE] = 0.00
                  • Set RE_Distance[RE] = 0.00
                  • Set RE_Skip = (RE_Skip - 1)
                  • Set RE_Off[RE] = False
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • RE_Skip Equal to 0
                    • Then - Actions
                      • Set RE_Times = 0
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                • Else - Actions
                  • Unit Group - Pick every unit in RE_Group[RE] and do (Actions)
                    • Loop - Actions
                      • Set RE_Location[RE] = (Position of (Picked unit))
                      • Set RE_Location2[RE] = (RE_Location[RE] offset by RE_Speed[RE] towards ((Facing of (Picked unit)) + RE_Speed[RE]) degrees)
                      • Unit - Move (Picked unit) instantly to RE_Location2[RE]
                      • Animation - Change (Picked unit) flying height to ((Current flying height of (Picked unit)) + 1.00) at 0.00
                      • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 15.00%) with (100.00 - (Current flying height of (Picked unit)))% transparency
                      • Custom script: call RemoveLocation(udg_RE_Location[udg_RE])
                      • Custom script: call RemoveLocation(udg_RE_Location2[udg_RE])
            • Else - Actions

v1.0 changelog:
-Public Release

Keywords:
holy, sacred, blade, circular, bless, heal
Contents

Redemption Edge v1.0 by BetaGod (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 23:43, 17th Jul 2012 Magtheridon96: You're leaking groups with your current configuration. You should destroy the group at the end of each sell cast. RE_Location and RE_Location2...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

23:43, 17th Jul 2012
Magtheridon96:


  • You're leaking groups with your current configuration. You should destroy the group at the end of each sell cast.
  • RE_Location and RE_Location2 don't have to be arrays. You can use normal variables.
  • Owner of caster -> Triggering player
  • The constants should not be stored in arrays, you should make a configuration trigger and use constant variables.
  • Your current indexing method is pretty outdated. Click here to learn more about the best indexing method there is.
  • You can totally forget about checking if the group is null.
 
Level 29
Joined
Mar 10, 2009
Messages
5,016
- you really dont need this >>> if udg_RE_Group[udg_RE_Times] == null then
- RE_Location & RE_Location2 desont need to be arrayed
- You need to put a condition if caster is alive since the caster will hurt the enemy units
- RE_Player >>> TriggerPlayer
- RESFX1-4 and other configurables should be separated so that it will not run on every cast
- You really dont need to index all, like speed, aoe, abilitylevel, unless you are using it in the loop
- 125 AOE is small, make it a little higher
- The damage is too fast, you should multiply it according to your loop, in this case >>> Set RE_Power[RE_Times] = (((Real(RE_AbilityLevel[RE_Times])) x 75.00) + 60.00) x 0.02
- Use Hanky's indexing system, it's better
 
Level 11
Joined
May 13, 2010
Messages
167
you should use 0.03 instead of 0.02 seconds on that loop

omg, really? i though there was no difference!

- you really dont need this >>> if udg_RE_Group[udg_RE_Times] == null then
- RE_Location & RE_Location2 desont need to be arrayed
- You need to put a condition if caster is alive since the caster will hurt the enemy units
- RE_Player >>> TriggerPlayer
- RESFX1-4 and other configurables should be separated so that it will not run on every cast
- You really dont need to index all, like speed, aoe, abilitylevel, unless you are using it in the loop
- 125 AOE is small, make it a little higher
- The damage is too fast, you should multiply it according to your loop, in this case >>> Set RE_Power[RE_Times] = (((Real(RE_AbilityLevel[RE_Times])) x 75.00) + 60.00) x 0.02
- Use Hanky's indexing system, it's better

Vey usefull review. Thanks a lot, i will work on this changes for the next update!
 
Level 4
Joined
Aug 18, 2011
Messages
73
you could use hashtables instead of Arrays the hashtables make your spell completely MUI
in mean time dont damage units in loop trigger cuz it will damage the units as loop action
like 100dmg each 0.02 time!
periodic times like 0.01 and 0.02 make your map so laggy please fix it
 
Top