• 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.

Infinite Slashes v1.05

  • Like
Reactions: Almia
The blademaster rushes to his enemy target. Once he reaches his target, he then attacks the target 10/14/18 times, dealing 50/100/150 damage per attack.

Made the config trigger.
Somethings arent configurable in the trigger. They need to be configurated in the object editor.
These are:
>the models of illusions following the master
>The animation index (used to make the caster walk)
before changing it you must know which is the correct number of the animation you want.
I used this because the walking animation cannot be played by the normal GUI trigger.

It is 6 here because it is the walking animation number of the blademaster.
The 7th animation of him, here in hiveworkshop.
6 because the index starts from 0.

Didnt use the script below about the moving of the caster, I couldnt understand it, Im new at this =)



Fixed the leaks too.

Here are the Triggers:

[
  • Configuration Trigger
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Here you can set the Number of Attacks --------
      • Set CLMaxSlashes[1] = 10
      • Set CLMaxSlashes[2] = 14
      • Set CLMaxSlashes[3] = 18
      • -------- Here you can set the speed --------
      • Set CLSpeed = 25.00
      • -------- Here you can set the Animation --------
      • Set CLAnimation = Attack
      • -------- Here you can set the Special Effect --------
      • Set CLEffect = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • -------- Here you can set the Attachment of the SFX --------
      • Set CLAttachment = weapon
      • -------- Here you can set the Damage --------
      • Set CLDamage[1] = 50.00
      • Set CLDamage[2] = 100.00
      • Set CLDamage[3] = 150.00
      • -------- Here you can set the animation speed --------
      • Set CLAnimationSpeed = 250.00
      • -------- Here you can set the transparency of the Illus --------
      • Set CLTransparency = 60.00
      • -------- Here you can set the duration of the Illusions --------
      • Set CLDuration = 0.40
      • -------- Here you can set the Minimum distance required to begin attacking --------
      • Set CLMinimumDistance = 100.00
      • -------- Here you can set the animation index --------
      • Set CLAnimationIndex = 6
      • -------- Here you can set the slash interval --------
      • Set CLSlashInterval = 5
      • -------- Here you can set the SFX when the target is slashed. --------
      • Set CLSFX = Objects\Spawnmodels\Human\HumanBlood\BloodElfSpellThiefBlood.mdl
      • -------- Here you can change the attachment of that SFX --------
      • Set CLAttach = chest
[
  • Infinite Slashes Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Infinite Slashes
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • InfiniteSlashesIndex Equal to 0
        • Then - Actions
          • Trigger - Turn on Infinite Slashes Loop <gen>
        • Else - Actions
      • -------- Do not touch this --------
      • Set InfiniteSlashesIndex = (InfiniteSlashesIndex + 1)
      • Set InfiniteSlashesMui = (InfiniteSlashesMui + 1)
      • Set InfiniteSlashesBol1[InfiniteSlashesMui] = True
      • Set InfiniteSlashesBol2[InfiniteSlashesMui] = True
      • Set InfiniteSlashesCaster[InfiniteSlashesMui] = (Triggering unit)
      • Set InfiniteSlashesTarget[InfiniteSlashesMui] = (Target unit of ability being cast)
      • Set CLSpellLevel[InfiniteSlashesMui] = (Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui])
      • -------- Do not touch this --------
      • Animation - Change InfiniteSlashesCaster[InfiniteSlashesMui]'s animation speed to CLAnimationSpeed% of its original speed
      • -------- Special Effect --------
      • Special Effect - Create a special effect attached to the CLAttachment of InfiniteSlashesCaster[InfiniteSlashesMui] using CLEffect
      • Set InfiniteSlashesSFX[InfiniteSlashesMui] = (Last created special effect)
      • -------- Setting Number of Slashes --------
      • Set InfiniteSlashesCount2[InfiniteSlashesMui] = CLMaxSlashes[CLSpellLevel[InfiniteSlashesMui]]
      • -------- Pausing the Caster --------
      • Unit - Pause InfiniteSlashesCaster[InfiniteSlashesMui]
[
  • Infinite Slashes Loop
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • For each (Integer InfiniteSlashesLoop) from 1 to InfiniteSlashesMui, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • InfiniteSlashesBol1[InfiniteSlashesLoop] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • InfiniteSlashesBol2[InfiniteSlashesLoop] Equal to True
                • Then - Actions
                  • -------- Moving the Caster --------
                  • Set InfiniteSlashesTargetLoc = (Position of InfiniteSlashesTarget[InfiniteSlashesLoop])
                  • Set InfiniteSlashesCasterLoc = (Position of InfiniteSlashesCaster[InfiniteSlashesLoop])
                  • Set InfiniteSlashesAngle[InfiniteSlashesLoop] = (Angle from InfiniteSlashesCasterLoc to InfiniteSlashesTargetLoc)
                  • Unit - Make InfiniteSlashesCaster[InfiniteSlashesLoop] face InfiniteSlashesAngle[InfiniteSlashesLoop] over 0.00 seconds
                  • Set InfiniteSlashesCasterLoc2 = (InfiniteSlashesCasterLoc offset by CLSpeed towards InfiniteSlashesAngle[InfiniteSlashesLoop] degrees)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesCasterLoc)
                  • Custom script: call SetUnitX(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop],GetUnitX(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop]) + udg_CLSpeed * Cos(udg_InfiniteSlashesAngle[udg_InfiniteSlashesLoop] * bj_DEGTORAD))
                  • Custom script: call SetUnitY(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop],GetUnitY(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop]) + udg_CLSpeed * Sin(udg_InfiniteSlashesAngle[udg_InfiniteSlashesLoop] * bj_DEGTORAD))
                  • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = (Distance between InfiniteSlashesCasterLoc2 and InfiniteSlashesTargetLoc)
                  • Custom script: call SetUnitAnimationByIndex( udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], udg_CLAnimationIndex)
                  • Unit - Create 1 Infinite Slashes Dummy for (Owner of InfiniteSlashesCaster[InfiniteSlashesLoop]) at InfiniteSlashesCasterLoc2 facing InfiniteSlashesAngle[InfiniteSlashesLoop] degrees
                  • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with CLTransparency% transparency
                  • Unit - Add a CLDuration second Generic expiration timer to (Last created unit)
                  • Custom script: call SetUnitAnimationByIndex(GetLastCreatedUnit(), udg_CLAnimationIndex)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesCasterLoc2)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesTargetLoc)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesDistance[InfiniteSlashesLoop] Less than or equal to CLMinimumDistance
                    • Then - Actions
                      • -------- Setting the Loop to attack instead of move --------
                      • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                      • -------- Pausing the Target --------
                      • Unit - Pause InfiniteSlashesTarget[InfiniteSlashesLoop]
                    • Else - Actions
                • Else - Actions
                  • -------- Counting the time before each strike is executed --------
                  • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = (InfiniteSlashesCount1[InfiniteSlashesLoop] + 1)
                  • -------- Here its every .2 seconds as the slash starts when the int is 5 --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesCount1[InfiniteSlashesLoop] Equal to CLSlashInterval
                    • Then - Actions
                      • -------- Stopping previous sounds --------
                      • Sound - Stop MetalHeavySliceStone2 <gen> Immediately
                      • -------- Reseting the count --------
                      • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = 0
                      • Animation - Play InfiniteSlashesCaster[InfiniteSlashesLoop]'s CLAnimation animation
                      • -------- Dealing Damage --------
                      • Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing CLDamage[CLSpellLevel[InfiniteSlashesLoop]] damage of attack type Normal and damage type Normal
                      • Special Effect - Create a special effect attached to the CLAttach of InfiniteSlashesTarget[InfiniteSlashesLoop] using CLSFX
                      • Special Effect - Destroy (Last created special effect)
                      • -------- Creating Sound --------
                      • Sound - Play MetalHeavySliceStone2 <gen> at 100.00% volume, attached to InfiniteSlashesTarget[InfiniteSlashesLoop]
                      • -------- Decreasing the remaining attacks --------
                      • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = (InfiniteSlashesCount2[InfiniteSlashesLoop] - 1)
                      • -------- Do not touch this --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (InfiniteSlashesTarget[InfiniteSlashesLoop] is paused) Not equal to True
                        • Then - Actions
                          • Unit - Pause InfiniteSlashesTarget[InfiniteSlashesLoop]
                        • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (InfiniteSlashesCaster[InfiniteSlashesLoop] is alive) Not equal to True
                              • (InfiniteSlashesTarget[InfiniteSlashesLoop] is alive) Not equal to True
                              • InfiniteSlashesCount2[InfiniteSlashesLoop] Equal to 0
                        • Then - Actions
                          • -------- Do not touch this --------
                          • Unit - Order InfiniteSlashesCaster[InfiniteSlashesLoop] to Stop
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Special Effect - Destroy InfiniteSlashesSFX[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesTarget[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesCaster[InfiniteSlashesLoop]
                          • Animation - Change InfiniteSlashesCaster[InfiniteSlashesLoop]'s animation speed to 100.00% of its original speed
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesCaster[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesTarget[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = 0.00
                          • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = 0
                          • Set InfiniteSlashesIndex = (InfiniteSlashesIndex - 1)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • InfiniteSlashesIndex Equal to 0
                            • Then - Actions
                              • Set InfiniteSlashesMui = 0
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                          • -------- Do not touch this --------
                        • Else - Actions
                    • Else - Actions
            • Else - Actions
[
  • Infintie Slashes Dummy
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infinite Slashes Dummy
    • Actions
      • Unit - Remove (Triggering unit) from the game
Keywords:
slash, slashes, omnislash, dash, blademaster, samurai, attack, charge, red, fire, slice, move
Contents

Infinite Slashes (Map)

Reviews
01:36, 16th Dec 2012 Magtheridon96: Approved. I would suggest looking at Hanky's Dynamic Indexing Template
Level 7
Joined
Apr 18, 2010
Messages
102
  • Infinite Slashes Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Infinite Slashes
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • InfiniteSlashesIndex Equal to 0
        • Then - Actions
          • Trigger - Turn on Infinite Slashes Loop <gen>
        • Else - Actions
      • -------- Do not touch this --------
      • Set InfiniteSlashesIndex = (InfiniteSlashesIndex + 1)
      • Set InfiniteSlashesMui = (InfiniteSlashesMui + 1)
      • Set InfiniteSlashesBol1[InfiniteSlashesMui] = True
      • Set InfiniteSlashesBol2[InfiniteSlashesMui] = True
      • Set InfiniteSlashesCaster[InfiniteSlashesMui] = (Triggering unit)
      • Set InfiniteSlashesTarget[InfiniteSlashesMui] = (Target unit of ability being cast)
      • -------- Do not touch this --------
      • Animation - Change InfiniteSlashesCaster[InfiniteSlashesMui]'s animation speed to 250.00% of its original speed
      • -------- Special Effect --------
      • Special Effect - Create a special effect attached to the weapon of InfiniteSlashesCaster[InfiniteSlashesMui] using Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • Set InfiniteSlashesSFX[InfiniteSlashesMui] = (Last created special effect)
      • -------- Damage --------
      • Set InfiniteSlashesDamage[InfiniteSlashesMui] = 50.00
      • -------- Number of Slashes --------
      • Set InfiniteSlashesCount2[InfiniteSlashesMui] = (6 + (2 x (Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui])))
      • -------- Pausing the Caster --------
      • Unit - Pause InfiniteSlashesCaster[InfiniteSlashesMui]


  • Infinite Slashes Loop
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • For each (Integer InfiniteSlashesLoop) from 1 to InfiniteSlashesMui, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • InfiniteSlashesBol1[InfiniteSlashesLoop] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • InfiniteSlashesBol2[InfiniteSlashesLoop] Equal to True
                • Then - Actions
                  • -------- Moving the Caster --------
                  • Set InfiniteSlashesTargetLoc = (Position of InfiniteSlashesTarget[InfiniteSlashesLoop])
                  • Set InfiniteSlashesCasterLoc = (Position of InfiniteSlashesCaster[InfiniteSlashesLoop])
                  • Set InfiniteSlashesAngle[InfiniteSlashesLoop] = (Angle from InfiniteSlashesCasterLoc to InfiniteSlashesTargetLoc)
                  • Unit - Make InfiniteSlashesCaster[InfiniteSlashesLoop] face InfiniteSlashesAngle[InfiniteSlashesLoop] over 0.01 seconds
                  • Set InfiniteSlashesCasterLoc = (InfiniteSlashesCasterLoc offset by 25.00 towards InfiniteSlashesAngle[InfiniteSlashesLoop] degrees)
                  • Custom script: call SetUnitX(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], GetLocationX(udg_InfiniteSlashesCasterLoc))
                  • Custom script: call SetUnitY(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], GetLocationY(udg_InfiniteSlashesCasterLoc))
                  • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = (Distance between InfiniteSlashesCasterLoc and InfiniteSlashesTargetLoc)
                  • Custom script: call SetUnitAnimationByIndex( udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], 6)
                  • Unit - Create 1 Infinite Slashes Dummy for (Owner of InfiniteSlashesCaster[InfiniteSlashesLoop]) at InfiniteSlashesCasterLoc facing InfiniteSlashesAngle[InfiniteSlashesLoop] degrees
                  • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 60.00% transparency
                  • Unit - Add a 0.40 second Generic expiration timer to (Last created unit)
                  • Custom script: call SetUnitAnimationByIndex(GetLastCreatedUnit(), 6)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesCasterLoc)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesTargetLoc)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesDistance[InfiniteSlashesLoop] Less than or equal to 100.00
                    • Then - Actions
                      • -------- Setting the Loop to attack instead of move --------
                      • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                      • -------- Pausing the Target --------
                      • Unit - Pause InfiniteSlashesTarget[InfiniteSlashesLoop]
                    • Else - Actions
                • Else - Actions
                  • -------- Counting the time before each strike is executed --------
                  • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = (InfiniteSlashesCount1[InfiniteSlashesLoop] + 1)
                  • -------- Here its every .2 seconds as the slash starts when the int is 5 --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesCount1[InfiniteSlashesLoop] Equal to 5
                    • Then - Actions
                      • -------- Reseting the count --------
                      • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = 0
                      • Animation - Play InfiniteSlashesCaster[InfiniteSlashesLoop]'s attack animation
                      • -------- Dealing Damage --------
                      • Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing InfiniteSlashesDamage[InfiniteSlashesLoop] damage of attack type Normal and damage type Normal
                      • Special Effect - Create a special effect attached to the chest of InfiniteSlashesTarget[InfiniteSlashesLoop] using Objects\Spawnmodels\Human\HumanBlood\BloodElfSpellThiefBlood.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • -------- Decreasing the remaining attacks --------
                      • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = (InfiniteSlashesCount2[InfiniteSlashesLoop] - 1)
                      • -------- Do not touch this --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (InfiniteSlashesCaster[InfiniteSlashesLoop] is alive) Not equal to True
                              • (InfiniteSlashesTarget[InfiniteSlashesLoop] is alive) Not equal to True
                              • InfiniteSlashesCount2[InfiniteSlashesLoop] Equal to 0
                        • Then - Actions
                          • -------- Do not touch this --------
                          • Unit - Order InfiniteSlashesCaster[InfiniteSlashesLoop] to Stop
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Special Effect - Destroy InfiniteSlashesSFX[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesTarget[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesCaster[InfiniteSlashesLoop]
                          • Animation - Change InfiniteSlashesCaster[InfiniteSlashesLoop]'s animation speed to 100.00% of its original speed
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesCaster[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesTarget[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = 0.00
                          • Set InfiniteSlashesDamage[InfiniteSlashesLoop] = 0.00
                          • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = 0
                          • Set InfiniteSlashesIndex = (InfiniteSlashesIndex - 1)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • InfiniteSlashesIndex Equal to 0
                            • Then - Actions
                              • Set InfiniteSlashesMui = 0
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                          • -------- Do not touch this --------
                        • Else - Actions
                    • Else - Actions
            • Else - Actions


  • Infintie Slashes Dummy
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infinite Slashes Dummy
    • Actions
      • Unit - Remove (Triggering unit) from the game

The first trigger has the configurations =) I already used comments to tell which are configurable =)
 

BUP

BUP

Level 9
Joined
Sep 9, 2012
Messages
172
  • Infinite Slashes Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Infinite Slashes
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • InfiniteSlashesIndex Equal to 0
        • Then - Actions
          • Trigger - Turn on Infinite Slashes Loop <gen>
        • Else - Actions
      • -------- Do not touch this --------
      • Set InfiniteSlashesIndex = (InfiniteSlashesIndex + 1)
      • Set InfiniteSlashesMui = (InfiniteSlashesMui + 1)
      • Set InfiniteSlashesBol1[InfiniteSlashesMui] = True
      • Set InfiniteSlashesBol2[InfiniteSlashesMui] = True
      • Set InfiniteSlashesCaster[InfiniteSlashesMui] = (Triggering unit)
      • Set InfiniteSlashesTarget[InfiniteSlashesMui] = (Target unit of ability being cast)
      • -------- Do not touch this --------
      • Animation - Change InfiniteSlashesCaster[InfiniteSlashesMui]'s animation speed to 250.00% of its original speed
      • -------- Special Effect --------
      • Special Effect - Create a special effect attached to the weapon of InfiniteSlashesCaster[InfiniteSlashesMui] using Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
      • Set InfiniteSlashesSFX[InfiniteSlashesMui] = (Last created special effect)
      • -------- Damage --------
      • Set InfiniteSlashesDamage[InfiniteSlashesMui] = 50.00
      • -------- Number of Slashes --------
      • Set InfiniteSlashesCount2[InfiniteSlashesMui] = (6 + (2 x (Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui])))
      • -------- Pausing the Caster --------
      • Unit - Pause InfiniteSlashesCaster[InfiniteSlashesMui]


  • Infinite Slashes Loop
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • For each (Integer InfiniteSlashesLoop) from 1 to InfiniteSlashesMui, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • InfiniteSlashesBol1[InfiniteSlashesLoop] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • InfiniteSlashesBol2[InfiniteSlashesLoop] Equal to True
                • Then - Actions
                  • -------- Moving the Caster --------
                  • Set InfiniteSlashesTargetLoc = (Position of InfiniteSlashesTarget[InfiniteSlashesLoop])
                  • Set InfiniteSlashesCasterLoc = (Position of InfiniteSlashesCaster[InfiniteSlashesLoop])
                  • Set InfiniteSlashesAngle[InfiniteSlashesLoop] = (Angle from InfiniteSlashesCasterLoc to InfiniteSlashesTargetLoc)
                  • Unit - Make InfiniteSlashesCaster[InfiniteSlashesLoop] face InfiniteSlashesAngle[InfiniteSlashesLoop] over 0.01 seconds
                  • Set InfiniteSlashesCasterLoc = (InfiniteSlashesCasterLoc offset by 25.00 towards InfiniteSlashesAngle[InfiniteSlashesLoop] degrees)
                  • Custom script: call SetUnitX(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], GetLocationX(udg_InfiniteSlashesCasterLoc))
                  • Custom script: call SetUnitY(udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], GetLocationY(udg_InfiniteSlashesCasterLoc))
                  • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = (Distance between InfiniteSlashesCasterLoc and InfiniteSlashesTargetLoc)
                  • Custom script: call SetUnitAnimationByIndex( udg_InfiniteSlashesCaster[udg_InfiniteSlashesLoop], 6)
                  • Unit - Create 1 Infinite Slashes Dummy for (Owner of InfiniteSlashesCaster[InfiniteSlashesLoop]) at InfiniteSlashesCasterLoc facing InfiniteSlashesAngle[InfiniteSlashesLoop] degrees
                  • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 60.00% transparency
                  • Unit - Add a 0.40 second Generic expiration timer to (Last created unit)
                  • Custom script: call SetUnitAnimationByIndex(GetLastCreatedUnit(), 6)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesCasterLoc)
                  • Custom script: call RemoveLocation(udg_InfiniteSlashesTargetLoc)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesDistance[InfiniteSlashesLoop] Less than or equal to 100.00
                    • Then - Actions
                      • -------- Setting the Loop to attack instead of move --------
                      • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                      • -------- Pausing the Target --------
                      • Unit - Pause InfiniteSlashesTarget[InfiniteSlashesLoop]
                    • Else - Actions
                • Else - Actions
                  • -------- Counting the time before each strike is executed --------
                  • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = (InfiniteSlashesCount1[InfiniteSlashesLoop] + 1)
                  • -------- Here its every .2 seconds as the slash starts when the int is 5 --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • InfiniteSlashesCount1[InfiniteSlashesLoop] Equal to 5
                    • Then - Actions
                      • -------- Reseting the count --------
                      • Set InfiniteSlashesCount1[InfiniteSlashesLoop] = 0
                      • Animation - Play InfiniteSlashesCaster[InfiniteSlashesLoop]'s attack animation
                      • -------- Dealing Damage --------
                      • Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing InfiniteSlashesDamage[InfiniteSlashesLoop] damage of attack type Normal and damage type Normal
                      • Special Effect - Create a special effect attached to the chest of InfiniteSlashesTarget[InfiniteSlashesLoop] using Objects\Spawnmodels\Human\HumanBlood\BloodElfSpellThiefBlood.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • -------- Decreasing the remaining attacks --------
                      • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = (InfiniteSlashesCount2[InfiniteSlashesLoop] - 1)
                      • -------- Do not touch this --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (InfiniteSlashesCaster[InfiniteSlashesLoop] is alive) Not equal to True
                              • (InfiniteSlashesTarget[InfiniteSlashesLoop] is alive) Not equal to True
                              • InfiniteSlashesCount2[InfiniteSlashesLoop] Equal to 0
                        • Then - Actions
                          • -------- Do not touch this --------
                          • Unit - Order InfiniteSlashesCaster[InfiniteSlashesLoop] to Stop
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Special Effect - Destroy InfiniteSlashesSFX[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesTarget[InfiniteSlashesLoop]
                          • Unit - Unpause InfiniteSlashesCaster[InfiniteSlashesLoop]
                          • Animation - Change InfiniteSlashesCaster[InfiniteSlashesLoop]'s animation speed to 100.00% of its original speed
                          • Set InfiniteSlashesBol1[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesBol2[InfiniteSlashesLoop] = False
                          • Set InfiniteSlashesCaster[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesTarget[InfiniteSlashesLoop] = No unit
                          • Set InfiniteSlashesDistance[InfiniteSlashesLoop] = 0.00
                          • Set InfiniteSlashesDamage[InfiniteSlashesLoop] = 0.00
                          • Set InfiniteSlashesCount2[InfiniteSlashesLoop] = 0
                          • Set InfiniteSlashesIndex = (InfiniteSlashesIndex - 1)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • InfiniteSlashesIndex Equal to 0
                            • Then - Actions
                              • Set InfiniteSlashesMui = 0
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                          • -------- Do not touch this --------
                        • Else - Actions
                    • Else - Actions
            • Else - Actions


  • Infintie Slashes Dummy
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infinite Slashes Dummy
    • Actions
      • Unit - Remove (Triggering unit) from the game

The first trigger has the configurations =) I already used comments to tell which are configurable =)

Oops sorry for my wrong review
 
Review:
1.Dont use Polar offset so that you wont create a variable for a point then use it for SetUnitX/Y
Use this instead:
[jass=]
call SetUnitX(udg_unit,GetUnitX(udg_unit) + speed * Cos(angle * bj_DEGTORAD))
call SetUnitY(udg_unit,GetUnitX(udg_unit) + speed * Sin(angle * bj_DEGTORAD))
[/code]
This is the same w/ polar offset,but doesnt leak.
2.Make Unit Face Angle can have rate of 0.00 seconds.
3.Speed must be configurable
4.Animation speed must be configurable also.
5.effect model should be configurable.
6.Minimum distance should be configurable.
7.Dont use animation by id,because some units doesnt have the same animation id.
8.the animation id should be configurable.
9.the first caster loc leaks.(loop)
10.animations should be configurable.
11.Vertex alpha should be configurable(transparency)
12.effect attachment should be configurable.
13.Max slashes count should be configurable.
14.Lastly,this needs a configuration trigger.Examples are found in some spells in hive,like BUP's,doom's,mine,and many.

NEEDS FIX

 
Level 3
Joined
Jun 13, 2010
Messages
43
7.Dont use animation by id,because some units doesnt have the same animation id.
8.the animation id should be configurable.

in GUI using call walk animation doesn't loop well. Only animationbyindex works by using jass.

Just as the he mention. you need to improve documentation and configurable points.
 
Review:
1.Dont use Polar offset so that you wont create a variable for a point then use it for SetUnitX/Y
Use this instead:
[jass=]
call SetUnitX(udg_unit,GetUnitX(udg_unit) + speed * Cos(angle * bj_DEGTORAD))
call SetUnitY(udg_unit,GetUnitX(udg_unit) + speed * Sin(angle * bj_DEGTORAD))
[/code]
This is the same w/ polar offset,but doesnt leak.
2.Make Unit Face Angle can have rate of 0.00 seconds.
3.Speed must be configurable
4.Animation speed must be configurable also.
5.effect model should be configurable.
6.Minimum distance should be configurable.
7.Dont use animation by id,because some units doesnt have the same animation id.
8.the animation id should be configurable.
9.the first caster loc leaks.(loop)
10.animations should be configurable.
11.Vertex alpha should be configurable(transparency)
12.effect attachment should be configurable.
13.Max slashes count should be configurable.
14.Lastly,this needs a configuration trigger.Examples are found in some spells in hive,like BUP's,doom's,mine,and many.

NEEDS FIX


Are you angry? Don't comment like that.
It looks bad you know
 

Wrda

Spell Reviewer
Level 28
Joined
Nov 18, 2012
Messages
1,993
Review:
1.Dont use Polar offset so that you wont create a variable for a point then use it for SetUnitX/Y
Use this instead:
[jass=]
call SetUnitX(udg_unit,GetUnitX(udg_unit) + speed * Cos(angle * bj_DEGTORAD))
call SetUnitY(udg_unit,GetUnitX(udg_unit) + speed * Sin(angle * bj_DEGTORAD))
[/code]
This is the same w/ polar offset,but doesnt leak.
2.Make Unit Face Angle can have rate of 0.00 seconds.
3.Speed must be configurable
4.Animation speed must be configurable also.
5.effect model should be configurable.
6.Minimum distance should be configurable.
7.Dont use animation by id,because some units doesnt have the same animation id.
8.the animation id should be configurable.
9.the first caster loc leaks.(loop)
10.animations should be configurable.
11.Vertex alpha should be configurable(transparency)
12.effect attachment should be configurable.
13.Max slashes count should be configurable.
14.Lastly,this needs a configuration trigger.Examples are found in some spells in hive,like BUP's,doom's,mine,and many.

NEEDS FIX

Effect model and effect attachment aren't needed, it's a waste of variables and saving data.
 
  • Custom script:call SetUnitAnimationByIndex(GetLastCreatedUnit(), 6)
You havent applied the animation index here.

InfiniteSlashesCount1[InfiniteSlashesLoop] Equal to 5
should be configurable same w/
Special Effect - Create a special effect attached to the chest of InfiniteSlashesTarget[InfiniteSlashesLoop] using Objects\Spawnmodels\Human\HumanBlood\BloodElfSpellThiefBlood.mdl

Should also add prefix so that it wont collide on the maps that will be imported from this spell.

You havent fixed the SetUnitX/Y problem,please view my previous review.
 
Level 3
Joined
Jun 13, 2010
Messages
43
There's no need to separate the configuration trigger. you can just combine it with Casting trigger.

Damage[1]= 50
replace
Set Damage[InfiniteSlashesIndex] = (50.00 x (Real((Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui]))))

Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing Damage[SpellLevel[InfiniteSlashesLoop]] damage of attack type Normal and damage type Normal
those are unnecessary indexing of an integer

Since you are using a unit dummy. Create a Unit type Variable to Configure it so that users can use different Dummy unit.
Pause is a lousy function it is not consistent. You need to add condition to check if caster and Target are STILL pausing . Multiple cast on a same hero will cause it to lose its constant. use if/else checking and pause the hero till the slashing is finish.
 
Level 7
Joined
Apr 18, 2010
Messages
102
There's no need to separate the configuration trigger. you can just combine it with Casting trigger.
Also
Damage[1]= 50
replace
Set Damage[InfiniteSlashesIndex] = (50.00 x (Real((Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui]))))

Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing Damage[SpellLevel[InfiniteSlashesLoop]] damage of attack type Normal and damage type Normal
those are unnecessary indexing of an integer

Since you are using a unit dummy. Create a Unit type Variable to Configure it so that users can use different Dummy unit.

Cant they just change it in the object editor? Its the model of the dummy that needs to be changed =.= other than that is the fact that they need to know what number is the index of the anim for walking or doing something else.

As for the damage, I cannot do that. It may seem that the damage dealt is 50xlevel but if a user wants to change it, then boom, the trigger dies.
That is why randatamus wanted me to create a config trigger =)

The damage part is fine already, dont need to change it
 
Level 7
Joined
Apr 18, 2010
Messages
102
@meowie
Are you kidding me?tell that in front of Mag.
He will laugh at you.

We are making this trigger so that users can easily see that constants of the spell and doest make the user scroll down and find the constants by them self,especially the beginners.

Anyways, i just added the pause detection thing, it would be helpful too =)
 
Level 3
Joined
Jun 13, 2010
Messages
43
@meowie
Are you kidding me?tell that in front of Mag.
He will laugh at you.

We are making this trigger so that users can easily see that constants of the spell and doest make the user scroll down and find the constants by them self,especially the beginners.

User friendly wise i understand. However it's kinda inefficient since it declare the function at map int if it isn't used then it just waste of memory imo but no matter.



Cant they just change it in the object editor? Its the model of the dummy that needs to be changed =.= other than that is the fact that they need to know what number is the index of the anim for walking or doing something else.

As for the damage, I cannot do that. It may seem that the damage dealt is 50xlevel but if a user wants to change it, then boom, the trigger dies.
That is why randatamus wanted me to create a config trigger =)

The damage part is fine already, dont need to change it

The reason of using variable to declare unit type is to utilize the use variation. you wouldn't want 3 different unit model use the same Dummy. it look stupid.
Secondly , Since you used unit index it's up to them solely to find the unit index. because it involve checking unit index from war3 viewer .Once again you don't expect this spell solely used on a hero with same animation index.

Yes it "may" be fine as it is now. But you just declare pointless function such as this. Once again its up to user to configure its damage function with the help of Documentation.
For the damage declare
Set SpellLevel[InfiniteSlashesMui] = (Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui])
is that a need to convert to integer? No.

Unit - Cause InfiniteSlashesCaster[InfiniteSlashesLoop] to damage InfiniteSlashesTarget[InfiniteSlashesLoop], dealing Damage[SpellLevel[InfiniteSlashesLoop]] damage of attack type Normal and damage type Normal


Like i said its pointless. why use damage[1~4[index]] when u are just use damage[index].

Set Damage[InfiniteSlashesIndex] = (50.00 x (Real((Level of Infinite Slashes for InfiniteSlashesCaster[InfiniteSlashesMui]))))

just solve it and simple for user to configure rather use Inefficient indexing.
 

Wrda

Spell Reviewer
Level 28
Joined
Nov 18, 2012
Messages
1,993
Yes captain obvious. You don't know what is configuration? facepalm. And LOL at the size of the map.

Would you like to have 20 variables for a simple spell like this? It's just a waste of time creating 2 variables for model and attachment effect and saving their path to use them once. Anyway if users want to change it, they just can do easily lol, imo.
___________
You don't know what is configuration?
 
Last edited by a moderator:
Top