• 🏆 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!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Tensile Field v1.0 (GUI - MUI)

This bundle is marked as awaiting update. A staff member has requested changes to it before it can be approved.
  • Like
Reactions: Vinz and deepstrasz
Note:

This spell is my idea, feel free

Models: @Mythic

Tooltip:

Summon a Tensile Field, this field reduced the Movement Speed of nearby enemy units at 450 AoE. Also, drain HP of target and add to himself - Draining can not kill the target if the target is a hero - And also healing nearby friendly units per second. Lasts 40 seconds.

Level 1 - Drain 10 + 0.6x intelligence of Caster, Healing 10 + 0.6x Strength of Target.
Level 2 - Drain 20 + 0.8x intelligence of Caster, Healing 20 + 0.8x Strength of Target.
Level 3 - Drain 30 + 1.0x intelligence of Caster, Healing 30 + 1.0x Strength of Target.

Cooldown 60
Manacost 110/120/130

How to use it:

1- Under Preferences, make sure you have "Automatically create unknown variables while pasting trigger data" checked
2- Copy models to your map (credit: @Mythic )
3- Copy dummy unit, abilities, and buff (TFDummy - Call Field, Tensile Field, Slow Aura - Tensile Field) to your map.
4- Copy Tensile Field Ability trigger to your map.

Enjoy

Changelog:
- v1.0 release
Contents

Tensile Field v1.0 (Map)

Reviews
MyPad
The tensile field is a field of concentrated biomagic that cripples foes, draining their life force by an amount equal to the caster's magical affinity, and giving it to allies. As of the current version (v1.0), this bundle has been set to Awaiting...
The tensile field is a field of concentrated biomagic that cripples foes, draining their life force
by an amount equal to the caster's magical affinity, and giving it to allies.

There are a lot of memory leaks in the spell which are not properly cleaned up, considering that
the loop trigger part of the spell as well as the cast trigger executes multiple times.

These are the leaks detected:
  • TF Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Tensile Field
        • Then - Actions
          • Comment: ---- TF_Point is not cleaned up within this block ----
          • Set TF_Point = (Target point of ability being cast)
          • Unit - Create 1 TFDummy for (Owner of (Triggering unit)) at TF_Point facing Default building facing degrees
          • Comment: ---- Storing (Last created unit) to a variable would be more efficient ----
          • Unit - Add a 40.00 second Generic expiration timer to (Last created unit)
          • Unit - Set life of (Last created unit) to 1.00
          • Hero - Modify Intelligence of (Last created unit): Set to (Intelligence of (Triggering unit) (Exclude bonuses))
          • Hero - Modify Agility of (Last created unit): Set to (Level of Tensile Field for (Triggering unit))
          • Unit Group - Add (Last created unit) to TF_Group
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (TF_Group is empty) Equal to False
            • Then - Actions
              • Trigger - Turn on TF Loop <gen>
            • Else - Actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Call Field
        • Then - Actions
          • Comment: ---- A position handle is created and not cleaned up within this block ----
          • Special Effect - Create a special effect at (Position of (Target unit of ability being cast)) using Call of Dread Green.mdx
          • Special Effect - Destroy (Last created special effect)
        • Else - Actions
  • TF Loop
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in TF_Group and do (Actions)
        • Loop - Actions
          • Comment: ---- Storing (Picked unit) to a variable is suggested at this point. ----
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) is dead) Equal to True
            • Then - Actions
              • Unit Group - Remove (Picked unit) from TF_Group
            • Else - Actions
          • Comment: ---- Based on the trigger action, the removed (Picked unit) might still be ordered to ----
          • Comment: ---- channel the same spell. This wastes at least 2 unit groups and 2 locations. ----
          • Unit - Order (Picked unit) to Special - Channel
          • Comment: ---- Move this line above to the suggested point. ----
          • Set TF_Dummy = (Picked unit)
          • Comment: ---- The following leaks are spotted: ----
          • Comment: ---- Unit group leak, Location leak ----
          • Unit Group - Pick every unit in (Units within 450.00 of (Position of (Picked unit)) matching ((((Matching unit) belongs to an enemy of (Owner of TF_Dummy)) Equal to True) and ((((Matching unit) is alive) Equal to True) and ((Life of (Matching unit)) Greater than (((Max life of (Matching unit) and do (Actions)
            • Loop - Actions
              • Comment: ---- Storing (Picked unit) to a separate variable is suggested. ----
              • Set TF_Damage = (((Real((Agility of TF_Dummy (Exclude bonuses)))) x 10.00) + ((Real((Intelligence of TF_Dummy (Exclude bonuses)))) x (0.40 + ((Real((Agility of TF_Dummy (Exclude bonuses)))) x 0.20))))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Life of (Picked unit)) Greater than or equal to TF_Damage
                • Then - Actions
                  • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) - TF_Damage)
                  • Unit - Set life of TF_Dummy to ((Life of TF_Dummy) + TF_Damage)
                • Else - Actions
                  • Set TF_Damage = (Life of (Picked unit))
                  • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) - TF_Damage)
                  • Unit - Set life of TF_Dummy to ((Life of TF_Dummy) + TF_Damage)
          • Comment: ---- Another bunch of leaks are spotted: ----
          • Comment: ---- Unit group leak, Location leak ----
          • Unit Group - Pick every unit in (Units within 450.00 of (Position of (Picked unit)) matching ((((Matching unit) belongs to an ally of (Owner of TF_Dummy)) Equal to True) and ((((Matching unit) is alive) Equal to True) and ((Life of (Matching unit)) Less than (Max life of (Matching unit)))))) and do (Actions)
            • Loop - Actions
              • Comment: ---- Storing (Picked unit) to a separate variable is suggested. ----
              • Set TF_Heal = (((Real((Agility of TF_Dummy (Exclude bonuses)))) x 10.00) + ((Real((Strength of (Picked unit) (Exclude bonuses)))) x (0.40 + ((Real((Agility of TF_Dummy (Exclude bonuses)))) x 0.20))))
              • Comment: ---- This will leak about n number of unit groups ----
              • Comment: ---- where n is the number of units within the group above ----
              • Comment: ---- Storing the above group to a variable is highly suggested. ----
              • Set TF_Heal = (TF_Heal / (Real((Number of units in (Units within 450.00 of (Position of TF_Dummy) matching ((((Matching unit) belongs to an ally of (Owner of TF_Dummy)) Equal to True) and ((((Matching unit) is alive) Equal to True) and (((Life of (Matching unit)) + TF_Heal))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Life of TF_Dummy) Greater than TF_Heal
                • Then - Actions
                  • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + TF_Heal)
                  • Unit - Set life of TF_Dummy to ((Life of TF_Dummy) - TF_Heal)
                • Else - Actions
                  • Set TF_Heal = ((Life of TF_Dummy) - 1.00)
                  • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + TF_Heal)
                  • Unit - Set life of TF_Dummy to ((Life of TF_Dummy) - TF_Heal)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (TF_Group is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
Aside from the memory leaks, there is still some work that needs to be done regarding the
configurability of the system. The amount of heal is calculated based on fixed factors
that cannot be easily configured. The amount of damage dealt likewise suffers from the same
issue.

The link posted by Devalut would help greatly in making the unit group filters easy to
read and understand. I would suggest giving it a look.

As of the current version (v1.0), this bundle has been set to Awaiting Update
 
Top