• 🏆 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!

[Spell] Borrowed Time MUI

Status
Not open for further replies.
Level 12
Joined
May 16, 2020
Messages
660
Hi guys,

I'm trying to recreate Abaddon from Dota 2 in MUI, specifically Borrowed Time.

Abaddon.

From what I can tell the spell works correctly when only 1 unit is present. But with 2 units sometimes incoming damage is NOT absorbed when Borrowed Time is activated (either passively or actively). I spent a few hours now trying to understand what is wrong... but I don't see anything.

Can anyone please help?
Happy to send the map if it's easier.

  • Borrowed Time Active
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Borrowed Time
      • BT_BooleanDuration[(Custom value of (Triggering unit))] Equal to False
      • BT_BooleanCooldown[(Custom value of (Triggering unit))] Equal to False
    • Actions
      • Set VariableSet BT_IndexA = (BT_IndexA + 1)
      • Set VariableSet BT_IndexB = (BT_IndexB + 1)
      • Set VariableSet BT_Caster[BT_IndexA] = (Triggering unit)
      • Set VariableSet BT_CS = (Custom value of BT_Caster[BT_IndexA])
      • Set VariableSet BT_BooleanDuration[BT_CS] = True
      • Set VariableSet BT_BooleanCooldown[BT_CS] = True
      • Set VariableSet BT_AphoticShield_Boolean[BT_CS] = True
      • Set VariableSet BT_Counter[BT_IndexA] = 0.00
      • Set VariableSet BT_Duration[BT_IndexA] = (3 + (Level of Borrowed Time for BT_Caster[BT_IndexA]))
      • Set VariableSet BT_Cooldown[BT_IndexA] = (70 - (10 x (Level of Borrowed Time for BT_Caster[BT_IndexA])))
      • Special Effect - Create a special effect attached to the origin of BT_Caster[BT_IndexA] using war3mapImported\AZ_Abaddon01_B.mdx
      • Set VariableSet BT_Specialeffect[BT_IndexA] = (Last created special effect)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BT_IndexA Equal to 1
        • Then - Actions
          • Game - Display to (All players) for 2.00 seconds the text: Borrowed Time on
          • Countdown Timer - Start BT_Timer as a Repeating timer that will expire in 0.10 seconds
          • Trigger - Turn on Borrowed Time Absorb <gen>
          • Trigger - Turn on Borrowed Time Loop <gen>
        • Else - Actions
  • Borrowed Time Passive
    • Events
      • Game - AfterDamageEvent becomes Equal to 1.00
    • Conditions
      • (Level of Borrowed Time for DamageEventTarget) Greater than 0
      • (Life of DamageEventTarget) Less than or equal to 400.00
      • (Life of DamageEventTarget) Greater than 0.00
      • BT_BooleanDuration[(Custom value of DamageEventTarget)] Equal to False
      • BT_BooleanCooldown[(Custom value of DamageEventTarget)] Equal to False
    • Actions
      • Set VariableSet BT_CS = (Custom value of DamageEventTarget)
      • Set VariableSet BT_BooleanDuration[BT_CS] = True
      • Set VariableSet BT_BooleanCooldown[BT_CS] = True
      • Set VariableSet BT_AphoticShield_Boolean[BT_CS] = True
      • Unit - For Unit DamageEventTarget, start cooldown of ability Borrowed Time " over "(70.00 - (10.00 x (Real((Level of Borrowed Time for DamageEventTarget))))) seconds.
      • Set VariableSet BT_IndexA = (BT_IndexA + 1)
      • Set VariableSet BT_IndexB = (BT_IndexB + 1)
      • Set VariableSet BT_Caster[BT_IndexA] = DamageEventTarget
      • Set VariableSet BT_Counter[BT_IndexA] = 0.00
      • Set VariableSet BT_Duration[BT_IndexA] = (3 + (Level of Borrowed Time for DamageEventTarget))
      • Set VariableSet BT_Cooldown[BT_IndexA] = (70 - (10 x (Level of Borrowed Time for DamageEventTarget)))
      • Special Effect - Create a special effect attached to the origin of DamageEventTarget using war3mapImported\AZ_Abaddon01_B.mdx
      • Set VariableSet BT_Specialeffect[BT_IndexA] = (Last created special effect)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BT_IndexA Equal to 1
        • Then - Actions
          • Game - Display to (All players) for 2.00 seconds the text: Borrowed Time on
          • Countdown Timer - Start BT_Timer as a Repeating timer that will expire in 0.10 seconds
          • Trigger - Turn on Borrowed Time Absorb <gen>
          • Trigger - Turn on Borrowed Time Loop <gen>
        • Else - Actions
  • Borrowed Time Loop
    • Events
      • Time - BT_Timer expires
    • Conditions
    • Actions
      • For each (Integer BT_Integer) from 1 to BT_IndexA, do (Actions)
        • Loop - Actions
          • Set VariableSet BT_CS = (Custom value of BT_Caster[BT_Integer])
          • Set VariableSet BT_Counter[BT_Integer] = (BT_Counter[BT_Integer] + 0.10)
          • -------- CHECK IF DURATION OVER --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BT_BooleanDuration[BT_CS] Equal to True
              • Or - Any (Conditions) are true
                • Conditions
                  • BT_Counter[BT_Integer] Greater than or equal to (Real(BT_Duration[BT_Integer]))
                  • (BT_Caster[BT_Integer] is alive) Equal to False
            • Then - Actions
              • Set VariableSet BT_BooleanDuration[BT_CS] = False
              • Set VariableSet BT_AphoticShield_Boolean[BT_CS] = False
              • Special Effect - Destroy BT_Specialeffect[BT_Integer]
              • Set VariableSet BT_IndexB = (BT_IndexB - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BT_IndexB Equal to 0
                • Then - Actions
                  • Game - Display to (All players) for 2.00 seconds the text: Borrowed Time off
                  • Trigger - Turn off Borrowed Time Absorb <gen>
                • Else - Actions
            • Else - Actions
          • -------- CHECK IF COOLDOWN OVER --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BT_BooleanCooldown[BT_CS] Equal to True
              • BT_Counter[BT_Integer] Greater than or equal to (Real(BT_Cooldown[BT_Integer]))
            • Then - Actions
              • Set VariableSet BT_BooleanCooldown[BT_CS] = False
              • Set VariableSet BT_Caster[BT_Integer] = BT_Caster[BT_IndexA]
              • Set VariableSet BT_Counter[BT_Integer] = BT_Counter[BT_IndexA]
              • Set VariableSet BT_IndexA = (BT_IndexA - 1)
              • Set VariableSet BT_Integer = (BT_Integer - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BT_IndexA Equal to 0
                • Then - Actions
                  • Game - Display to (All players) for 2.00 seconds the text: Cooldown OVER
                  • Countdown Timer - Pause BT_Timer
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
  • Borrowed Time Absorb
    • Events
      • Game - DamageModifierEvent becomes Equal to 4.00
    • Conditions
      • (Level of Borrowed Time for DamageEventTarget) Greater than 0
      • BT_BooleanDuration[(Custom value of DamageEventTarget)] Equal to True
    • Actions
      • Set VariableSet DamageEventAmount = (-1.00 x DamageEventAmount)
 
Level 12
Joined
May 16, 2020
Messages
660
SOLVED

Adjusting the loop trigger and using only 1 Index Variable did the trick:

  • Borrowed Time Loop
    • Events
      • Time - BT_Timer expires
    • Conditions
    • Actions
      • For each (Integer BT_Integer) from 1 to BT_Index, do (Actions)
        • Loop - Actions
          • Set VariableSet BT_CS = (Custom value of BT_Caster[BT_Integer])
          • Set VariableSet BT_Counter[BT_Integer] = (BT_Counter[BT_Integer] + 0.10)
          • -------- CHECK IF DURATION OVER --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BT_BooleanDuration[BT_CS] Equal to True
              • Or - Any (Conditions) are true
                • Conditions
                  • BT_Counter[BT_Integer] Greater than or equal to (Real(BT_Duration[BT_Integer]))
                  • (BT_Caster[BT_Integer] is alive) Equal to False
            • Then - Actions
              • Set VariableSet BT_BooleanDuration[BT_CS] = False
              • Set VariableSet BT_AphoticShield_Boolean[BT_CS] = False
              • Special Effect - Destroy BT_Specialeffect[BT_CS]
            • Else - Actions
          • -------- CHECK IF COOLDOWN OVER --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BT_BooleanCooldown[BT_CS] Equal to True
              • BT_Counter[BT_Integer] Greater than or equal to (Real(BT_Cooldown[BT_Integer]))
            • Then - Actions
              • Set VariableSet BT_BooleanCooldown[BT_CS] = False
              • Set VariableSet BT_Caster[BT_Integer] = BT_Caster[BT_Index]
              • Set VariableSet BT_Counter[BT_Integer] = BT_Counter[BT_Index]
              • Set VariableSet BT_Index = (BT_Index - 1)
              • Set VariableSet BT_Integer = (BT_Integer - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BT_Index Equal to 0
                • Then - Actions
                  • Game - Display to (All players) for 2.00 seconds the text: Cooldown OVER
                  • Countdown Timer - Pause BT_Timer
                  • Trigger - Turn off Borrowed Time Absorb <gen>
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
 
Status
Not open for further replies.
Top