Ability "Mass Shadow Strike"

REM.Shephard

New Member
Reaction score
0
Hi! I want to make an ability that can be casted with no target (like "Thunderclap" or "Warstomp) and that launchs "Shadow Strikes" to all nearby enemy units (450 range). I already made the dummy abilities (the one that has no target and the "Shadow Strikes"), but I don't know how to make it work as I want. This is what I have:

Events
Unidad - A unit Comienza a lanzar una habilidad
Conditions
(Ability being cast) Igual a Warstomp
Actions
Set Temp_Point = (Position of (Casting unit))
Grupo de unidad - Pick every unit in (Units within 450.00 of Temp_Point) and do (Actions)
Bucle: Acciones
Unidad - Create 1 Dummy for (Owner of (Casting unit)) at Temp_Point facing Vista edificio predeterminada degrees
Unidad - Add Shadow Strike to (Last created unit)
Unidad - Set level of Shadow Strike for (Last created unit) to (Level of Warstomp for (Casting unit))
Unidad - Order (Last created unit) to Elfa nocturna guardiana - Golpe de sombras (Picked unit)
Unidad - Add a 2.00 second Genérico expiration timer to (Last created unit)
Custom script: call RemoveLocation (udg_Temp_Point)


Can you tell me what am I doing wrong? Thanks in advance.
 

HydraRancher

Truth begins in lies
Reaction score
197
You want something like:

Trigger:
  • Trigger
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) is equal to Warstomp
    • Actions
      • Set TempPoint = (Position of (Triggering Unit))
      • Set TempGroup = (Units within 450.00 of TempPoint)
      • Unit Group - Pick every unit in TempGroup matching (Owner of (Matching Unit)) is an enemy of (Owner of (Triggering Unit)) equal to true and do (Actions)
        • Loop - Actions
          • Unit - Create 1 Dummy for (Owner of (Triggering Unit)) at TempPoint facing Default building facing degrees
          • Unit - Add Shadow Strike to (Last created unit)
          • Unit - Set level of Shadow strike for (Last created unit) to (Level of Warstomp for (Triggering Unit))
          • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
          • Unit - Add a 1.00 Generic expiration timer to (Last created unit)
      • Custom Script: call RemoveLocation (udg_TempPoint)
      • Custom Script: call DestroyGroup (udg_TempGroup)


To get rid of all leaks and that should work fine.

I'm not sure what you mean by "wrong".
 

REM.Shephard

New Member
Reaction score
0
I tried what you said, but it only picks the closest unit like before. I don't really know what is wrong with this trigger...
 

HydraRancher

Truth begins in lies
Reaction score
197
Have you put the Custom Script inside the loop? If so, move it outside.

EDIT:

Trigger:
  • Actions
    • Custom Script: call RemoveLocation (udg_TempPoint)
    • Custom Script: call DestroyGroup (udg_TempGroup)


These lines. Move them outside of the Pick Every Unit.
 

Chilling

New Member
Reaction score
1
@HydraRancher What is the point of the TempPoint variable? You only use it once, and you can just use the position of unit instead.
 

HydraRancher

Truth begins in lies
Reaction score
197
@HydraRancher What is the point of the TempPoint variable? You only use it once, and you can just use the position of unit instead.

Position of unit creates a memory leak. If these build up, it can seriously lag your game. So we strive to remove them. Using the set TempPoint and then using a JASS code to remove it.
 

KaerfNomekop

Swim, fishies. Swim through the veil of steel.
Reaction score
613
Why create 1 dummy for each unit? You can just have 1 dummy cast on all units at once, but the dummy mustn't have any backswing animations etc. or cooldown for the dummy ability.
 

HydraRancher

Truth begins in lies
Reaction score
197
Why create 1 dummy for each unit? You can just have 1 dummy cast on all units at once, but the dummy mustn't have any backswing animations etc. or cooldown for the dummy ability.

It generally works better, because if this is a particularly large group, of let's say, 20 units, you'll have shadow strikes random popping up in succession. But with the multiple dummies, they will all appear in unison. Also, if you order the unit to cast it on another unit whilst it is still casting, then it might interrupt its orders and end up only casting on one unit.
 

vypur85

Hibernate
Reaction score
803
Code:
Trigger
   Events
      Unit - A unit Starts the effect of an ability
   Conditions
      (Ability being cast) is equal to Warstomp
   Actions
      Set TempPoint = (Position of (Triggering Unit))
[B]      Set TempGroup = (Units within 450.00 of TempPoint matching (Owner of (Matching Unit)) is an enemy of (Owner of (Triggering Unit) Equal to True and (Matching unit) is alive Equal to True)))[/B]
      Unit Group - Pick every unit in TempGroup and do (Actions)
         Loop - Actions
            Unit - Create 1 Dummy for (Owner of (Triggering Unit)) at TempPoint facing Default building facing degrees
            Unit - Add Shadow Strike to (Last created unit)
            Unit - Set level of Shadow strike for (Last created unit) to (Level of Warstomp for (Triggering Unit))
            Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
            Unit - Add a 1.00 Generic expiration timer to (Last created unit)
      Custom Script: call RemoveLocation (udg_TempPoint)
      Custom Script: call DestroyGroup (udg_TempGroup)

> Why create 1 dummy for each unit?
Personal preference, I'd say. But single unit is always more efficient.


> but it only picks the closest unit like before
Very likely because you used 'Casting unit' instead of 'Triggering unit'. The former is known to bug in loops.
 

REM.Shephard

New Member
Reaction score
0
Thank you very much for all your answers. Each of them really help me to make the ability work. Keep on the good job!!!:)
 

Wummi

Just Relax and Smile!
Reaction score
58
Luckily for you, I happen to have the exact same spell in my map. Here's what I used (and it's been tested and it works well)

Trigger:
  • Poisonous Food
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to The Great Cheese Explosion
    • Actions
      • Set PoisonGroup = (Units within 1000.00 of (Position of (Triggering unit)) matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A structure) Equal to False) and (((Owner of (Matching unit)) is an enemy of (Owner of (Triggering unit))) Equal to True)))
      • Set PoisonInterger = (Number of units in PoisonGroup)
      • Set PoisonLevel = (Level of (Ability being cast) for (Triggering unit))
      • For each (Integer A) from 1 to PoisonInterger, do (Actions)
        • Loop - Actions
          • Unit Group - Pick every unit in PoisonGroup and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • PoisonLevel Equal to 1
                • Then - Actions
                  • Unit - Create 1 Dummy for (Triggering player) at (Position of (Triggering unit)) facing Default building facing degrees
                  • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                  • Unit - Add Poisonous Food Strike Level 1 to (Last created unit)
                  • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
                  • Custom script: call DestroyGroup(udg_PoisonGroup)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • PoisonLevel Equal to 2
                • Then - Actions
                  • Unit - Create 1 Dummy for (Triggering player) at (Position of (Triggering unit)) facing Default building facing degrees
                  • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                  • Unit - Add Poisonous Food Strike Level 2 to (Last created unit)
                  • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
                  • Custom script: call DestroyGroup(udg_PoisonGroup)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • PoisonLevel Equal to 3
                • Then - Actions
                  • Unit - Create 1 Dummy for (Triggering player) at (Position of (Triggering unit)) facing Default building facing degrees
                  • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                  • Unit - Add Poisonous Food Strike Level 3 to (Last created unit)
                  • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
                  • Custom script: call DestroyGroup(udg_PoisonGroup)
                • Else - Actions


I know I could have made it a hero ability and then set the level according to level of ability cast, but I didn't know that at the time I made it and I'm too lazy to redo the spell, so this is what I have in my map right now and it works fine.
 

skyblader

You're living only because it's illegal killing.
Reaction score
159
It generally works better, because if this is a particularly large group, of let's say, 20 units, you'll have shadow strikes random popping up in succession. But with the multiple dummies, they will all appear in unison. Also, if you order the unit to cast it on another unit whilst it is still casting, then it might interrupt its orders and end up only casting on one unit.

Actually if the dummy unit has 0 cooldown 0 casting point 0 baskswing and all, the spell will be casted 20 times in an instant. :p
 

KaerfNomekop

Swim, fishies. Swim through the veil of steel.
Reaction score
613
It really does cast 20 times almost instantly, because with no hindrances, the dummy can cast again immediately after casting, so there's no delay between one cast end the next.
 

HydraRancher

Truth begins in lies
Reaction score
197
If that's really true you can just tweak it.

Trigger:
  • Trigger
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) is equal to Warstomp
    • Actions
      • Set TempPoint = (Position of (Triggering Unit))
      • Set TempGroup = (Units within 450.00 of TempPoint)
      • Unit - Create 1 Dummy for (Owner of (Triggering Unit)) at TempPoint facing Default building facing degrees
      • Unit - Add Shadow Strike to (Last created unit)
      • Unit - Set level of Shadow strike for (Last created unit) to (Level of Warstomp for (Triggering Unit))
      • Unit - Add a 1.00 Generic expiration timer to (Last created unit)
      • Unit Group - Pick every unit in TempGroup matching (Owner of (Matching Unit)) is an enemy of (Owner of (Triggering Unit)) equal to true and do (Actions)
        • Loop - Actions
          • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
      • Custom Script: call RemoveLocation (udg_TempPoint)
      • Custom Script: call DestroyGroup (udg_TempGroup)
 

Ayanami

칼리
Reaction score
288
If that's really true you can just tweak it.

Trigger:
  • Trigger
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) is equal to Warstomp
    • Actions
      • Set TempPoint = (Position of (Triggering Unit))
      • Set TempGroup = (Units within 450.00 of TempPoint)
      • Unit - Create 1 Dummy for (Owner of (Triggering Unit)) at TempPoint facing Default building facing degrees
      • Unit - Add Shadow Strike to (Last created unit)
      • Unit - Set level of Shadow strike for (Last created unit) to (Level of Warstomp for (Triggering Unit))
      • Unit - Add a 1.00 Generic expiration timer to (Last created unit)
      • Unit Group - Pick every unit in TempGroup matching (Owner of (Matching Unit)) is an enemy of (Owner of (Triggering Unit)) equal to true and do (Actions)
        • Loop - Actions
          • Unit - Order (Last created unit) to Night Elf Warden - Shadow Strike (Picked unit)
      • Custom Script: call RemoveLocation (udg_TempPoint)
      • Custom Script: call DestroyGroup (udg_TempGroup)

For Shadow Strike, I recommend you make the Dummy's living duration a tad longer than the Shadow Strike duration. If a unit dies from Shadow Strike, it won't know who killed it, so gold won't be awarded properly.
 

REM.Shephard

New Member
Reaction score
0
Dummy must have 0 movement speed as well.

Yes, that's right. If you give the dummy unit 522 movement speed (like I did), the dummy spell will be casted 0.5 secs later. I don't know why, but I changed the movement speed to 0, and it works well now, thanks for that too ^^
 

skyblader

You're living only because it's illegal killing.
Reaction score
159
I'm thinking it's the turn rate. o.o Just make it a building and no matter where it faces, it'll cast :p
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top