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

L_D_X 4 throw effect spells 0.01

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
the hero cast 4 spells who have different effects
all spells are point target and GUI
Lord-Demon_X have create this spell

Keywords:
spells,GUI,4,throw
Contents

Any Warcraft III map (Map)

Reviews
12th Dec 2015 IcemanBo: For long time as NeedsFix. Rejected. Bribe: >Leaks plenty >Use Triggering unit not Casting unit >Use 0.03 second periodic event, not 0.01, that will produce some bad lag >Not MUI (using waits and not using indexing)...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: For long time as NeedsFix. Rejected.

Bribe:

>Leaks plenty
>Use Triggering unit not Casting unit
>Use 0.03 second periodic event, not 0.01, that will produce some bad lag
>Not MUI (using waits and not using indexing)
>No configurables

Overall, needs lots and lots and lots of work. Please ask for help in the Triggers & Scripts section how to make these spells MUI, efficient and leakless
 
Level 10
Joined
Apr 25, 2009
Messages
296
Post the triggers in [HIDDEN="text"][TRIGGER][/TRIGGER][/HIDDEN] tags.

I suggest that you improve your description.

Lord-Demon_X have create this spell
I assume that's you... if not, I hope you have proof of permission to upload these spells from him/her.

  • Thunder Cross Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Thunder Cross
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between (Position of (Casting unit)) and (Target point of ability being cast)) Less than 250.00
        • Then - Actions
          • Unit - Order (Casting unit) to Stop
          • Game - Display to (Player group((Owner of (Casting unit)))) for 2.00 seconds the text: ...
        • Else - Actions
          • Set Caster = (Casting unit)
          • Unit - Create 1 (thunder cross) for (Owner of (Casting unit)) at ((Position of (Casting unit)) offset by 100.00 towards (Facing of (Casting unit)) degrees) facing (Facing of (Casting unit)) degrees
          • Set Dummy[0] = (Last created unit)
          • Set Point[0] = (Target point of ability being cast)
          • Set Distance_1 = (Distance between (Position of (Casting unit)) and Point[0])
          • Set Boolean[0] = True
  • Thunder Cross Loop
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
      • Boolean[0] Equal to True
    • Actions
      • Unit - Move Dummy[0] instantly to ((Position of Dummy[0]) offset by 5.00 towards (Facing of Dummy[0]) degrees)
      • Set Distance_1 = (Distance_1 - 5.00)
  • Thunder Cross End
    • Events
      • Game - Distance_1 becomes Less than or equal to 0.00
    • Conditions
      • Boolean[0] Equal to True
    • Actions
      • Unit - Kill Dummy[0]
      • -------- here you can change the size of the AoE --------
      • Lightning - Create a Chain Lightning - Primary lightning effect from source (Point[0] offset by 275.00 towards 45.00 degrees) to target (Point[0] offset by 275.00 towards 225.00 degrees)
      • Set Lighting[0] = (Last created lightning effect)
      • Lightning - Create a Chain Lightning - Primary lightning effect from source (Point[0] offset by 275.00 towards 135.00 degrees) to target (Point[0] offset by 275.00 towards 315.00 degrees)
      • Set Lighting[1] = (Last created lightning effect)
      • Set Boolean[0] = False
      • -------- here you can change the damage in the AoE --------
      • Unit Group - Pick every unit in (Units within 550.00 of Point[0] matching (((Matching unit) belongs to an enemy of (Owner of Caster)) Equal to True)) and do (Actions)
        • Loop - Actions
          • Unit - Cause Caster to damage (Picked unit), dealing (225.00 x (Real((Level of Thunder Cross for Caster)))) damage of attack type Spells and damage type Normal
      • Wait 0.50 seconds
      • -------- the cross disappear --------
      • Lightning - Destroy Lighting[0]
      • Lightning - Destroy Lighting[1]
  • Wisp of Chaos Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Wisp of Chaos
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between (Position of (Casting unit)) and (Target point of ability being cast)) Less than 350.00
        • Then - Actions
          • Unit - Order (Casting unit) to Stop
          • Game - Display to (Player group((Owner of (Casting unit)))) for 2.00 seconds the text: ...
        • Else - Actions
          • Set Caster = (Casting unit)
          • Unit - Create 1 (wisp of chaos) for (Owner of (Casting unit)) at ((Position of (Casting unit)) offset by 100.00 towards (Facing of (Casting unit)) degrees) facing (Facing of (Casting unit)) degrees
          • Set Dummy[1] = (Last created unit)
          • Set Point[1] = (Target point of ability being cast)
          • Set Distance_2 = (Distance between (Position of (Casting unit)) and Point[1])
          • Set Boolean[1] = True
          • Set Boolean[2] = True
  • Wisp of Chaos Loop
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
      • Boolean[1] Equal to True
    • Actions
      • Unit - Move Dummy[1] instantly to ((Position of Dummy[1]) offset by 5.00 towards (Facing of Dummy[1]) degrees)
      • Set Point[3] = (Position of Dummy[1])
      • Set Distance_2 = (Distance_2 - 5.00)
  • Wisp of Chaos Circle
    • Events
      • Game - Distance_2 becomes Less than or equal to 500.00
    • Conditions
      • Boolean[2] Equal to True
    • Actions
      • -------- you can change the circle size --------
      • Lightning - Create a Chain Lightning - Primary lightning effect from source (Position of Dummy[1]) to target ((Position of Dummy[1]) offset by 350.00 towards ((Facing of Dummy[1]) + 90.00) degrees)
      • Set Lighting[2] = (Last created lightning effect)
      • Set Rotation[0] = ((Facing of Dummy[1]) + 90.00)
      • Lightning - Create a Finger of Death lightning effect from source (Position of Dummy[1]) to target ((Position of Dummy[1]) offset by 350.00 towards ((Facing of Dummy[1]) - 90.00) degrees)
      • Set Lighting[3] = (Last created lightning effect)
      • Set Rotation[1] = ((Facing of Dummy[1]) - 90.00)
      • Set Boolean[2] = False
      • Set Boolean[3] = True
  • Wisp of Chaos Circle Rotation
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
      • Boolean[3] Equal to True
    • Actions
      • -------- you can change the rotation speed --------
      • Set Rotation[0] = (Rotation[0] + 2.00)
      • Lightning - Move Lighting[2] to source Point[3] and target (Point[3] offset by 350.00 towards Rotation[0] degrees)
      • Set Rotation[1] = (Rotation[1] + 2.00)
      • Lightning - Move Lighting[3] to source Point[3] and target (Point[3] offset by 350.00 towards Rotation[1] degrees)
  • Wisp of Chaos End
    • Events
      • Game - Distance_2 becomes Less than or equal to 0.00
    • Conditions
      • Boolean[1] Equal to True
    • Actions
      • -------- here you can change the damage in the AoE --------
      • Unit Group - Pick every unit in (Units within 700.00 of Point[3] matching (((Matching unit) belongs to an enemy of (Owner of Caster)) Equal to True)) and do (Actions)
        • Loop - Actions
          • Unit - Cause Caster to damage (Picked unit), dealing (250.00 x (Real((Level of Wisp of Chaos for Caster)))) damage of attack type Spells and damage type Normal
      • -------- the circle disappear --------
      • Unit - Kill Dummy[1]
      • Wait 0.50 seconds
      • Lightning - Destroy Lighting[2]
      • Lightning - Destroy Lighting[3]
      • Set Boolean[3] = False
      • Set Boolean[1] = False
  • Burning Hearth Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Burning Hearth
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between (Position of (Casting unit)) and (Target point of ability being cast)) Less than 350.00
        • Then - Actions
          • Unit - Order (Casting unit) to Stop
          • Game - Display to (Player group((Owner of (Casting unit)))) for 2.00 seconds the text: ...
        • Else - Actions
          • Set Caster = (Casting unit)
          • Unit - Create 1 (burning hearth) for (Owner of (Casting unit)) at ((Position of (Casting unit)) offset by 100.00 towards (Facing of (Casting unit)) degrees) facing (Facing of (Casting unit)) degrees
          • Set Dummy[2] = (Last created unit)
          • Set Point[4] = (Target point of ability being cast)
          • Set Distance_3 = (Distance between (Position of (Casting unit)) and Point[4])
          • Set Boolean[4] = True
  • Burning Hearth Loop
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
      • Boolean[4] Equal to True
    • Actions
      • Unit - Move Dummy[2] instantly to ((Position of Dummy[2]) offset by 5.00 towards (Facing of Dummy[2]) degrees)
      • Set Distance_3 = (Distance_3 - 5.00)
  • Burning Hearth End
    • Events
      • Game - Distance_3 becomes Less than or equal to 0.00
    • Conditions
      • Boolean[4] Equal to True
    • Actions
      • Unit - Create 1 (burning hearth) for (Owner of Dummy[2]) at (Position of Dummy[2]) facing Default building facing degrees
      • Set Dummy[3] = (Last created unit)
      • Set Boolean[4] = False
      • Unit - Kill Dummy[2]
      • Unit - Order Dummy[3] to Human Blood Mage - Flame Strike (Position of Dummy[3])
      • Unit Group - Pick every unit in (Units within 200.00 of (Target point of ability being cast) matching (((Matching unit) has buff Burning Hearth ) Equal to True)) and do (Unit - Cause Caster to damage (Picked unit), dealing (300.00 x (Real((Level of Burning Hearth for Caster)))) damage of attack type Spells and damage type Normal)
  • Burning Hearth Fire
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in (Units in (Playable map area) matching (((Matching unit) has buff Burning Hearth ) Equal to True)) and do (Unit - Cause Caster to damage (Picked unit), dealing (30.00 x (Real((Level of Burning Hearth for Caster)))) damage of attack type Spells and damage type Normal)
  • Tornado of Doom Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Tornado of Doom
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between (Position of (Casting unit)) and (Target point of ability being cast)) Less than 250.00
        • Then - Actions
          • Unit - Order (Casting unit) to Stop
          • Game - Display to (Player group((Owner of (Casting unit)))) for 2.00 seconds the text: ...
        • Else - Actions
          • Set Caster = (Casting unit)
          • Unit - Create 1 (tornado of doom) for (Owner of (Casting unit)) at ((Position of (Casting unit)) offset by 100.00 towards (Facing of (Casting unit)) degrees) facing (Facing of (Casting unit)) degrees
          • Set Dummy[5] = (Last created unit)
          • Set Point[5] = (Target point of ability being cast)
          • Set Distance_4 = (Distance between (Position of (Casting unit)) and Point[5])
          • Set Boolean[5] = True
  • Tornado of Doom Loop
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
      • Boolean[5] Equal to True
    • Actions
      • Unit - Move Dummy[5] instantly to ((Position of Dummy[5]) offset by 5.00 towards (Facing of Dummy[5]) degrees)
      • Set Distance_4 = (Distance_4 - 5.00)
  • Tornado of Doom End
    • Events
      • Game - Distance_4 becomes Less than or equal to 0.00
    • Conditions
      • Boolean[5] Equal to True
    • Actions
      • Unit - Kill Dummy[5]
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • Unit - Create 1 (tornado of doom) for (Owner of Caster) at Point[5] facing Default building facing degrees
          • Unit - Order (Last created unit) to Undead Crypt Lord - Impale ((Position of (Last created unit)) offset by 350.00 towards ((Real((Integer A))) x 60.00) degrees)
      • Set Boolean[5] = False
  • Tornado of Doom Stun
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in (Units in (Playable map area) matching (((Matching unit) has buff Tornado ) Equal to True)) and do (Unit - Cause Caster to damage (Picked unit), dealing (30.00 x (Real((Level of Tornado of Doom for Caster)))) damage of attack type Spells and damage type Normal)
------------------------------------------------------------------------------------------
"Spells must be free of bugs, leaks, unreasonable lag, and must be fully multiinstanceable."

Try casting the spells with two different units... it doesn't work great. Spells must be fully MUI, means that more than one unit may cast the spell at the same time and have it work.

Suggestions: Hashtables

You use arrayed variables [#] in places that you don't need 'em. They take up more memory and are usually slower. Make another variable and de-array the ones that are using the arrays.

  • Set Lighting[0] = (Last created lightning effect)
  • Set Lighting[1] = (Last created lightning effect)
  • //Change that to:
  • Set LightningA = (Last created lightning effect)
  • Set LightningB = (Last created lightning effect)
A loop of .01 is waaaay to fast. Use .03 for the best results. Also, you should turn on/off the loops when they're not in use, as it helps reduce lagg.

Position of (Caster) or any (Position of (Unit)) leaks, set it to a variable and destroy it when done.

  • Set (YourPoint) = Position of (Caster)
  • //
  • //End of spell
  • Custom script: call RemoveLocation(udg_(YourPoint))
=====================================================

  • Wait 0.50 seconds
Waits usually prevent spells from being MUI, unless you're dealing with locals... still, they're not great. I suggest using a loop and increasing a integer to avoid this...

You use 2+ loops per spell. You should merge the loops, and its more efficient and can help reduce the map file size... slightly.

  • Unit Group - Pick every unit in (Units within 700.00 of Point[3] matching (((Matching unit) belongs to an enemy of (Owner of Caster)) Equal to True)) and do (Actions)
    • Loop - Actions
  • //This leaks. Use this to prevent it:
  • //
  • //
  • Custom script: set bj_wantDestroyGroup = true
  • Unit Group - Pick every unit in (Units within 700.00 of Point[3] matching (((Matching unit) belongs to an enemy of (Owner of Caster)) Equal to True)) and do (Actions)
    • Loop - Actions
============================================

  • Unit - Order Dummy[3] to Human Blood Mage - Flame Strike (Position of Dummy[3])
The caster does not inflict damage with this... the dummy unit does. This can conflict with systems...

============================================

  • For each (Integer A) from 1 to 6, do (Actions)
    • Loop - Actions
      • Unit - Create 1 (tornado of doom) for (Owner of Caster) at Point[5] facing Default building facing degrees
      • Unit - Order (Last created unit) to Undead Crypt Lord - Impale ((Position of (Last created unit)) offset by 350.00 towards ((Real((Integer A))) x 60.00) degrees)
Don't use (Integer A), use a variable... its more efficient.

===============================

Instead of creating lightning effects in GUI, you may create it in custom script and apply height (Z), which makes lightning look alot better.

  • Custom script: set udg_Lightning = AddLightningEx(udg_LightningType, true , GetLocationX(udg_P), GetLocationY(udg_P), GetLocationZ(udg_P) + (udg_Height), GetLocationX(udg_P2), GetLocationY(udg_P2), GetLocationZ(udg_P2) + (udg_Height2) )

===============================
===============================

~Needs some work~
 
Last edited:
Top