[Trigger] Tips for improving codes

Level 9
Joined
Jul 7, 2011
Messages
282
I recently got back into playing Warcraft 3. I'm creating a map to learn and remember World Editor.
Map has a Paladin hero and Boss Blood Mage.

Boss Blood Mage uses Banish + Flamestrike Combo. But sometimes he desynchronizes his combo. Here is the code:

  • Blood Mage
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Unit-type of (Attacking unit)) Equal to Blood Mage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability Cooldown of (Attacking unit) for ability Golpe Flamejante , Level: 1.) Equal to 0.00
          • (Ability Cooldown of (Attacking unit) for ability Banir , Level: 1.) Equal to 0.00
          • (Boss is Undead) Not equal to True
        • Then - Actions
          • Unit - Order Boss to Human Blood Mage - Banish Hero
          • Wait until ((Ability Cooldown Remaining of Boss for ability Banir ..) Not equal to 0.00), checking every 1.00 seconds
          • Unit - Order Boss to Human Blood Mage - Flame Strike (Position of Hero)
        • Else - Actions
This also happens in the second phase. Sometimes he cancels Flamestrike to use Drain Life.
  • Blood Mage Ghost Form
    • Events
      • Time - Every 11.00 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Ability Cooldown Remaining of Boss for ability Golpe Flamejante ..) Equal to 0.00
              • (Boss is Undead) Equal to True
              • (Unit-type of Boss) Equal to Blood Mage
        • Then - Actions
          • Unit - Order Boss to Human Blood Mage - Banish Hero
          • Wait until ((Ability Cooldown Remaining of Boss for ability Banir ..) Not equal to 0.00), checking every 1.00 seconds
          • Unit - Order Boss to Human Blood Mage - Flame Strike (Position of Hero)
          • Wait until ((Ability Cooldown Remaining of Boss for ability Golpe Flamejante ..) Not equal to 0.00), checking every 2.00 seconds
          • Unit - Order Boss to Neutral Dark Ranger - Life Drain Fenix
        • Else - Actions
I also want to learn more about regions. Moving units x distance from a reference point without leaving an area (Boss Arena).
Using special effects with short lifespans. I don't trust "Last Created" and have had problems with it in the past.
Do still need to use dummies to cast abilities (increase effects of an ability) in Reforged?
 
Level 29
Joined
Sep 26, 2009
Messages
2,594
Well, first off, I believe your first trigger never issues any orders to begin with :)

Your first trigger (Blood Mage) has condition like this:
"(Ability Cooldown of some_unit for ability some_ability , Level: 1.) Equal to 0.00"
What you are checking is the cooldown set for the ability in Object Editor, not the remaining cooldown after ability has been cast.
As such, your "Then - Actions" block ever executes (of course, assuming the ability has cooldown configured to begin with), so what you may have been observing was just unit's generic AI casting various spells.

In second trigger you correctly check remaining cooldown, so that is not an issue. I assume the Boss Is Undead check is correctly set? Just to make sure since your first trigger checks (Boss Is Undead) isn't True, while second trigger checks that (Boss Is Undead) is True.

Anyway, the main issue - cancelling cast - is because you are using those "Wait until (ability cooldown > 0.00)" actions.
Ability cooldown starts when units starts the effect of an ability, not when it finishes.
So you cast Flame Strike => spell effect AND cooldown starts => Wait until action detects that => Boss is issued order to cast Life Drain => Flame Strike has effectively been cancelled :)

Warcraft 3 is event driven, so I think the easiest way to achieve what you want is to break this down into multiple triggers, for example:
  • Trigger #1 periodically checks if remaining cooldown on Banish and Flame Strike is 0.00. If so, it orders Blood Mage to cast Banish
  • Trigger #2 detects when Banish cast has finished and orders Blood Mage to cast Flame Strike
  • Trigger #3 detects when Flame Strike cast has finished and orders Blood Mage to cast Drain Life

Triggers #2 and #3 can even be merged together when using state-machine like approach to determine which ability (Flame Strike or Drain Life) to cast.

Edit: Here is example of what I meant
  • Periodic Check
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
      • (Ability Cooldown Remaining of Boss for ability Banish..) Equal to 0.00
      • (Ability Cooldown Remaining of Boss for ability Flame Strike..) Equal to 0.00
    • Actions
      • Set VariableSet BossCastState = 1
      • Unit - Order Boss to Human Blood Mage - Banish Hero
  • Boss Finishes Cast
    • Events
      • Unit - A unit Finishes casting an ability
    • Conditions
      • (Triggering unit) Equal to Boss
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BossCastState Equal to 1
          • (Ability being cast) Equal to Banish
        • Then - Actions
          • Set VariableSet BossCastState = 2
          • Unit - Order Boss to Human Blood Mage - Flame Strike (Position of Hero)
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BossCastState Equal to 2
              • (Ability being cast) Equal to Flame Strike
            • Then - Actions
              • Set VariableSet BossCastState = 3
              • Unit - Order Boss to Human Blood Mage - Siphon Mana Hero
            • Else - Actions
I have used the "Finishes casting an ability" event so that he does the entire combo under normal circumstances, but you can break it by for example stunning him.
 
Last edited:
Level 9
Joined
Jul 7, 2011
Messages
282
This helped a lot.

Is there a boolean to check when a unit is channeling an ability? Or will I need to create several Triggers to check when it is channeling via Event, when stun or silencer interrupts Flamestrike channeling?
  • Blood Mage Drain
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Percentage life of Boss) Less than or equal to 50.00
      • (Unit-type of (Attacking unit)) Equal to Blood Mage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability Cooldown Remaining of Boss for ability Drenar Vida ..) Equal to 0.00
          • BloodMageCastState Not equal to 2
        • Then - Actions
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Order Boss to Human Blood Mage - Banish Boss
          • Sound - Play BloodElfMageWhat1<gen> at 100.00% volume, located at (Position of Boss) with Z offset 0.00
          • Wait 1.00 seconds
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Cause Hero to damage Boss, dealing 35.00 damage of attack type Spells and damage type Magic
          • Unit - Order Boss to Human Blood Mage - Banish Hero
          • Wait 0.50 seconds
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Hero has buff Banir) Equal to True
            • Then - Actions
              • Unit - For Unit Boss, end cooldown of ability Drenar Vida
              • Unit - Order Boss to Neutral Dark Ranger - Life Drain Hero
              • Unit - For Unit Boss, start cooldown of ability Banir " over "(Cooldown of Banir , Level: 1.) seconds.
            • Else - Actions
        • Else - Actions
I don't want this Trigger to cancel Flamestrike if the unit has started channeling.
 
Level 29
Joined
Sep 26, 2009
Messages
2,594
I don't think there is a boolean check that would tell you if unit is channeling or not.
I can think of two options on how to handle it:
1) track casting via generic start/stop cast events
2) track casting via current order

ad 1
You just detect any start and stop of cast done by the boss unit and update related IsCasting boolean variable, e.g.
  • Starts Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Triggering unit) Equal to Boss
    • Actions
      • Set VariableSet IsCasting = True
  • Stops Cast
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • (Triggering unit) Equal to Boss
    • Actions
      • Set VariableSet IsCasting = False

ad 2
There are just a few orders to check out to determine if unit is not casting anything. Any order beside the few means unit is casting something.
  • Actions
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • Or - Any (Conditions) are true
          • Conditions
            • (Current order of Boss) Equal to (Order(attack))
            • (Current order of Boss) Equal to (Order(move))
            • (Current order of Boss) Equal to (Order(patrol))
            • (Current order of Boss) Equal to (Order(<Empty String>))
      • Then - Actions
        • Set VariableSet IsCasting = False
      • Else - Actions
        • Set VariableSet IsCasting = True
---
I think checking order may be better solution overall, because the first option does not take into account that unit has to run into range of the target before it starts the cast. So you could order Boss to cast flame strike at some remote location, Boss begins running towards that location to get within range and while he is running option #1 would still say he is not casting while option #2 would say he is casting.
When it comes to AI, it might make more sense to go with option #2 that says he is already casting.
 
Level 9
Joined
Jul 7, 2011
Messages
282
I found a solution to not try to use Flame Strike when the Life Drain Combo triggers. Which is to simply deactivate the Trigger that orders the Flame Strike and activate it again only when the Trigger orders the Life Drain. There are no more combo interruptions due to unwanted orders, except for the Boss's IDLE that randomly happens and breaks it completely. If use a Trigger to order when he is standing still, it breaks other order triggers.

Take the opportunity to show the work in progress in a video:
 

Attachments

  • Warcraft III 2025-04-05 07-05-03.mp4
    608.6 MB
Level 9
Joined
Jul 7, 2011
Messages
282
I found out what was causing the Boss to go IDLE and made a Trigger to get out of it.
  • Unstuck
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Current order of Boss) Equal to (Order(banish))
          • (Unit-type of Boss) Equal to Blood Mage
          • Boss_IDLE_Check Not equal to 5
        • Then - Actions
          • Set VariableSet Boss_IDLE_Check = (Boss_IDLE_Check + 1)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Boss_IDLE_Check Equal to 5
        • Then - Actions
          • Unit - Order Boss to Stop.
          • Set VariableSet Boss_IDLE_Check = 0
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Current order of Boss) Not equal to (Order(banish))
        • Then - Actions
          • Set VariableSet Boss_IDLE_Check = 0
        • Else - Actions
But I still haven't figured out why Phoenix doesn't get the Black Arrow buff needed to summon skeletons.

Take the opportunity to share all codes except for the imported Shockwave.

  • Fenix Imolation
    • Events
      • Time - Every 15.00 seconds of game time
    • Conditions
    • Actions
      • Unit - Set mana of Fenix to 100.00%
      • Unit - Order Fenix to Night Elf Demon Hunter - Activate Immolation.
      • Unit - Order Fenix to Move To (Center of Fenix_Destino)
  • Heroi Pega Ovo da Fenix
    • Events
      • Unit - A unit Acquires an item
    • Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Hero manipulating item) Equal to Hero
          • (Item-type of (Item being manipulated)) Equal to Ovo da Fenix
    • Actions
      • Trigger - Turn off (This trigger)
      • Unit - Kill Boss
      • Wait 0.50 seconds
      • Unit - Remove Boss from the game
      • Set VariableSet Boss = No unit
      • Wait 5.00 seconds
      • Unit - Move Hero instantly to (Player 1 (Red) start location)
  • Fenix Die
    • Events
      • Unit - A unit Dies
    • Conditions
      • Fenix Equal to (Dying unit)
    • Actions
      • Item - Create Ovo da Fenix at (Position of (Dying unit))
  • Blood Mage Ghost Form HP
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • And - All (Conditions) are true
        • Conditions
          • ((Damage Target) is Undead) Equal to True
          • (Unit-type of (Damage Target)) Equal to Blood Mage
    • Actions
      • Event Response - Set Damage of Unit Damaged Event to 0.00
  • Blood Mage Back
    • Events
      • Time - Every 5.00 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Percentage life of Boss) Greater than 99.00
          • (Boss is Undead) Equal to True
        • Then - Actions
          • Unit - Hide Boss
          • Unit - Create 1 Blood Mage for Player 2 (Blue) at (Position of Boss) facing Default building facing degrees
          • Unit - Remove Boss from the game
          • Set VariableSet Boss = (Last created unit)
          • Unit - Remove Fenix from the game
          • Trigger - Turn on Blood Mage Mana Drain<gen>
          • Trigger - Turn on Blood Mage Drain<gen>
          • Trigger - Turn off Blood Mage Ghost Form<gen>
          • Trigger - Turn off Blood Mage Back<gen>
        • Else - Actions
  • Fenix Movendo
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • (Damage Target) Equal to Fenix
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Fenix Noroeste<gen> contains Fenix) Equal to True
        • Then - Actions
          • Unit - Order Fenix to Move To (Center of Fenix Nordeste<gen>)
          • Set VariableSet Fenix_Destino = Fenix Nordeste<gen>
        • Else - Actions
          • If ((Current order of Fenix) Not equal to (Order(move))) then do (Unit - Order Fenix to Move To (Center of Fenix Noroeste<gen>)) else do (Do nothing)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Fenix Nordeste<gen> contains Fenix) Equal to True
        • Then - Actions
          • Unit - Order Fenix to Move To (Center of Fenix Sudeste<gen>)
          • Set VariableSet Fenix_Destino = Fenix Sudeste<gen>
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Fenix Sudeste<gen> contains Fenix) Equal to True
        • Then - Actions
          • Unit - Order Fenix to Move To (Center of Fenix Sudoeste<gen>)
          • Set VariableSet Fenix_Destino = Fenix Sudoeste<gen>
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Fenix Sudoeste<gen> contains Fenix) Equal to True
        • Then - Actions
          • Unit - Order Fenix to Move To (Center of Fenix Noroeste<gen>)
          • Set VariableSet Fenix_Destino = Fenix Noroeste<gen>
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Damage source) Equal to Boss
        • Then - Actions
          • Wait 1.50 seconds
          • Unit - Set life of Fenix to ((Life of Fenix) + ((Damage taken) + 5.00))
        • Else - Actions
  • Blood Mage Ghost Form
    • Events
      • Time - Every 11.00 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • BloodMageCastState Equal to 1
              • (Boss is Undead) Equal to True
              • (Unit-type of Boss) Equal to Blood Mage
        • Then - Actions
          • Unit - Order Boss to Human Blood Mage - Banish Hero
        • Else - Actions
          • Set VariableSet BloodMageCastState = 1
  • Blood Mage Fase 2
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Dying unit) is Undead) Not equal to True
      • (Unit-type of (Dying unit)) Equal to Blood Mage
    • Actions
      • Trigger - Turn off Blood Mage Drain<gen>
      • Trigger - Turn off Blood Mage Mana Drain<gen>
      • Trigger - Turn on Blood Mage Ghost Form<gen>
      • Trigger - Turn on Blood Mage Back<gen>
      • Trigger - Turn on Blood Mage Finishes Cast<gen>
      • Trigger - Turn on Fenix Imolation<gen>
      • Unit - Explode (Dying unit).
      • Unit - Create 1 Blood Mage for Player 2 (Blue) at (Position of (Dying unit)) facing Default building facing degrees
      • Set VariableSet Boss = (Last created unit)
      • Unit - Increase level of Drenar Vida for Boss
      • Unit - Add classification of Undead to Boss
      • Unit - Add Etéreo to Boss
      • Unit - Remove Sifonar Mana from Boss
      • Unit - Set life of Boss to 1.00
      • Wait 5.00 seconds
      • Unit - Order Boss to Human Archmage - Summon Water Elemental.
      • Wait 0.50 seconds
      • Set VariableSet Fenix = (Random unit from (Units of type Fênix))
      • Unit - Grant shared vision of Fenix to Player 2 (Blue)
      • Unit - Change ownership of Fenix to Player 3 (Teal) and Retain color
      • Unit - Order Fenix to Move To (Center of Fenix Noroeste<gen>)
      • Unit - Order Boss to Night Elf Druid Of The Talon - Faerie Fire Fenix
      • Set VariableSet BloodMageCastState = 1
  • Blood Mage Mana Drain
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Percentage mana of Boss) Less than or equal to 15.00
      • (Unit-type of (Attacking unit)) Equal to Blood Mage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability Cooldown Remaining of Boss for ability Sifonar Mana ..) Equal to 0.00
          • BloodMageCastState Not equal to 2
          • (Current order of Boss) Not equal to (Order(flamestrike))
        • Then - Actions
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Order Boss to Human Blood Mage - Banish Boss
          • Sound - Play BloodElfMageWhat1<gen> at 100.00% volume, located at (Position of Boss) with Z offset 0.00
          • Wait 1.00 seconds
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Order Boss to Human Blood Mage - Banish Hero
          • Unit - Cause Hero to damage Boss, dealing 35.00 damage of attack type Spells and damage type Magic
          • Wait 0.50 seconds
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Hero has buff Banir) Equal to True
            • Then - Actions
              • Unit - Order Boss to Human Blood Mage - Siphon Mana Hero
              • Unit - For Unit Boss, start cooldown of ability Banir " over "(Cooldown of Banir , Level: 1.) seconds.
            • Else - Actions
        • Else - Actions
  • Blood Mage
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Unit-type of (Attacking unit)) Equal to Blood Mage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BloodMageCastState Equal to 1
          • (Boss is Undead) Not equal to True
        • Then - Actions
          • Unit - Order Boss to Human Blood Mage - Banish Hero
        • Else - Actions
  • Blood Mage Drain
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • (Percentage life of Boss) Less than or equal to 50.00
      • (Unit-type of (Attacking unit)) Equal to Blood Mage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability Cooldown Remaining of Boss for ability Drenar Vida ..) Equal to 0.00
          • BloodMageCastState Not equal to 2
          • IsCasting Equal to False
        • Then - Actions
          • Trigger - Turn off Blood Mage Finishes Cast<gen>
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Order Boss to Human Blood Mage - Banish Boss
          • Sound - Play BloodElfMageWhat1<gen> at 100.00% volume, located at (Position of Boss) with Z offset 0.00
          • Wait 1.00 seconds
          • Unit - For Unit Boss, end cooldown of ability Banir
          • Unit - Cause Hero to damage Boss, dealing 35.00 damage of attack type Spells and damage type Magic
          • Unit - Order Boss to Human Blood Mage - Banish Hero
          • Wait 0.50 seconds
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Hero has buff Banir) Equal to True
              • IsCasting Equal to False
            • Then - Actions
              • Unit - For Unit Boss, end cooldown of ability Drenar Vida
              • Unit - Order Boss to Neutral Dark Ranger - Life Drain Hero
              • Unit - For Unit Boss, start cooldown of ability Banir " over "(Cooldown of Banir , Level: 1.) seconds.
              • Trigger - Turn on Blood Mage Finishes Cast<gen>
              • Set VariableSet BloodMageCastState = 1
            • Else - Actions
        • Else - Actions
  • Blood Mage Finishes Cast
    • Events
      • Unit - A unit Finishes casting an ability
    • Conditions
      • (Casting unit) Equal to Boss
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BloodMageCastState Equal to 1
          • (Ability being cast) Equal to Banir
        • Then - Actions
          • Set VariableSet BloodMageCastState = 2
          • Unit - Order Boss to Human Blood Mage - Flame Strike (Position of Hero)
          • If ((Boss is Undead) Not equal to True) then do (Set VariableSet BloodMageCastState = 1) else do (Do nothing)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Golpe Flamejante
          • BloodMageCastState Equal to 2
          • ((Casting unit) is Undead) Equal to True
        • Then - Actions
          • Unit - Order Boss to Neutral Dark Ranger - Life Drain Fenix
          • Set VariableSet BloodMageCastState = 1
        • Else - Actions
  • Check IsCasting
    • Events
      • Unit - A unit Begins channeling an ability
    • Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Golpe Flamejante
          • (Casting unit) Equal to Boss
    • Actions
      • Set VariableSet IsCasting = True
  • Cancel
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • And - All (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Golpe Flamejante
          • (Casting unit) Equal to Boss
    • Actions
      • Set VariableSet IsCasting = False
  • Entrando
    • Events
      • Unit - A unit enters Boss Circle<gen>
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Hero level of (Entering unit)) Greater than or equal to 5
        • Then - Actions
          • Unit - Move (Entering unit) instantly to (Center of Boss Arena<gen>)
          • Trigger - Turn on Boss<gen>
        • Else - Actions
          • Game - Display to Player Group - Player 1 (Red) the text: Herói precisa pelo...
  • Boss
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • -------- Boss 1 --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Boss_Arena Equal to 1
        • Then - Actions
          • Unit - Create 1 Blood Mage for Player 2 (Blue) at (Random point in Boss Arena<gen>) facing Default building facing degrees
          • Set VariableSet Boss = (Last created unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Unit: Hero's Weapon Real Field: WESTRING_UNITWEAPONRF_ATTACKRANGE at Index:1) Greater than or equal to 300.00
            • Then - Actions
              • Ability - Set Ability: (Unit: Boss's Ability with Ability Code: Drenar Vida )'s Real Level Field: Cast Range ('aran') of Level: 1 to ((Ability: (Unit: Boss's Ability with Ability Code: Drenar Vida )'s Real Level Field Cast Range ('aran'), of Level: 1) + 200.00)
              • Ability - Set Ability: (Unit: Boss's Ability with Ability Code: Sifonar Mana )'s Real Level Field: Cast Range ('aran') of Level: 1 to ((Ability: (Unit: Boss's Ability with Ability Code: Sifonar Mana )'s Real Level Field Cast Range ('aran'), of Level: 1) + 200.00)
            • Else - Actions
        • Else - Actions
  • Retribution
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • (Unit-type of (Damage Target)) Equal to Paladino
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Retribuição for (Damage Target)) Equal to 1
        • Then - Actions
          • Unit - Cause (Damage Target) to damage (Damage source), dealing ((Damage taken) / 10.00) damage of attack type Chaos and damage type Normal
          • Special Effect - Create a special effect attached to the overhead of (Damage source) using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
          • Wait 0.50 seconds
          • Special Effect - Destroy (Last created special effect)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Retribuição for (Damage Target)) Equal to 2
        • Then - Actions
          • Unit - Cause (Damage Target) to damage (Damage source), dealing ((Damage taken) / 5.00) damage of attack type Chaos and damage type Normal
          • Special Effect - Create a special effect attached to the overhead of (Damage source) using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
          • Wait 0.50 seconds
          • Special Effect - Destroy (Last created special effect)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Retribuição for (Damage Target)) Equal to 3
        • Then - Actions
          • Unit - Cause (Damage Target) to damage (Damage source), dealing (30.00 x ((Damage taken) / 100.00)) damage of attack type Chaos and damage type Normal
          • Special Effect - Create a special effect attached to the overhead of (Damage source) using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
          • Wait 0.50 seconds
          • Special Effect - Destroy (Last created special effect)
        • Else - Actions
  • ID
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • ((Damage Target) has buff Intervenção Divina ) Equal to True
          • ((Damage source) has buff Intervenção Divina ) Equal to True
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Damage taken) Greater than or equal to (Life of (Damage Target))
          • ((Damage Target) has buff Intervenção Divina ) Equal to True
        • Then - Actions
          • Event Response - Set Damage of Unit Damaged Event to ((Life of (Damage Target)) - 1.00)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Damage source) has buff Intervenção Divina ) Equal to True
        • Then - Actions
          • Event Response - Set Attack Type of Unit Damaged Event to Chaos
        • Else - Actions
  • ID Auto Active
    • Events
      • Unit - A unit Recebe dano
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Damage taken) Greater than or equal to (Life of (Damage Target))
          • (Ability Cooldown Remaining of (Damage Target) for ability Intervenção Divina ..) Equal to 0.00
          • (Level of Intervenção Divina for (Damage Target)) Equal to 1
        • Then - Actions
          • Event Response - Set Damage of Unit Damaged Event to ((Life of (Damage Target)) - 1.00)
          • Unit - Order (Damage Target) to Night Elf Druid Of The Claw - Roar.
        • Else - Actions
  • Dark Arrow Auto Cast
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • ((Attacked unit) has buff Flecha Negra) Equal to True
    • Actions
      • Set VariableSet DarkArrowChance = (Random integer number between 0 and 100)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DarkArrowChance Less than or equal to 40
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of Flecha Negra for (Attacking unit)) Equal to 1
            • Then - Actions
              • Unit - Create 1 Lacaio Sombrio Inferior for (Owner of (Attacking unit)) at ((Position of (Attacked unit)) offset by 100.00 towards 0.00 degrees.) facing Default building facing degrees
              • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Level of Flecha Negra for (Attacking unit)) Equal to 2
                • Then - Actions
                  • Unit - Create 1 Lacaio Sombrio for (Owner of (Attacking unit)) at ((Position of (Attacked unit)) offset by 100.00 towards 0.00 degrees.) facing Default building facing degrees
                  • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Level of Flecha Negra for (Attacking unit)) Equal to 3
                    • Then - Actions
                      • Unit - Create 1 Grande Lacaio Sombrio for (Owner of (Attacking unit)) at ((Position of (Attacked unit)) offset by 100.00 towards 0.00 degrees.) facing Default building facing degrees
                      • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
                    • Else - Actions
        • Else - Actions
  • Dark Arrow
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Flecha Negra
    • Actions
      • Set VariableSet DarkArrowChance = (Random integer number between 0 and 100)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DarkArrowChance Less than or equal to 40
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of (Ability being cast) for (Casting unit)) Equal to 1
            • Then - Actions
              • Unit - Create 1 Lacaio Sombrio Inferior for (Owner of (Casting unit)) at (Position of (Target unit of ability being cast)) facing Default building facing degrees
              • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Level of (Ability being cast) for (Casting unit)) Equal to 2
                • Then - Actions
                  • Unit - Create 1 Lacaio Sombrio for (Owner of (Casting unit)) at (Position of (Target unit of ability being cast)) facing Default building facing degrees
                  • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Level of (Ability being cast) for (Casting unit)) Equal to 3
                    • Then - Actions
                      • Unit - Create 1 Grande Lacaio Sombrio for (Owner of (Casting unit)) at (Position of (Target unit of ability being cast)) facing Default building facing degrees
                      • Unit - Add a 8.00 second Raise Dead expiration timer to (Last created unit)
                    • Else - Actions
        • Else - Actions
  • FV Hero
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • ((Damage source) has buff Frenesi Vampirico ) Equal to True
      • ((Damage source) is A Hero) Equal to True
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for (Damage source)) Equal to 1
        • Then - Actions
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((30.00 x (Damage taken)) / 100.00))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for (Damage source)) Equal to 2
        • Then - Actions
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((40.00 x (Damage taken)) / 100.00))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for (Damage source)) Equal to 3
        • Then - Actions
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((50.00 x (Damage taken)) / 100.00))
        • Else - Actions
  • FV Summon
    • Events
      • Unit - A unit Recebe dano
    • Conditions
      • ((Damage source) has buff Frenesi Vampirico ) Equal to True
      • ((Damage source) is Summoned) Equal to True
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for Hero) Equal to 1
        • Then - Actions
          • Unit - Set mana of Hero to ((Mana of Hero) + 25.00)
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((30.00 x (Damage taken)) / 100.00))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for Hero) Equal to 2
        • Then - Actions
          • Unit - Set mana of Hero to ((Mana of Hero) + 50.00)
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((40.00 x (Damage taken)) / 100.00))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of Frenesi Vampirico for Hero) Equal to 3
        • Then - Actions
          • Unit - Set mana of Hero to ((Mana of Hero) + 75.00)
          • Unit - Set life of (Damage source) to ((Life of (Damage source)) + ((50.00 x (Damage taken)) / 100.00))
        • Else - Actions
  • FV Summon Duration
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Frenesi Vampirico
      • ((Target unit of ability being cast) is Summoned) Equal to True
    • Actions
      • Unit - Pause the expiration timer for (Target unit of ability being cast).
      • Set VariableSet Skeleton_with_FV = (Target unit of ability being cast)
      • Wait 20.00 seconds
      • Unit - Unpause the expiration timer for Skeleton_with_FV.
  • Clock of Shadow
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Clock of Shadow (New)
    • Actions
      • Set VariableSet Clock_of_Shadow_Unit = (Casting unit)
      • Special Effect - Create a special effect attached to the chest of Clock_of_Shadow_Unit using Abilities\Weapons\SludgeMissile\SludgeMissile.mdl
      • Set VariableSet Clock_of_Shadow_SE = (Last created special effect)
      • Special Effect - Set Color of Clock_of_Shadow_SE to r: 70, g: 6, b: 120
      • Special Effect - Set Color of Clock_of_Shadow_SE to color of Player 1 (Red)
      • Special Effect - Set Time of Clock_of_Shadow_SE to 10.00
      • For each (Integer A) from 1 to 40, do (Actions)
        • Loop - Actions
          • Wait 0.20 seconds
          • Unit - Remove Negative buffs from Clock_of_Shadow_Unit
      • Unit - Add Clock of Shadow Evasão to Clock_of_Shadow_Unit
      • Unit - Add Clock of Shadow Redução de Dano Mágico to Clock_of_Shadow_Unit
      • Unit - For Clock_of_Shadow_Unit, Ability Clock of Shadow Evasão, Hide ability: True
      • Unit - For Clock_of_Shadow_Unit, Ability Clock of Shadow Redução de Dano Mágico, Hide ability: True
      • Wait 10.00 seconds
      • Special Effect - Destroy Clock_of_Shadow_SE
      • Unit - Remove Clock of Shadow Evasão from Clock_of_Shadow_Unit
      • Unit - Remove Clock of Shadow Redução de Dano Mágico from Clock_of_Shadow_Unit
  • Hero
    • Events
      • Unit - A unit Sells a unit
    • Conditions
      • ((Sold unit) is A Hero) Equal to True
    • Actions
      • Unit - Remove Taverna 0006<gen> from the game
      • Unit - Remove Camponês (Gênero masculino) 0000<gen> from the game
      • Set VariableSet Hero = (Sold unit)
      • Hero - Set Hero Hero-level to 10, Hide level-up graphics
      • Hero - Modify unspent skill points of Hero: Subtract 3 points
      • -------- Items --------
      • Hero - Create Máscara Sobi and give it to (Sold unit)
      • Hero - Create Diadema da Nobreza and give it to (Sold unit)
      • Hero - Create Anel da Regeneração and give it to (Sold unit)
      • Hero - Create Anel de Proteção +2 and give it to (Sold unit)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Unit-type of (Sold unit)) Equal to Dark Ranger
        • Then - Actions
          • Ability - Set Ability: (Unit: (Sold unit)'s Ability with Ability Code: Onda de Choque )'s Integer Level Field: Attacks Prevented ('Nsi1') of Level: 1 to 8
        • Else - Actions
 

Attachments

  • Warcraft III 2025-04-14 23-31-51.mp4
    508 MB
  • Test.w3m
    98.2 KB · Views: 2

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,285
Might want to avoid using TriggerSleepAction (GUI Wait actions) since that is not very precise.

Timers are much better for this sort of thing since they work in game time rather than a rough approximation of real time that is network latency sensitive in multiplayer.

The general flow of an ability combo would be something like...
  1. Check the hero can combo. This means the abilities are ready to cast and the hero is in range to cast it on a victim.
  2. Cast first ability.
  3. Use a timer to wait some amount of time to execute the combo. Might need to be measured experimentally.
  4. Check again if it is still possible to combo. The target might no longer be valid such as due to moving out of range, teleporting away, dying, going invulnerable, e.t.c. If they are not a valid target anymore then abort the combo.
  5. Use combo ability 2.
  6. Repeat from steps 3 to 5 for each additional ability.
For channels you would periodically check if they are still channeling. If a buff is involved it should be trivial to do, but if there is not such a buff you might need to resort to using another trigger system using channeling events to track when channeling starts and ends and then refer to that information.
 
Level 9
Joined
Jul 7, 2011
Messages
282
I need help to better manipulate this skill:
  • Heroic Leap Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heroic Leap
    • Actions
      • -------- Stores caster into variable --------
      • Set VariableSet HL_Caster = (Casting unit)
      • -------- Finds caster's location and center of target AoE --------
      • Set VariableSet HL_Points[1] = (Position of HL_Caster)
      • Set VariableSet HL_Points[2] = (Target point of ability being cast)
      • Set VariableSet HL_Final_Point = (Target point of ability being cast)
      • -------- Fixes the Out-of-Boundary bugg --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Terrain pathing at HL_Points[2] of type Walkability is off) Equal to True
        • Then - Actions
          • Game - Display to (All players) the text: parte 1
          • Item - Create Tomo de Experiência at HL_Points[2]
          • Custom script: call RemoveLocation(udg_HL_Points[2])
          • Set VariableSet HL_Points[2] = (Position of (Last created item))
          • Set VariableSet HL_Final_Point = (Position of (Last created item))
          • Item - Remove (Last created item)
        • Else - Actions
      • -------- Stores distance-to-jump into variable --------
      • Set VariableSet HL_Real[1] = (Distance between HL_Points[1] and HL_Points[2])
      • -------- Counts up the Distance at which Caster shall start landing --------
      • Set VariableSet HL_Real[2] = (HL_Real[1] / 2.00)
      • -------- Counts angle at which caster shall 'jump' --------
      • Set VariableSet HL_Real[3] = (Angle from HL_Points[1] to HL_Points[2])
      • -------- Turns Caster's collision off, as we want it jump above (go through) any obstacle --------
      • Unit - Turn collision for HL_Caster Off.
      • -------- Makes Caster invulnerable --------
      • Unit - Make HL_Caster Invulnerable
      • -------- Adds to and removes from Caster Storm Crow Form spell , allowing us to manipulate the Flying height of Caster --------
      • Unit - Add Forma de Corvo da Tempestade to HL_Caster
      • Unit - Remove Forma de Corvo da Tempestade from HL_Caster
      • -------- Creates a trail SFX and instantly destroys it, fixing the leak --------
      • Special Effect - Create a special effect attached to the origin of HL_Caster using Abilities\Spells\Human\Invisibility\InvisibilityTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Stores all Information needed to the Hashtable --------
      • -------- NOTE 1: All information is attached to caster --------
      • -------- Never, EVER, make hashtable-based MUI spells, that are cast by Caster and Information is attached to the Target, as it will cause huge bugg --------
      • Hashtable - Save HL_Real[1] as 0 of (Key (Casting unit).) in Hashtable.
      • Hashtable - Save HL_Real[2] as 1 of (Key (Casting unit).) in Hashtable.
      • Hashtable - Save HL_Real[3] as 2 of (Key (Casting unit).) in Hashtable.
      • -------- Checks if there is any instance of spell already in game --------
      • -------- If not, then turns sliding trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (HL_Leapers is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Heroic Leap Slide<gen>
        • Else - Actions
      • -------- Adds caster to leapers' group --------
      • Unit Group - Add HL_Caster to HL_Leapers
      • -------- Clears the leaks --------
      • Custom script: call RemoveLocation(udg_HL_Points[1])
      • Custom script: call RemoveLocation(udg_HL_Points[2])
      • -------- NOTE 2: AoE, damage and stun duration are all works in Object Editor, spells Heroic Leap and Dummy Stomp --------
  • Heroic Leap Slide
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in HL_Leapers and do (Actions)
        • Loop - Actions
          • Game - Display to (All players) the text: Parte 1
          • -------- Stores Caster into variable, solely for faster code writing --------
          • Set VariableSet HL_Caster = (Picked unit)
          • -------- Loads distance-to-jump and reduces it by SPEED --------
          • -------- NOTE 1: This reducement MUST be equal to the offset by real number in the countings of Points[2] --------
          • Set VariableSet HL_Real[1] = (HL_Real[1] - 20.00)
          • -------- Finds current position of Caster and Counts the next Point-to-move --------
          • Set VariableSet HL_Points[1] = (Position of HL_Caster)
          • Set VariableSet HL_Points[2] = (HL_Points[1] offset by 20.00 towards (Angle from HL_Points[1] to HL_Final_Point) degrees.)
          • -------- Checks if it is time to finish landing --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • HL_Real[1] Greater than or equal to 0.00
              • (Distance between HL_Points[1] and HL_Final_Point) Greater than or equal to 150.00
            • Then - Actions
              • -------- If not, then... --------
              • -------- Moves Caster to the Points[2], making it slide --------
              • Unit - Move HL_Caster instantly to HL_Points[2]
              • -------- Checks if the distance-to-jump is greater than distance-to-rise --------
              • -------- If it is, then sets bonus jump height into positive real number, else, to negative, but equal one --------
              • If (HL_Real[1] Greater than HL_Real[2]) then do (Set VariableSet HL_Real[3] = 40.00) else do (Set VariableSet HL_Real[3] = -40.00)
              • -------- Increases/decreases flying height of caster, making it 'jump' --------
              • Animation - Change HL_Caster flying height to ((Current flying height of HL_Caster) + HL_Real[3]) at 0.00
              • Animation - Play HL_Caster's slam animation
            • Else - Actions
              • -------- If it is, then... --------
              • -------- Fixes Caster's collision, vulnerability and flying height --------
              • Unit - Turn collision for HL_Caster On.
              • Unit - Make HL_Caster Vulnerable
              • Animation - Change HL_Caster flying height to (Default flying height of HL_Caster) at 0.00
              • -------- Plays caster's slam animation --------
              • Animation - Play HL_Caster's slam animation
              • -------- Does the AoE-stunning --------
              • Special Effect - Create a special effect at (Position of HL_Caster) using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
              • Set VariableSet HL_Special_Effect = (Last created special effect)
              • Special Effect - Destroy HL_Special_Effect
              • Unit - Create 1 DummyUnit for (Owner of HL_Caster) at HL_Points[2] facing Default building facing degrees
              • Unit - Add a 5.00 second Generic expiration timer to (Last created unit)
              • Unit - Add Heroic Leap (Stun) to (Last created unit)
              • Unit - Set level of Heroic Leap (Stun) for (Last created unit) to (Level of Heroic Leap for HL_Caster)
              • Unit - Order (Last created unit) to Orc Tauren Chieftain - War Stomp.
              • Set VariableSet HL_Real[1] = 0.00
              • Set VariableSet HL_Real[2] = 0.00
              • Set VariableSet HL_Real[3] = 0.00
              • -------- Removes Caster from leapers' group --------
              • Unit Group - Remove HL_Caster from HL_Leapers.
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (HL_Leapers is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_HL_Points[1])
          • Custom script: call RemoveLocation(udg_HL_Points[2])
Thanks to @G00dG4m3 for creating the skill. But I want to better manipulate this skill. Like increasing the unit's attitude until the middle of the trajectory, the system automatically recognizes it and after that starts to lower the unit. Also, the unit does not pass the target, if the jump speed is modified.

@Dr Super Good
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,285
For simple parabolic altitude, a quadratic equation is usually used. For example if a unit were to jump a distance of 1,000 units, peeking at 500 units height in the middle then the following formula could be used to calculate what height the unit should be at any given point along the path.
Code:
height = - (1 / 500) * (distance - (1000 / 2))^2 + 500

This fits very much with how the rest of Warcraft III works. Warcraft III is mostly a 2D RTS game, where the height of terrain, units, e.t.c. is largely an illusion.
 
Level 9
Joined
Jul 7, 2011
Messages
282
  • Gloves of Speed
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • ((Attacking unit) has an item of type Luvas da Rapidez) Equal to True
    • Actions
      • Set VariableSet Gloves_of_Speed = (Item carried by (Attacking unit) of type Luvas da Rapidez)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Gloves_of_Speed_Charges Not equal to 5
        • Then - Actions
          • Trigger - Turn on Gloves of Speed Timer<gen>
          • Set VariableSet Gloves_of_Speed_Charges = (Gloves_of_Speed_Charges + 1)
          • Ability - Set Ability: (Item: Gloves_of_Speed's Ability with Ability Code: Item Bônus de Velocidade de Ataque (Luvas da Velocidade))'s Real Level Field: Attack Speed Increase ('Isx1') of Level: 1 to ((Ability: (Item: Gloves_of_Speed's Ability with Ability Code: Item Bônus de Velocidade de Ataque (Luvas da Velocidade))'s Real Level Field Attack Speed Increase ('Isx1'), of Level: 1) + 100.00)
          • Countdown Timer - Start Gloves_of_Speed_Timer as a One-shot timer that will expire in 8.00 seconds
          • Game - Display to (All players) the text: ((String((Attack Interval of (Attacking unit) for weapon index 1.))) + attack cd)
          • Game - Display to (All players) the text: ((String((Ability: (Item: Gloves_of_Speed's Ability with Ability Code: Item Bônus de Velocidade de Ataque (Luvas da Velocidade))'s Real Level Field Attack Speed Increase ('Isx1'), of Level: 1))) + as)
        • Else - Actions
  • Gloves of Speed Timer
    • Events
      • Time - Gloves_of_Speed_Timer expires
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Gloves_of_Speed_Charges Not equal to 0
        • Then - Actions
          • Set VariableSet Gloves_of_Speed_Charges = (Gloves_of_Speed_Charges - 1)
          • Ability - Set Ability: (Item: Gloves_of_Speed's Ability with Ability Code: Item Bônus de Velocidade de Ataque (Luvas da Velocidade))'s Real Level Field: Attack Speed Increase ('Isx1') of Level: 1 to ((Ability: (Item: Gloves_of_Speed's Ability with Ability Code: Item Bônus de Velocidade de Ataque (Luvas da Velocidade))'s Real Level Field Attack Speed Increase ('Isx1'), of Level: 1) - 100.00)
        • Else - Actions
          • Trigger - Turn off (This trigger)
Unable to modify item ability using Trigger Ability Field? Or am I lost in something?
 
Top