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

Death Grip v1.6a

A GUI and MUI spell I made myself, with easily modifiable settings. It's inspired from the death grip spell from World of Warcraft.

Description : Grabs the target and brings it to the caster's location, dealing X damages.
Optionnal effects :
- Stuns the target when landing for Y seconds.
- Taunt effect which forces the target to attack you when landing (after stun effect if applied).

Go to the "READ ME" category for additionnal informations and the importation instructions.

I hope you guys will enjoy it, comment it and rate it.

Version 1.0 Released !
Version 1.01 : Fixed minor bugs.
Version 1.1 : Removed the function making the caster attacking the target after casting, Changed the default effect, Changed the speed fly height to 0 instead of 100000000, Fixed the bug of the 0 cd cast by making a bolean condition instead of checking if the caster is in group.
Version 1.1a : Fixed new minor bugs and added the possibility to change the fly height origin of the lightning effect on the caster or/and on the target.
Version 1.2 : Major bugs fixed with the adaptation of cliff and lightning heights.
Version 1.3 : Fixed major bugs linked to a wrong use of the Custom script action. This could lead to units getting stuck in the air, and even game crashes when used several times at once.
Version 1.4 : Changed the damages ; they are now increased with a coefficient multplied by the distance between the caster and the target, which is bigger each level.
Version 1.4a : Fixed new minor bugs and added a little damage system which shows the damages dealt with floating texts ingame. It is easier to see the damages occured with the coefficient.
Version 1.4b : Added the possibility to change the final distance between the caster and the target in the settings of the Cast trigger.
Version 1.4c : Added the possibility to enable/disable the stun effect in the Cast trigger.
Version 1.4d : The caster is no longer "(Casting unit)" but "(Triggering unit)".
Version 1.5 :
- Air units can now be targeted. When used on them, it will also apply an arc effect, and then reset its default height at the end of the loop trigger at X speed.
- Added the possibility to remove the taunting effect of the spell.
- Updated description and comments in the "Death Grip cast" trigger.
Version 1.6 :
- Replaced DG_Integer with separate Integer variables.
- Fixed the dangerous crow spell add/removing (custom script).
- Updated description and Read me.
Version 1.6a : Fixed minor bugs linked to the dummy unit & the loop trigger.


/!\ Due to my French version of the World Editor, I can't post the triggers using the Hive workshop's code. I'd be pleased if anyone could do it for me in a PM or in the comments for the new 1.6 update.

Keywords:
Death, Grip, Knight, Lightning, Red, Purple, Scourge
Contents

Death Grip v1.6a (Map)

Reviews
Death Grip v1.6 | Reviewed by Maker | 5th May 2013 APPROVED The ability is MUI and leakless with fitting effects The indexing method could be better, as it does not immediately remove instances tha expire You could...

Moderator

M

Moderator


Death Grip v1.6 | Reviewed by Maker | 5th May 2013
APPROVED


126248-albums6177-picture66521.png


  • The ability is MUI and leakless with fitting effects
126248-albums6177-picture66523.png


  • The indexing method could be better, as it does not immediately remove
    instances tha expire
  • You could check if the caster is dead and abort the spell
  • Set the cast point of the dummy to 0.00,
    reduce vision and remove upgrades used
  • Set the death type of the dummy to Can't raise, does not decay
  • The GUI line for moving the lightning is not needed
126248-albums6177-picture66524.png
[tr]


01:31 Aug 23 2012
Magtheridon96:

A lot has changed in the last 2 years.
First of all, you should check out Hanky's Dynamic Indexing Template.

Also, DG_Integer doesn't need to be an array. I'd recommend using 3 separate integers instead. Arrays lookups are relatively slow.

One other thing, you shouldn't be adding and removing crow form like that.
It's dangerous. Check out this thread.
 
Level 19
Joined
Feb 4, 2009
Messages
1,313
nice but not perfect yet
(bug was produced with 0 sec spell cd, casting time of 0 and shiftclick)

better use coordinates only
stuff you need for that:
a global location which is created at map ini to check terrain height
call MoveLocation(udg_zLoc, udg_x, udg_y)
set udg_z = GetLocationZ(udg_zLoc)
call MoveLightningEx(udg_lightning, true, udg_x, udg_y, udg_z, udg_x2, udg_y2, udg_z2)
call SetUnitX(udg_u, udg_x)

changing flying height with a speed of 0 is instant

don't use arrays for temporary data storage
they are slower and unnecessary

you are using this line twice
why are you using it anyway?
  • Unit - Order DG_Caster[DG_Integer[3]] to Attack DG_Target[DG_Integer[3]]
all in all I'd vote it 2/5 now cause it is bugged and the idea is poor, as well as the execution
(however it is far better than some other submissions and has potential)
for indexing I'd suggest you to read this http://www.hiveworkshop.com/forums/...late-144325/?prev=search=indexing&d=list&r=20
and also add something unique
 

Attachments

  • screenshot.jpg
    screenshot.jpg
    690.3 KB · Views: 439
Level 8
Joined
May 7, 2008
Messages
108
you are using this line twice
why are you using it anyway?

This line is not used twice and the spell is a reference to the WoW one. It taunts the ennemy and forces you and him to attack each other.

As for the other things, I'll check this out tonight.
Thanks for commenting.

[EDIT] I fixed all the bugs except for the last things you told me
"don't use arrays for temporary data storage
they are slower and unnecessary".
I didn't really understand what was the real problem with it, because you are linking me a tutorial with a similar system.

Check the new "Versions" /hidden windows to see all the changes in the description.
 
Last edited:
Level 7
Joined
Dec 19, 2009
Messages
249
I CANT POST THE TRIGGERS because I've got the French editor. If anyone could post it, please do it !

  • Death Grip cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Death Grip
    • Actions
      • -------- ---------- COMMENTS ---------- --------
      • -------- Please, check the READ ME before starting reading the trigger comments. --------
      • -------- XX Add one more caster XX --------
      • Set DG_Integer[1] = (DG_Integer[1] + 1)
      • -------- XX Set the caster XX --------
      • Set DG_Caster[DG_Integer[1]] = (Casting unit)
      • -------- XX Set the target XX --------
      • Set DG_Target[DG_Integer[1]] = (Target unit of ability being cast)
      • -------- << Set the attached effect during the flying effect (must have no animations to work) >> --------
      • Special Effect - Create a special effect attached to the chest of DG_Target[DG_Integer[1]] using Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- << Set the final effect of Death Grip on the target >> --------
      • Set DG_FinalEffect[DG_Integer[1]] = Abilities\Spells\Items\AIil\AIilTarget.mdl
      • -------- << Add high to the lightning effect from on caster (0.00 will make the lightning touching the ground) >> --------
      • Set DG_AddZCaster[DG_Integer[1]] = 50.00
      • -------- << Add high to the lightning effect on the target (0.00 will make the lightning touching the ground) >> --------
      • Set DG_AddZTarget[DG_Integer[1]] = 50.00
      • -------- XX Set the locations XX --------
      • Set DG_TempPoint1 = (Position of DG_Caster[DG_Integer[1]])
      • Set DG_TempPoint2 = (Position of DG_Target[DG_Integer[1]])
      • Set DG_TempPoint3 = (DG_TempPoint1 offset by 150.00 towards (Angle from DG_TempPoint1 to DG_TempPoint2) degrees)
      • -------- XX Set the angle between the final destination and the first location of the target XX --------
      • Set DG_AngleFacing[DG_Integer[1]] = (Angle from DG_TempPoint1 to DG_TempPoint2)
      • -------- XX Set the distance between the final destination and the first location of the target XX --------
      • Set DG_DistanceTotal[DG_Integer[1]] = (Distance between DG_TempPoint2 and DG_TempPoint3)
      • -------- XX Set the distance left to the total distance XX --------
      • Set DG_DistanceLeft[DG_Integer[1]] = DG_DistanceTotal[DG_Integer[1]]
      • -------- XX Set the level XX --------
      • Set DG_Level[DG_Integer[1]] = (Level of (Ability being cast) for DG_Caster[DG_Integer[1]])
      • -------- << Set the damages >> --------
      • Set DG_Damages[DG_Integer[1]] = (((Real(DG_Level[DG_Integer[1]])) x 0.15) x DG_DistanceTotal[DG_Integer[1]])
      • -------- << Set the speed of the grip effect >> --------
      • Set DG_Speed[DG_Integer[1]] = 25.00
      • -------- << Set the arc of the grip effect >> --------
      • Set DG_HighArc[DG_Integer[1]] = 0.55
      • -------- XX Compile the total distance with the high arc to form the high settings XX --------
      • Set DG_HighSettings[DG_Integer[1]] = (DG_DistanceTotal[DG_Integer[1]] x DG_HighArc[DG_Integer[1]])
      • -------- << IMPORTANT : Make sure that the spell here matches with the Stun dummy ability >> --------
      • Set DG_StunAbility[DG_Integer[1]] = Stun
      • -------- << Set the lightning effect >> --------
      • Lightning - Create a Finger of Death lightning effect from source DG_TempPoint3 to target DG_TempPoint2
      • Set DG_Lightning[DG_Integer[1]] = (Last created lightning effect)
      • -------- XX Reset the action for bolean condition in loop XX --------
      • Set DG_FinishAction[DG_Integer[1]] = False
      • -------- XX Check to autorize the high changes of the Target XX --------
      • Unit - Add Forme de corbeau to DG_Target[DG_Integer[1]]
      • Unit - Remove Forme de corbeau from DG_Target[DG_Integer[1]]
      • -------- XX Stop collision of the target with ground objects XX --------
      • Unit - Turn collision for DG_Target[DG_Integer[1]] Off
      • -------- XX Removing Locations XX --------
      • Custom script: call RemoveLocation(udg_DG_TempPoint1)
      • Custom script: call RemoveLocation(udg_DG_TempPoint2)
      • Custom script: call RemoveLocation(udg_DG_TempPoint3)
      • -------- XXXXXXXXXXXXXXXXXXXXXXX --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DG_Integer[2] Equal to 0
        • Then - Actions
          • Trigger - Turn on Death Grip loop <gen>
        • Else - Actions
      • Set DG_Integer[2] = (DG_Integer[2] + 1)
  • Death Grip loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer DG_Integer[3]) from 1 to DG_Integer[1], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DG_FinishAction[DG_Integer[3]] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DG_DistanceLeft[DG_Integer[3]] Greater than 0.00
                • Then - Actions
                  • Set DG_DistanceLeft[DG_Integer[3]] = (DG_DistanceLeft[DG_Integer[3]] - DG_Speed[DG_Integer[3]])
                  • Set DG_TempPoint1 = (Position of DG_Caster[DG_Integer[3]])
                  • Set DG_TempPoint2 = (DG_TempPoint1 offset by 150.00 towards DG_AngleFacing[DG_Integer[3]] degrees)
                  • Set DG_TempPoint3 = (DG_TempPoint2 offset by DG_DistanceLeft[DG_Integer[3]] towards DG_AngleFacing[DG_Integer[3]] degrees)
                  • Unit - Move DG_Target[DG_Integer[3]] instantly to DG_TempPoint3
                  • Set DG_RealTimer[DG_Integer[3]] = (DG_RealTimer[DG_Integer[3]] + (180.00 / (DG_DistanceTotal[DG_Integer[3]] / DG_Speed[DG_Integer[3]])))
                  • Set DG_High[DG_Integer[3]] = ((Sin(DG_RealTimer[DG_Integer[3]])) x DG_HighSettings[DG_Integer[3]])
                  • Animation - Change DG_Target[DG_Integer[3]] flying height to DG_High[DG_Integer[3]] at 0.00
                  • Lightning - Move DG_Lightning[DG_Integer[3]] to source DG_TempPoint3 and target DG_TempPoint1
                  • Custom script: set udg_DG_x[udg_DG_Integer[3]] = GetUnitX(udg_DG_Target[udg_DG_Integer[3]])
                  • Custom script: set udg_DG_y[udg_DG_Integer[3]] = GetUnitY(udg_DG_Target[udg_DG_Integer[3]])
                  • Set DG_zLoc = (Position of DG_Target[DG_Integer[3]])
                  • Custom script: set udg_DG_z[udg_DG_Integer[3]] = GetLocationZ(udg_DG_zLoc)
                  • Set DG_z[DG_Integer[3]] = (DG_z[DG_Integer[3]] + (DG_High[DG_Integer[3]] + DG_AddZTarget[DG_Integer[3]]))
                  • Custom script: call RemoveLocation(udg_DG_zLoc)
                  • Custom script: set udg_DG_x2[udg_DG_Integer[3]] = GetUnitX(udg_DG_Caster[udg_DG_Integer[3]])
                  • Custom script: set udg_DG_y2[udg_DG_Integer[3]] = GetUnitY(udg_DG_Caster[udg_DG_Integer[3]])
                  • Set DG_zLoc = (Position of DG_Caster[DG_Integer[3]])
                  • Custom script: set udg_DG_z2[udg_DG_Integer[3]] = GetLocationZ(udg_DG_zLoc)
                  • Set DG_z2[DG_Integer[3]] = (DG_z2[DG_Integer[3]] + ((Current flying height of DG_Caster[DG_Integer[3]]) + DG_AddZCaster[DG_Integer[3]]))
                  • Custom script: call RemoveLocation(udg_DG_zLoc)
                  • Custom script: call MoveLightningEx(udg_DG_Lightning[udg_DG_Integer[3]], true, udg_DG_x2[udg_DG_Integer[3]], udg_DG_y2[udg_DG_Integer[3]], udg_DG_z2[udg_DG_Integer[3]], udg_DG_x[udg_DG_Integer[3]], udg_DG_y[udg_DG_Integer[3]], udg_DG_z[udg_DG_Integer[3]])
                  • Custom script: call RemoveLocation(udg_DG_TempPoint1)
                  • Custom script: call RemoveLocation(udg_DG_TempPoint2)
                  • Custom script: call RemoveLocation(udg_DG_TempPoint3)
                • Else - Actions
                  • Set DG_RealTimer[DG_Integer[3]] = 0.00
                  • Set DG_TempPoint1 = (Position of DG_Target[DG_Integer[3]])
                  • Special Effect - Create a special effect at DG_TempPoint1 using DG_FinalEffect[DG_Integer[3]]
                  • Special Effect - Destroy (Last created special effect)
                  • Unit - Create 1 Dummy Stun for (Owner of DG_Caster[DG_Integer[3]]) at DG_TempPoint1 facing Default building facing degrees
                  • Unit - Set level of Stun for (Last created unit) to DG_Level[DG_Integer[3]]
                  • Unit - Order (Last created unit) to Neutral - Firebolt DG_Target[DG_Integer[3]]
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • Lightning - Destroy DG_Lightning[DG_Integer[3]]
                  • Unit - Turn collision for DG_Target[DG_Integer[3]] On
                  • Unit - Order DG_Target[DG_Integer[3]] to Attack DG_Caster[DG_Integer[3]]
                  • Unit - Cause DG_Caster[DG_Integer[3]] to damage DG_Target[DG_Integer[3]], dealing DG_Damages[DG_Integer[3]] damage of attack type Spells and damage type Magic
                  • Set DG_FinishAction[DG_Integer[3]] = True
                  • Custom script: call RemoveLocation(udg_DG_TempPoint1)
                  • Set DG_Integer[2] = (DG_Integer[2] - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DG_Integer[2] Equal to 0
                    • Then - Actions
                      • Set DG_Integer[1] = 0
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions
Enjoy it
 
Level 4
Joined
Mar 20, 2010
Messages
107
Hm, I found a problem. Not sure if it was caused by me, or if it is something in the triggers. Got a "Script Errors" window with these errors. All in Death Grip Loop:

set udg_DG_x[udg_DG_Integer[3]] = GetUnitX(udg_DG_Target[udg_DG_Integer[3]])

set udg_DG_y[udg_DG_Integer[3]] = GetUnitY(udg_DG_Target[udg_DG_Integer[3]])

set udg_DG_x2[udg_DG_Integer[3]] = GetUnitX(udg_DG_Caster[udg_DG_Integer[3]])

set udg_DG_y2[udg_DG_Integer[3]] = GetUnitY(udg_DG_Caster[udg_DG_Integer[3]])

call MoveLightningEx(udg_DG_Lightning[udg_DG_Integer[3]], true, udg_DG_x2[udg_DG_Integer[3]], udg_DG_y2[udg_DG_Integer[3]], udg_DG_z2[udg_DG_Integer[3]], udg_DG_x[udg_DG_Integer[3]], udg_DG_y[udg_DG_Integer[3]], udg_DG_z[udg_DG_Integer[3]])

Don't know if anyone knows how to fix it, but it would be great.

EDIT: Tried to copy the triggers again but without success, got the same script errors.
 
Last edited:
Level 4
Joined
Mar 20, 2010
Messages
107
It doesn't seems to be a problem for me. However, I fixed alot problems with the "MoveLightningEx" function that caused the same problem.
Check if you have got the last patch from Battle.net and tell me if it works.

I'm pretty sure I dont got the latest patch. I'm currently using a school computer without administrator rights, due to our school policy, so I cant download new updates on it (my own laptop burned up :p). Is there a way to work around it even if I dont got the new update? :/
 
Level 8
Joined
May 7, 2008
Messages
108
I'm pretty sure I dont got the latest patch. I'm currently using a school computer without administrator rights, due to our school policy, so I cant download new updates on it (my own laptop burned up :p). Is there a way to work around it even if I dont got the new update? :/

Oh I see... But I don't really think you can, sorry :/
Without the new patches, I guess you can play only a few of the maps uploaded on the Hive...

Why would you add a taunt effect when the target is stunned before it?

The stun effect is just something I randomly added, I will as soon as I can add a setting so you can disable it.

EDIT : Fixed.

// 1,000th post

Gratz

--------------

Thanks for commenting everyone
 
Last edited:
Level 18
Joined
Jan 21, 2006
Messages
2,552
I don't think I missed anything, though GUI is not friendly to my eyes.

Review said:
Death Grip

There are a few calculations that could be improved to anticipate various changes to a unit's 3D position throughout the game. If the target unit is hovering then it should not be pulled to the ground and then lifted towards the caster. I would also recommend using some kind of prevention mechanism to stop the spell from being casted on the same unit twice.

It would be outstanding if you could weight multiple casts on the same unit such that if two casters were on the opposite sides of the target then the target would be elevated but not actually move in any particular way, or for 2+ instances on the same target for that matter.

- There's a glitch when the unit is being pulled by a caster that is on a different cliff-level, it seems to be a result of buggy height-control. Here's a screen-shot:



The peasant was pulled from two levels down, and was pulled to an awkward height and ultimately placed in the cliff. Even if you perhaps want this type of functionality you should still fix the height problems.

I think this has something to do with it:

  • Set DG_RealTimer[DG_Integer[3]] = (DG_RealTimer[DG_Integer[3]] + (180.00 / (DG_DistanceTotal[DG_Integer[3]] /
  • DG_Speed[DG_Integer[3]])))
  • Set DG_High[DG_Integer[3]] = ((Sin(DG_RealTimer[DG_Integer[3]])) x DG_HighSettings[DG_Integer[3]])
  • Animation - Change DG_Target[DG_Integer[3]] flying height to DG_High[DG_Integer[3]] at 0.00
I don't see anywhere here where you anticipate any change in height. I think it would be an improvement among other things if you were to implement some sort of calculation that incorporates the height difference.

- Why do you use "DG_Integer[3]" as your loop index? There is no reason to have to refer to an array each time you want to reference this value when you could just as easily use "bj_forLoopAIndex" or the "For Loop Integer A" as it is named in GUI.

- You fail to reset the fly-height of the target unit once it is no longer used. If you've got a unit that hovers (or a flying unit, but I see you've unchecked it in the available targets) it will not reset the fly-height and the hovering unit will be permanently lower to the ground (or until something else resets its fly-height).

- I know that the available targets does not include Flying units, but I think it would be beneficial to the spell if you allowed the user to determine this, and included functionality for these situations in your calculations.

- The values for "Cast Backswing" and "Cast Point" are not 0.00 in your "Dummy Stun" caster unit. This causes the stun to be slightly delayed after the target unit has already been pulled to the caster.

In addition to this, the *speed* of your "Stun" ability is set to 10000, though setting it to 0 will yield an spell that instantly applies the effect to the target.

When you deduct from "DG_DistanceLeft" you need to check "immediately" whether or not the distance is less than 0. If it is, then create your dummy unit there and issue it to stun the target so that there is absolutely no delay in between when the target reaches its destination and when it is stunned.

If you apply all the details I've mentioned above you can also replace the expiration timer on the dummy-caster with a "Unit - Remove" call and just remove it immediately.

I didn't include this in the review, but you have an unused variable named "DG_Group". I'm assuming this is just remnants of previous trials which is why I didn't want it to reflect in my review.
 
Level 8
Joined
May 7, 2008
Messages
108
Ok, I'm trying to fix everything possible.
Thanks for this nice review dude !

About the unused variable, the previous check of the condition in the loop trigger was checking if the caster was already in the global caster group, instead of the current boolean "DG_FinishAction". I'll remove it right now.
 
Level 25
Joined
Jul 10, 2006
Messages
3,315

  • Death Grip cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Death Grip
    • Actions
      • -------- ---------- COMMENTS ---------- --------
      • -------- Please, check the READ ME before starting reading the trigger comments. --------
      • -------- XX Adds one more caster XX --------
      • Set DG_Integer[1] = (DG_Integer[1] + 1)
      • -------- XX Sets the caster XX --------
      • Set DG_Caster[DG_Integer[1]] = (Triggering unit)
      • -------- XX Sets the target XX --------
      • Set DG_Target[DG_Integer[1]] = (Target unit of ability being cast)
      • -------- << Enable/disable the stun effect >> --------
      • Set DG_EnableStun[DG_Integer[1]] = True
      • -------- << Sets the attached effect during the flying effect (must have no animations to work) >> --------
      • Special Effect - Create a special effect attached to the chest of DG_Target[DG_Integer[1]] using Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- << Sets the final effect of Death Grip on the target >> --------
      • Set DG_FinalEffect[DG_Integer[1]] = Abilities\Spells\Items\AIil\AIilTarget.mdl
      • -------- << Adds height to the lightning effect from the caster (0.00 will make the lightning touch the ground) >> --------
      • Set DG_AddZCaster[DG_Integer[1]] = 50.00
      • -------- << Adds height to the lightning effect on the target (0.00 will make the lightning touch the ground) >> --------
      • Set DG_AddZTarget[DG_Integer[1]] = 50.00
      • -------- << Sets the final distance between the caster and the target at the end of the cast >> --------
      • Set DG_FinalDistance[DG_Integer[1]] = 135.00
      • -------- XX Sets the locations XX --------
      • Set DG_TempPoint1 = (Position of DG_Caster[DG_Integer[1]])
      • Set DG_TempPoint2 = (Position of DG_Target[DG_Integer[1]])
      • Set DG_TempPoint3 = (DG_TempPoint1 offset by DG_FinalDistance[DG_Integer[1]] towards (Angle from DG_TempPoint1 to DG_TempPoint2) degrees)
      • -------- XX Sets the angle between the final destination and the first location of the target XX --------
      • Set DG_AngleFacing[DG_Integer[1]] = (Angle from DG_TempPoint1 to DG_TempPoint2)
      • -------- XX Sets the distance between the final destination and the first location of the target XX --------
      • Set DG_DistanceTotal[DG_Integer[1]] = (Distance between DG_TempPoint2 and DG_TempPoint3)
      • -------- XX Sets the distance left to the total distance XX --------
      • Set DG_DistanceLeft[DG_Integer[1]] = DG_DistanceTotal[DG_Integer[1]]
      • -------- XX Sets the level XX --------
      • Set DG_Level[DG_Integer[1]] = (Level of (Ability being cast) for DG_Caster[DG_Integer[1]])
      • -------- << Sets if the targeted unit will be forced to attack the caster (TRUE = yes, FLASE = no) >> --------
      • Set DG_Attack[DG_Integer[1]] = True
      • -------- << Sets the damages >> --------
      • Set DG_Damages[DG_Integer[1]] = (((Real(DG_Level[DG_Integer[1]])) x 0.15) x DG_DistanceTotal[DG_Integer[1]])
      • -------- << Sets the speed of the grip effect >> --------
      • Set DG_Speed[DG_Integer[1]] = 25.00
      • -------- << Sets the arc of the grip effect >> --------
      • Set DG_HighArc[DG_Integer[1]] = 0.55
      • -------- XX Compiles the total distance with the high arc to form the high settings XX --------
      • Set DG_HighSettings[DG_Integer[1]] = (DG_DistanceTotal[DG_Integer[1]] x DG_HighArc[DG_Integer[1]])
      • -------- << IMPORTANT : Make sure that the spell here matches with the Stun dummy ability >> --------
      • Set DG_StunAbility[DG_Integer[1]] = Stun
      • -------- << Sets the lightning effect >> --------
      • Lightning - Create a Finger of Death lightning effect from source DG_TempPoint3 to target DG_TempPoint2
      • Set DG_Lightning[DG_Integer[1]] = (Last created lightning effect)
      • -------- XX Resets the action for bolean condition in loop XX --------
      • Set DG_FinishAction[DG_Integer[1]] = False
      • -------- XX Checks if the target is a flying unit (if so, saves its current height to reset it at the end of the loop trigger) XX --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (DG_Target[DG_Integer[1]] is A flying unit) Equal to True
        • Then - Actions
          • Set DG_DefaultHeight[DG_Integer[1]] = (Default flying height of DG_Target[DG_Integer[1]])
          • -------- << Sets the speed of the flying unit being reset >> --------
          • Set DG_HeightSpeedReset[DG_Integer[1]] = 150.00
          • -------- << Adds a height value for the arc effect due to air unit >> --------
          • Set DG_AddedFlyingHeightForAir[DG_Integer[1]] = DG_DefaultHeight[DG_Integer[1]]
        • Else - Actions
      • -------- XX Checks to autorize the high changes of the Target XX --------
      • Unit - Add Crow Form to DG_Target[DG_Integer[1]]
      • Unit - Remove Crow Form from DG_Target[DG_Integer[1]]
      • -------- XX Stops collision of the target with ground objects XX --------
      • Unit - Turn collision for DG_Target[DG_Integer[1]] Off
      • -------- XX Removing Locations XX --------
      • Custom script: call RemoveLocation(udg_DG_TempPoint1)
      • Custom script: call RemoveLocation(udg_DG_TempPoint2)
      • Custom script: call RemoveLocation(udg_DG_TempPoint3)
      • -------- XXXXXXXXXXXXXXXXXXXXXXX --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DG_Integer[2] Equal to 0
        • Then - Actions
          • Trigger - Turn on Death Grip loop <gen>
        • Else - Actions
      • Set DG_Integer[2] = (DG_Integer[2] + 1)



  • Death Grip loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer DG_Integer[3]) from 1 to DG_Integer[1], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DG_FinishAction[DG_Integer[3]] Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DG_DistanceLeft[DG_Integer[3]] Greater than 0.00
                • Then - Actions
                  • Set DG_DistanceLeft[DG_Integer[3]] = (DG_DistanceLeft[DG_Integer[3]] - DG_Speed[DG_Integer[3]])
                  • Set DG_TempPoint1 = (Position of DG_Caster[DG_Integer[3]])
                  • Set DG_TempPoint2 = (DG_TempPoint1 offset by DG_FinalDistance[DG_Integer[3]] towards DG_AngleFacing[DG_Integer[3]] degrees)
                  • Set DG_TempPoint3 = (DG_TempPoint2 offset by DG_DistanceLeft[DG_Integer[3]] towards DG_AngleFacing[DG_Integer[3]] degrees)
                  • Unit - Move DG_Target[DG_Integer[3]] instantly to DG_TempPoint3
                  • Set DG_RealTimer[DG_Integer[3]] = (DG_RealTimer[DG_Integer[3]] + (180.00 / (DG_DistanceTotal[DG_Integer[3]] / DG_Speed[DG_Integer[3]])))
                  • Set DG_High[DG_Integer[3]] = ((Sin(DG_RealTimer[DG_Integer[3]])) x DG_HighSettings[DG_Integer[3]])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (DG_Target[DG_Integer[3]] is A flying unit) Equal to True
                    • Then - Actions
                      • Set DG_AdditionToHeightForAir[DG_Integer[3]] = ((Distance between DG_TempPoint1 and DG_TempPoint3) x (DG_AddedFlyingHeightForAir[DG_Integer[3]] / 666.00))
                      • Set DG_High[DG_Integer[3]] = (DG_High[DG_Integer[3]] + DG_AdditionToHeightForAir[DG_Integer[3]])
                    • Else - Actions
                  • Animation - Change DG_Target[DG_Integer[3]] flying height to DG_High[DG_Integer[3]] at 0.00
                  • Lightning - Move DG_Lightning[DG_Integer[3]] to source DG_TempPoint3 and target DG_TempPoint1
                  • Custom script: set udg_DG_x[udg_DG_Integer[3]] = GetUnitX(udg_DG_Target[udg_DG_Integer[3]])
                  • Custom script: set udg_DG_y[udg_DG_Integer[3]] = GetUnitY(udg_DG_Target[udg_DG_Integer[3]])
                  • Set DG_zLoc = (Position of DG_Target[DG_Integer[3]])
                  • Custom script: set udg_DG_z[udg_DG_Integer[3]] = GetLocationZ(udg_DG_zLoc)
                  • Set DG_z[DG_Integer[3]] = (DG_z[DG_Integer[3]] + (DG_High[DG_Integer[3]] + DG_AddZTarget[DG_Integer[3]]))
                  • Custom script: call RemoveLocation(udg_DG_zLoc)
                  • Custom script: set udg_DG_x2[udg_DG_Integer[3]] = GetUnitX(udg_DG_Caster[udg_DG_Integer[3]])
                  • Custom script: set udg_DG_y2[udg_DG_Integer[3]] = GetUnitY(udg_DG_Caster[udg_DG_Integer[3]])
                  • Set DG_zLoc = (Position of DG_Caster[DG_Integer[3]])
                  • Custom script: set udg_DG_z2[udg_DG_Integer[3]] = GetLocationZ(udg_DG_zLoc)
                  • Set DG_z2[DG_Integer[3]] = (DG_z2[DG_Integer[3]] + ((Current flying height of DG_Caster[DG_Integer[3]]) + DG_AddZCaster[DG_Integer[3]]))
                  • Custom script: call RemoveLocation(udg_DG_zLoc)
                  • Custom script: call MoveLightningEx(udg_DG_Lightning[udg_DG_Integer[3]], true, udg_DG_x2[udg_DG_Integer[3]], udg_DG_y2[udg_DG_Integer[3]], udg_DG_z2[udg_DG_Integer[3]], udg_DG_x[udg_DG_Integer[3]], udg_DG_y[udg_DG_Integer[3]], udg_DG_z[udg_DG_Integer[3]])
                  • Custom script: call RemoveLocation(udg_DG_TempPoint1)
                  • Custom script: call RemoveLocation(udg_DG_TempPoint2)
                  • Custom script: call RemoveLocation(udg_DG_TempPoint3)
                • Else - Actions
                  • Set DG_RealTimer[DG_Integer[3]] = 0.00
                  • Set DG_TempPoint1 = (Position of DG_Target[DG_Integer[3]])
                  • Special Effect - Create a special effect at DG_TempPoint1 using DG_FinalEffect[DG_Integer[3]]
                  • Special Effect - Destroy (Last created special effect)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (DG_Target[DG_Integer[3]] is A flying unit) Equal to True
                    • Then - Actions
                      • Animation - Change DG_Target[DG_Integer[3]] flying height to DG_DefaultHeight[DG_Integer[3]] at DG_HeightSpeedReset[DG_Integer[3]]
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DG_EnableStun[DG_Integer[3]] Equal to True
                    • Then - Actions
                      • Unit - Create 1 Dummy Stun for (Owner of DG_Caster[DG_Integer[3]]) at DG_TempPoint1 facing Default building facing degrees
                      • Unit - Set level of Stun for (Last created unit) to DG_Level[DG_Integer[3]]
                      • Unit - Order (Last created unit) to Neutral - Firebolt DG_Target[DG_Integer[3]]
                      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DG_Attack[DG_Integer[3]] Equal to True
                    • Then - Actions
                      • Unit - Order DG_Target[DG_Integer[3]] to Attack DG_Caster[DG_Integer[3]]
                    • Else - Actions
                  • Lightning - Destroy DG_Lightning[DG_Integer[3]]
                  • Unit - Turn collision for DG_Target[DG_Integer[3]] On
                  • Unit - Cause DG_Caster[DG_Integer[3]] to damage DG_Target[DG_Integer[3]], dealing DG_Damages[DG_Integer[3]] damage of attack type Spells and damage type Magic
                  • Set DG_FinishAction[DG_Integer[3]] = True
                  • Custom script: call RemoveLocation(udg_DG_TempPoint1)
                  • Set DG_Integer[2] = (DG_Integer[2] - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DG_Integer[2] Equal to 0
                    • Then - Actions
                      • Set DG_Integer[1] = 0
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions



  • Show damages
    • Events
      • Player - Player 1 (Red) types a chat message containing -damages as An exact match
      • Player - Player 2 (Blue) types a chat message containing -damages as An exact match
      • Player - Player 3 (Teal) types a chat message containing -damages as An exact match
      • Player - Player 4 (Purple) types a chat message containing -damages as An exact match
      • Player - Player 5 (Yellow) types a chat message containing -damages as An exact match
      • Player - Player 6 (Orange) types a chat message containing -damages as An exact match
      • Player - Player 7 (Green) types a chat message containing -damages as An exact match
      • Player - Player 8 (Pink) types a chat message containing -damages as An exact match
      • Player - Player 9 (Gray) types a chat message containing -damages as An exact match
      • Player - Player 10 (Light Blue) types a chat message containing -damages as An exact match
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DamagesShown[(Player number of (Triggering player))] Equal to False
        • Then - Actions
          • Game - Display to (Player group((Triggering player))) the text: |cffffcc00Damages s...
          • Set DamagesShown[(Player number of (Triggering player))] = True
        • Else - Actions
          • Game - Display to (Player group((Triggering player))) the text: |cffffcc00Damages s...
          • Set DamagesShown[(Player number of (Triggering player))] = False



  • Start damages
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set TempGroup = (Units in (Playable map area))
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Trigger - Add to Show text damages <gen> the event (Unit - (Picked unit) Takes damage)
      • Custom script: call RemoveLocation(udg_TempPoint)



  • Add damages
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
    • Actions
      • Trigger - Add to Show text damages <gen> the event (Unit - (Entering unit) Takes damage)



  • Show text damages
    • Events
    • Conditions
      • (Damage taken) Greater than 0.00
    • Actions
      • Set DamagesTaken = (Integer((Damage taken)))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DamagesShown[(Player number of (Owner of (Damage source)))] Equal to True
        • Then - Actions
          • Set TempPoint = (Position of (Triggering unit))
          • Floating Text - Create floating text that reads (|cffFF5A29 + (String(DamagesTaken))) at TempPoint with Z offset 0.00, using font size 12.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
          • Floating Text - Set the velocity of (Last created floating text) to 100.00 towards 90.00 degrees
          • Floating Text - Change (Last created floating text): Disable permanence
          • Floating Text - Change the lifespan of (Last created floating text) to 4.00 seconds
          • Floating Text - Change the fading age of (Last created floating text) to 2.00 seconds
          • Floating Text - Hide (Last created floating text) for (All players)
          • Floating Text - Show (Last created floating text) for (Player group((Owner of (Damage source))))
          • Custom script: call RemoveLocation(udg_TempPoint)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DamagesShown[(Player number of (Owner of (Triggering unit)))] Equal to True
        • Then - Actions
          • Set TempPoint = (Position of (Triggering unit))
          • Floating Text - Create floating text that reads (|cff5A197B + (String(DamagesTaken))) at TempPoint with Z offset 0.00, using font size 12.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
          • Floating Text - Set the velocity of (Last created floating text) to 100.00 towards 90.00 degrees
          • Floating Text - Change (Last created floating text): Disable permanence
          • Floating Text - Change the lifespan of (Last created floating text) to 4.00 seconds
          • Floating Text - Change the fading age of (Last created floating text) to 2.00 seconds
          • Floating Text - Hide (Last created floating text) for (All players)
          • Floating Text - Show (Last created floating text) for (Player group((Owner of (Triggering unit))))
          • Custom script: call RemoveLocation(udg_TempPoint)
        • Else - Actions
 
Top