• 🏆 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!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

[Trigger] Dynamic Index with deindex = stops loop early

Status
Not open for further replies.
I read this: Tutorial, visualize dynamic indexing

When the trigger runs one instance it works fine. If I disable the de-index section in the final trigger, it works fine MUI. But, that is not shutting down the loops. When I enable the deindex, it stops the 'AV Loop Fire' trigger for the second instance. I know I must be close but I can't see the end of this tunnel. Please help.

Attached test map includes 2 heroes with the spell for mui testing.

It also contains 3 other spells which use a different (my own less efficient) de-indexing system.

I read this: Tutorial, visualize dynamic indexing

and this, and I'm still lost.

  • AV Config
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • Set AV_Ability = Aeros Vex
      • Set AV_StompEfx = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
      • Set AV_RedFxCaster = Abilities\Weapons\VengeanceMissile\VengeanceMissile.mdl
      • Set AV_LightningStrike = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
      • Set AV_GroundSplatFx = Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
      • Set AV_MaxHeight = 300.00
  • AV Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to AV_Ability
    • Actions
      • Set AV_Index = (AV_Index + 1)
      • Set AV_Caster[AV_Index] = (Triggering unit)
      • Set AV_BoolMaxHi[AV_Index] = False
      • Set AV_FlyingHeight[AV_Index] = 0.00
      • Set AV_Timer[AV_Index] = 0
      • Set AV_Timer2[AV_Index] = 0
      • Unit - Pause AV_Caster[AV_Index]
      • Custom script: call SetUnitAnimationByIndex (udg_AV_Caster[udg_AV_Index], 3)
      • Unit - Add Crow Form to AV_Caster[AV_Index]
      • Unit - Remove Crow Form from AV_Caster[AV_Index]
      • Trigger - Turn on AV Wait <gen>
  • AV Wait
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AV_Loop_X) from 1 to AV_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AV_Timer[AV_Loop_X] Less than 18
            • Then - Actions
              • Set AV_Timer[AV_Loop_X] = (AV_Timer[AV_Loop_X] + 1)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_Timer[AV_Loop_X] Equal to 18
                • Then - Actions
                  • Set AV_Timer[AV_Loop_X] = 19
                  • Set AV_Loc = (Position of AV_Caster[AV_Loop_X])
                  • Special Effect - Create a special effect at AV_Loc using AV_StompEfx
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_AV_Loc)
                  • Special Effect - Create a special effect attached to the foot, left of AV_Caster[AV_Index] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Create a special effect attached to the foot, right of AV_Caster[AV_Index] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Trigger - Turn on AV Loop Ascending <gen>
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AV_Index Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
  • AV Loop Ascending
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AV_Loop_X) from 1 to AV_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AV_BoolMaxHi[AV_Loop_X] Equal to False
              • AV_Timer[AV_Loop_X] Equal to 19
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_FlyingHeight[AV_Loop_X] Less than AV_MaxHeight
                • Then - Actions
                  • Set AV_FlyingHeight[AV_Loop_X] = (AV_FlyingHeight[AV_Loop_X] + 15.00)
                  • Animation - Change AV_Caster[AV_Loop_X] flying height to AV_FlyingHeight[AV_Loop_X] at 0.00
                • Else - Actions
                  • Set AV_BoolMaxHi[AV_Loop_X] = True
                  • Animation - Change AV_Caster[AV_Loop_X]'s animation speed to 100.00% of its original speed
                  • Animation - Play AV_Caster[AV_Loop_X]'s spell animation
                  • Trigger - Turn on AV Loop Firing <gen>
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AV_Index Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions
  • AV Loop Firing
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AV_Loop_X) from 1 to AV_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AV_BoolMaxHi[AV_Loop_X] Equal to True
              • AV_Timer2[AV_Loop_X] Less than 40
            • Then - Actions
              • Game - Display to (All players) the text: ((String(AV_Timer2[AV_Loop_X])) + ((( + (String(AV_Loop_X))) + ) + (String(AV_Index))))
              • Set AV_Timer2[AV_Loop_X] = (AV_Timer2[AV_Loop_X] + 1)
              • Set AV_Loc = (Position of AV_Caster[AV_Loop_X])
              • Set AV_Angle = (Facing of AV_Caster[AV_Loop_X])
              • Set AV_Loc = (AV_Loc offset by 25.00 towards AV_Angle degrees)
              • Set AV_Offset = ((Real(AV_Timer2[AV_Loop_X])) x 20.00)
              • Set AV_LocOffset = (AV_Loc offset by AV_Offset towards AV_Angle degrees)
              • Lightning - Create a Mana Flare lightning effect from source AV_Loc to target AV_LocOffset
              • Lightning - Destroy (Last created lightning effect)
              • Set AV_X1 = (X of AV_Loc)
              • Set AV_X2 = (X of AV_LocOffset)
              • Set AV_Y1 = (Y of AV_Loc)
              • Set AV_Y2 = (Y of AV_LocOffset)
              • Custom script: set udg_AV_Z1 = GetLocationZ(udg_AV_Loc)
              • Set AV_Z1 = (AV_Z1 + 420.00)
              • Custom script: set udg_AV_Z2 = GetLocationZ(udg_AV_LocOffset)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_Timer2[AV_Loop_X] Equal to 1
                • Then - Actions
                  • Custom script: set udg_AV_LightningFx[udg_AV_Loop_X] = AddLightningEx("AFOD", true, udg_AV_X1, udg_AV_Y1, udg_AV_Z1, udg_AV_X2, udg_AV_Y2, udg_AV_Z2)
                  • Lightning - Change color of AV_LightningFx[AV_Loop_X] to (0.70 0.80 1.00) with 1.00 alpha
                • Else - Actions
              • Custom script: call MoveLightningEx(udg_AV_LightningFx[udg_AV_Loop_X], true, udg_AV_X1, udg_AV_Y1, udg_AV_Z1, udg_AV_X2, udg_AV_Y2, udg_AV_Z2)
              • Special Effect - Create a special effect attached to the hand, left of AV_Caster[AV_Loop_X] using AV_RedFxCaster
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect attached to the hand, right of AV_Caster[AV_Loop_X] using AV_RedFxCaster
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect at AV_LocOffset using AV_GroundSplatFx
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect at AV_LocOffset using AV_LightningStrike
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect attached to the origin of AV_Caster[AV_Loop_X] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call RemoveLocation(udg_AV_Loc)
              • Custom script: call RemoveLocation(udg_AV_LocOffset)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_Timer2[AV_Loop_X] Equal to 40
                • Then - Actions
                  • Set AV_Timer2[AV_Loop_X] = 41
                  • Lightning - Destroy AV_LightningFx[AV_Loop_X]
                  • Special Effect - Destroy AV_Fx[AV_Loop_X]
                  • Special Effect - Destroy AV_Fx2[AV_Loop_X]
                  • Trigger - Turn on AV Loop Descending <gen>
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AV_Index Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
  • AV Loop Descending
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AV_Loop_X) from 1 to AV_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AV_Timer2[AV_Loop_X] Equal to 41
              • AV_FlyingHeight[AV_Loop_X] Greater than 4.00
            • Then - Actions
              • Set AV_FlyingHeight[AV_Loop_X] = (AV_FlyingHeight[AV_Loop_X] - 10.00)
              • Animation - Change AV_Caster[AV_Loop_X] flying height to AV_FlyingHeight[AV_Loop_X] at 0.00
            • Else - Actions
              • Unit - Unpause AV_Caster[AV_Loop_X]
              • Animation - Change AV_Caster[AV_Loop_X]'s animation speed to 100.00% of its original speed
              • Animation - Reset AV_Caster[AV_Loop_X]'s animation
              • ------If I disable this deindex then the spell works MUI no problems----
              • Set AV_Caster[AV_Loop_X] = AV_Caster[AV_Index]
              • Set AV_Timer[AV_Loop_X] = AV_Timer[AV_Index]
              • Set AV_Timer2[AV_Loop_X] = AV_Timer2[AV_Index]
              • Set AV_BoolMaxHi[AV_Loop_X] = AV_BoolMaxHi[AV_Index]
              • Set AV_LightningFx[AV_Loop_X] = AV_LightningFx[AV_Index]
              • Set AV_FlyingHeight[AV_Loop_X] = AV_FlyingHeight[AV_Index]
              • Set AV_Index = (AV_Index - 1)
              • Set AV_Loop_X = (AV_Loop_X - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
 

Attachments

  • Noob Spammer Spellpack v0.01.w3x
    80.6 KB · Views: 50
Level 37
Joined
Jul 22, 2015
Messages
3,485
With this form of indexing, it's almost impossible for you to actually reference the instance number you want since the integrity of cast order is not kept. You would have to loop through all instances to find the one you want.

I advice you to use ONE loop that has different stages of the spell so that they all turn off + deindex at the same time.
 
Well, that seems to work though I can't adjust the speed of each section individually. Also, because it runs a bit faster, It's harder to tell that it is MUI, but it should be though, right?
  • AV Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AV_Loop_X) from 1 to AV_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AV_Timer[AV_Loop_X] Less than 18
            • Then - Actions
              • Set AV_Timer[AV_Loop_X] = (AV_Timer[AV_Loop_X] + 1)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AV_Timer[AV_Loop_X] Equal to 18
                • Then - Actions
                  • Set AV_Timer[AV_Loop_X] = 19
                  • Set AV_Loc = (Position of AV_Caster[AV_Loop_X])
                  • Special Effect - Create a special effect at AV_Loc using AV_StompEfx
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_AV_Loc)
                  • Special Effect - Create a special effect attached to the foot, left of AV_Caster[AV_Index] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Create a special effect attached to the foot, right of AV_Caster[AV_Index] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AV_BoolMaxHi[AV_Loop_X] Equal to False
                      • AV_Timer[AV_Loop_X] Equal to 19
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • AV_FlyingHeight[AV_Loop_X] Less than AV_MaxHeight
                        • Then - Actions
                          • Set AV_FlyingHeight[AV_Loop_X] = (AV_FlyingHeight[AV_Loop_X] + 15.00)
                          • Animation - Change AV_Caster[AV_Loop_X] flying height to AV_FlyingHeight[AV_Loop_X] at 0.00
                        • Else - Actions
                          • Set AV_BoolMaxHi[AV_Loop_X] = True
                          • Animation - Change AV_Caster[AV_Loop_X]'s animation speed to 100.00% of its original speed
                          • Animation - Play AV_Caster[AV_Loop_X]'s spell animation
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • AV_BoolMaxHi[AV_Loop_X] Equal to True
                          • AV_Timer2[AV_Loop_X] Less than 40
                        • Then - Actions
                          • Set AV_Timer2[AV_Loop_X] = (AV_Timer2[AV_Loop_X] + 1)
                          • Set AV_Loc = (Position of AV_Caster[AV_Loop_X])
                          • Set AV_Angle = (Facing of AV_Caster[AV_Loop_X])
                          • Set AV_Loc = (AV_Loc offset by 25.00 towards AV_Angle degrees)
                          • Set AV_Offset = ((Real(AV_Timer2[AV_Loop_X])) x 20.00)
                          • Set AV_LocOffset = (AV_Loc offset by AV_Offset towards AV_Angle degrees)
                          • Lightning - Create a Mana Flare lightning effect from source AV_Loc to target AV_LocOffset
                          • Lightning - Destroy (Last created lightning effect)
                          • Set AV_X1 = (X of AV_Loc)
                          • Set AV_X2 = (X of AV_LocOffset)
                          • Set AV_Y1 = (Y of AV_Loc)
                          • Set AV_Y2 = (Y of AV_LocOffset)
                          • Custom script: set udg_AV_Z1 = GetLocationZ(udg_AV_Loc)
                          • Set AV_Z1 = (AV_Z1 + 420.00)
                          • Custom script: set udg_AV_Z2 = GetLocationZ(udg_AV_LocOffset)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • AV_Timer2[AV_Loop_X] Equal to 1
                            • Then - Actions
                              • Custom script: set udg_AV_LightningFx[udg_AV_Loop_X] = AddLightningEx("AFOD", true, udg_AV_X1, udg_AV_Y1, udg_AV_Z1, udg_AV_X2, udg_AV_Y2, udg_AV_Z2)
                              • Lightning - Change color of AV_LightningFx[AV_Loop_X] to (0.70 0.80 1.00) with 1.00 alpha
                            • Else - Actions
                          • Custom script: call MoveLightningEx(udg_AV_LightningFx[udg_AV_Loop_X], true, udg_AV_X1, udg_AV_Y1, udg_AV_Z1, udg_AV_X2, udg_AV_Y2, udg_AV_Z2)
                          • Special Effect - Create a special effect attached to the hand, left of AV_Caster[AV_Loop_X] using AV_RedFxCaster
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect attached to the hand, right of AV_Caster[AV_Loop_X] using AV_RedFxCaster
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect at AV_LocOffset using AV_GroundSplatFx
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect at AV_LocOffset using AV_LightningStrike
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect attached to the origin of AV_Caster[AV_Loop_X] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • Custom script: call RemoveLocation(udg_AV_Loc)
                          • Custom script: call RemoveLocation(udg_AV_LocOffset)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • AV_Timer2[AV_Loop_X] Equal to 40
                            • Then - Actions
                              • Set AV_Timer2[AV_Loop_X] = 41
                              • Lightning - Destroy AV_LightningFx[AV_Loop_X]
                              • Special Effect - Destroy AV_Fx[AV_Loop_X]
                              • Special Effect - Destroy AV_Fx2[AV_Loop_X]
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • AV_Timer2[AV_Loop_X] Equal to 41
                                  • AV_FlyingHeight[AV_Loop_X] Greater than 4.00
                                • Then - Actions
                                  • Set AV_FlyingHeight[AV_Loop_X] = (AV_FlyingHeight[AV_Loop_X] - 10.00)
                                  • Animation - Change AV_Caster[AV_Loop_X] flying height to AV_FlyingHeight[AV_Loop_X] at 0.00
                                • Else - Actions
                                  • Unit - Unpause AV_Caster[AV_Loop_X]
                                  • Animation - Change AV_Caster[AV_Loop_X]'s animation speed to 100.00% of its original speed
                                  • Animation - Reset AV_Caster[AV_Loop_X]'s animation
                                  • Set AV_Caster[AV_Loop_X] = AV_Caster[AV_Index]
                                  • Set AV_Timer[AV_Loop_X] = AV_Timer[AV_Index]
                                  • Set AV_Timer2[AV_Loop_X] = AV_Timer2[AV_Index]
                                  • Set AV_BoolMaxHi[AV_Loop_X] = AV_BoolMaxHi[AV_Index]
                                  • Set AV_LightningFx[AV_Loop_X] = AV_LightningFx[AV_Index]
                                  • Set AV_FlyingHeight[AV_Loop_X] = AV_FlyingHeight[AV_Index]
                                  • Set AV_Index = (AV_Index - 1)
                                  • Set AV_Loop_X = (AV_Loop_X - 1)
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AV_Index Equal to 0
                                    • Then - Actions
                                      • Trigger - Turn off (This trigger)
                                    • Else - Actions
 
The timers only affect duration. I mean the speed of the iterations. For example, I had the Fire Loop set at 0.07. Having separate triggers meant that I could adjust the periodic interval separately. But, your way is much better, especially since it works! I also slowed my game setting to view it in slow motion and it does work and with some slight adjustments it looks really nice too.
 
Status
Not open for further replies.
Top