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

Spellpack by Foopad ver 1.02

  • Like
Reactions: MortAr
This contains 6 spells. It's all GUI, MUI and hopefully leakless, I've made this in a couple of days, so I hope it's okay.
There's documentation on how to import and use, plus I've commented the spells so the configurable variables are easy to change :).
Requires nothing but normal WE.


Arcane Profanity
Tranforms the caster into a flying orb. The orb will shoot nearby enemies. The orb makes you unable to be aggroed, although you can take damage for the duration of the orb.

Fiery Wrath
Encircles the unit in a fiery hell, enveloping the targeted unit and nearby others in flames causing damage. Damage scales with level and intelligence.

Persistancy
Gives a chance to cast the same ability again from the casted location. Note: You need to manually address the spells when importing this trigger. That is, if you're not using the ones I supplied. PM me, if you're having trouble with this.

Lightning Strike
Calls upon the weather to assist you, lightning will strike in a circle around, continuelsy for a duration.

Heat Ripple
Sends out 4 waves of fiery doom, the 4 waves are at a random direction each time. When casted it also gives that caster 10% attack bonus for 10 seconds.

Freezing Spiral
Emits a freezing roar, generating a spiral of frozen death. Also slows units by 20%



Version 1.00
Added Freezing Spiral
Added Heat Ripple
Added "Codes" to the Hive
Improved some trigger documentation
Added importation advice.

Version 1.01
Fixed a MUI bug with Lightning Strike, it now works perfectly.

Version 1.02 fixed the rest of TempIndexes



Arcane Profanity
  • Arcane Profanity
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to |c000f1effArcane Profanityr
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AP_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Arcane Profanity Loop <gen>
        • Else - Actions
      • Set AP_Index_Size = (AP_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AP_Index_Size Greater than AP_Index_maxSize
        • Then - Actions
          • Set AP_Index[AP_Index_Size] = AP_Index_Size
          • Set AP_Index_maxSize = AP_Index_Size
        • Else - Actions
      • Set APTempIndex = AP_Index[AP_Index_Size]
      • Set TempLoc = (Position of (Triggering unit))
      • Set TempLoc2 = (Target point of ability being cast)
      • Set AP_CASTER[APTempIndex] = (Triggering unit)
      • Unit - Create 1 Dummy (Arcane Profanity) for (Owner of AP_CASTER[APTempIndex]) at TempLoc facing (Angle from TempLoc to TempLoc2) degrees
      • Unit - Turn collision for (Last created unit) Off
      • Unit - Move (Last created unit) instantly to TempLoc
      • Set AP_MISSILE[APTempIndex] = (Last created unit)
      • Set AP_ANGLE[APTempIndex] = (Angle from TempLoc to TempLoc2)
      • -------- --------------------------------------------------------------------------- Changeable Variables START --------------------------------------------------------------------------- --------
      • Set AP_SPEED[APTempIndex] = (15.00 + (Current movement speed of AP_CASTER[TempIndex]))
      • Set AP_DUR[APTempIndex] = 2.00
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • Unit - Hide AP_CASTER[APTempIndex]
      • Unit - Set level of Arcane Profanity (Dummy) for AP_MISSILE[APTempIndex] to (Level of |c000f1effArcane Profanityr for AP_CASTER[APTempIndex])
      • Custom script: call RemoveLocation(udg_TempLoc)
      • Custom script: call RemoveLocation(udg_TempLoc2)
  • Arcane Profanity Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer SPELL_LOOP) from 1 to AP_Index_Size, do (Actions)
        • Loop - Actions
          • Set APTempIndex = AP_Index[SPELL_LOOP]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AP_DUR[APTempIndex] Greater than 0.00
            • Then - Actions
              • Set TempLoc = (Position of AP_MISSILE[APTempIndex])
              • Set TempLoc2 = (TempLoc offset by AP_SPEED[APTempIndex] towards AP_ANGLE[APTempIndex] degrees)
              • Unit - Move AP_MISSILE[APTempIndex] instantly to TempLoc2, facing AP_ANGLE[APTempIndex] degrees
              • Unit - Move AP_CASTER[APTempIndex] instantly to TempLoc2, facing AP_ANGLE[APTempIndex] degrees
              • Set AP_DUR[APTempIndex] = (AP_DUR[APTempIndex] - 0.03)
              • Custom script: call RemoveLocation(udg_TempLoc)
              • Custom script: call RemoveLocation(udg_TempLoc2)
            • Else - Actions
              • Unit - Unhide AP_CASTER[APTempIndex]
              • Unit - Rescue AP_CASTER[TempIndex] for (Owner of AP_CASTER[TempIndex]) and Retain color
              • -------- Destroy handles --------
              • Unit - Kill AP_MISSILE[APTempIndex]
              • -------- RecycleIndex --------
              • Set AP_Index[SPELL_LOOP] = AP_Index[AP_Index_Size]
              • Set AP_Index[AP_Index_Size] = APTempIndex
              • Set AP_Index_Size = (AP_Index_Size - 1)
              • Set SPELL_LOOP = (SPELL_LOOP - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AP_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Fiery Wrath
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to |c00ff1e28Fiery Wrath|r
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FW_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Fiery Wrath Loop <gen>
        • Else - Actions
      • Set FW_Index_Size = (FW_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FW_Index_Size Greater than FW_Index_maxSize
        • Then - Actions
          • Set FW_Index[FW_Index_Size] = FW_Index_Size
          • Set FW_Index_maxSize = FW_Index_Size
        • Else - Actions
      • Set FW_TempInt = FW_Index[FW_Index_Size]
      • Set TempLoc6[TempIndex] = (Target point of ability being cast)
      • Set FW_Caster[TempIndex] = (Triggering unit)
      • -------- --------------------------------------------------------------------------- Changeable Variables --------------------------------------------------------------------------- --------
      • -------- FW_Dur, is the duration of the spell. It means how long the spell will continue, do not mind the [TempIndex]. If you change this the spell will last longer. --------
      • Set FW_Dur[TempIndex] = 2.00
      • -------- FW_AoE is the range of which the spell damages. If you increase this, units outside the effects will be hit aswell. --------
      • Set FW_AoE = 150.00
      • -------- FW_IntialDamage is the amount of damage done once on the target and nearby units, increasing this will do more damage at first. --------
      • Set FW_IntialDamage[TempIndex] = ((Real((Level of (Ability being cast) for FW_Caster[TempIndex]))) x (75.00 + (Real((Intelligence of FW_Caster[TempIndex] (Include bonuses))))))
      • -------- FW_DOT is the damage the spell does over time, therefore the term DOT - Damage over Time. Increase this if you want more damage overtime. --------
      • Set FW_DOT[TempIndex] = (0.03 x (FW_IntialDamage[TempIndex] - 70.00))
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • -------- --------------------------------------------------------------------------- Effects START --------------------------------------------------------------------------- --------
      • Special Effect - Create a special effect at TempLoc6[TempIndex] using Abilities\Spells\Orc\AncestralSpirit\AncestralSpiritCaster.mdl
      • Set FW_Effect1[TempIndex] = (Last created special effect)
      • Special Effect - Create a special effect at TempLoc6[TempIndex] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • Special Effect - Create a special effect at TempLoc6[TempIndex] using Abilities\Spells\Human\FlameStrike\FlameStrike1.mdl
      • Set FW_Effect2[TempIndex] = (Last created special effect)
      • -------- --------------------------------------------------------------------------- Effects STOP --------------------------------------------------------------------------- --------
      • -------- --------------------------------------------------------------------------- Intial Damage --------------------------------------------------------------------------- --------
      • Custom script: set bj_wantDestroyGroup=true
      • Unit Group - Pick every unit in (Units within FW_AoE of TempLoc6[TempIndex]) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • And - All (Conditions) are true
                • Conditions
                  • (FW_Caster[TempIndex] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                  • (Life of (Picked unit)) Greater than 0.41
            • Then - Actions
              • Unit - Cause FW_Caster[TempIndex] to damage (Picked unit), dealing FW_IntialDamage[TempIndex] damage of attack type Spells and damage type Normal
            • Else - Actions
  • Fiery Wrath Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer FW_LOOP) from 1 to FW_Index_Size, do (Actions)
        • Loop - Actions
          • Set FW_TempInt = FW_Index[FW_LOOP]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FW_Dur[TempIndex] Greater than 0.00
            • Then - Actions
              • Set FW_Dur[TempIndex] = (FW_Dur[TempIndex] - 0.03)
              • Custom script: set bj_wantDestroyGroup=true
              • Unit Group - Pick every unit in (Units within FW_AoE of TempLoc6[TempIndex]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (FW_Caster[TempIndex] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause FW_Caster[TempIndex] to damage (Picked unit), dealing FW_DOT[TempIndex] damage of attack type Spells and damage type Normal
                    • Else - Actions
            • Else - Actions
              • -------- Destroy handles --------
              • Custom script: call RemoveLocation(udg_TempLoc6 [udg_TempIndex])
              • Special Effect - Destroy FW_Effect2[TempIndex]
              • Special Effect - Destroy FW_Effect1[TempIndex]
              • -------- RecycleIndex --------
              • Set FW_Index[FW_LOOP] = FW_Index[FW_Index_Size]
              • Set FW_Index[FW_Index_Size] = FW_TempInt
              • Set FW_Index_Size = (FW_Index_Size - 1)
              • Set FW_LOOP = (FW_LOOP - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FW_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Lightning Strike
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to |c0080bcfaLightning Strike|r
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LS_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Lightning Strike Loop <gen>
        • Else - Actions
      • Set LS_Index_Size = (LS_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LS_Index_Size Greater than LS_Index_maxSize
        • Then - Actions
          • Set LS_Index[LS_Index_Size] = LS_Index_Size
          • Set LS_Index_maxSize = LS_Index_Size
        • Else - Actions
      • Set LS_TempInt = LS_Index[LS_Index_Size]
      • -------- --------------------------------------------------------------------------- Changeable Variables --------------------------------------------------------------------------- --------
      • Set LS_Dur[TempIndex] = 15.00
      • Set LS_Damage[TempIndex] = ((Real((Level of (Ability being cast) for (Triggering unit)))) x 50.00)
      • Set LS_Offset[TempIndex] = 500.00
      • Set LS_AoE[TempIndex] = 100.00
      • Set LS_Degrees[TempIndex] = (Random angle)
      • Set LS_DegreeLength[TempIndex] = 15.00
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • Set LS_Caster[TempIndex] = (Triggering unit)
      • Set LS_TempLoc2[TempIndex] = (Position of (Triggering unit))
      • Set LS_TempLoc[TempIndex] = ((Position of (Triggering unit)) offset by LS_Offset[TempIndex] towards LS_Degrees[TempIndex] degrees)
  • Lightning Strike Loop
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
    • Actions
      • For each (Integer LS_LOOP) from 1 to LS_Index_Size, do (Actions)
        • Loop - Actions
          • Set LS_TempInt = LS_Index[LS_LOOP]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • LS_Dur[TempIndex] Greater than 0.00
            • Then - Actions
              • Set LS_Dur[TempIndex] = (LS_Dur[TempIndex] - 0.06)
              • Set LS_Degrees[TempIndex] = (LS_Degrees[TempIndex] + LS_DegreeLength[TempIndex])
              • Set LS_TempLoc2[TempIndex] = (Position of LS_Caster[TempIndex])
              • Set LS_TempLoc[TempIndex] = (LS_TempLoc2[TempIndex] offset by LS_Offset[TempIndex] towards LS_Degrees[TempIndex] degrees)
              • -------- --------------------------------------------------------------------------- Effects START --------------------------------------------------------------------------- --------
              • Special Effect - Create a special effect at LS_TempLoc[TempIndex] using Abilities\Spells\Other\Monsoon\MonsoonBoltTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- --------------------------------------------------------------------------- Effects STOP --------------------------------------------------------------------------- --------
              • Custom script: set bj_wantDestroyGroup=true
              • Unit Group - Pick every unit in (Units within LS_AoE[TempIndex] of LS_TempLoc[TempIndex]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (LS_Caster[TempIndex] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause LS_Caster[TempIndex] to damage (Picked unit), dealing LS_Damage[TempIndex] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • Custom script: call RemoveLocation(udg_LS_TempLoc [udg_TempIndex])
              • Custom script: call RemoveLocation(udg_LS_TempLoc2 [udg_TempIndex])
            • Else - Actions
              • -------- Destroy handles --------
              • Custom script: call RemoveLocation(udg_LS_TempLoc [udg_TempIndex])
              • Custom script: call RemoveLocation(udg_LS_TempLoc2 [udg_TempIndex])
              • -------- RecycleIndex --------
              • Set LS_Index[LS_LOOP] = LS_Index[LS_Index_Size]
              • Set LS_Index[LS_Index_Size] = LS_TempInt
              • Set LS_Index_Size = (LS_Index_Size - 1)
              • Set LS_LOOP = (LS_LOOP - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LS_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Freezing Spiral
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Freezing Spiral
    • Actions
      • -------- Turn the DynLoop trigger on. --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FD_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Freezing Spiral Loop <gen>
        • Else - Actions
      • -------- Increase the index size --------
      • Set FD_Index_Size = (FD_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FD_Index_Size Greater than FD_Index_maxSize
        • Then - Actions
          • Set FD_Index[FD_Index_Size] = FD_Index_Size
          • Set FD_Index_maxSize = FD_Index_Size
        • Else - Actions
      • Set FD_TempInt = FD_Index[FD_Index_Size]
      • -------- --------------------------------------------------------------------------- Changeable Variables START --------------------------------------------------------------------------- --------
      • Set FD_Offset[TempInt] = 10.00
      • Set FD_AoE[TempInt] = 150.00
      • Set FD_DegreeInterval[TempInt] = 20.00
      • Set FD_Degrees[TempInt] = (Random angle)
      • Set FD_Duration[FD_TempInt] = 1.25
      • Set FD_Damage[TempInt] = (25.00 x (Real((Level of (Ability being cast) for (Triggering unit)))))
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • Set FD_TempLoc[TempInt] = (Position of (Triggering unit))
      • Set FD_TempLoc3[TempInt] = ((Position of (Triggering unit)) offset by FD_Offset[TempInt] towards FD_Degrees[TempInt] degrees)
      • Set FD_Caster[TempInt] = (Triggering unit)
      • Unit - Create 1 Dummy (Freezing Spiral) for (Owner of (Triggering unit)) at FD_TempLoc3[TempInt] facing Default building facing degrees
      • Set FD_Dummy[TempInt] = (Last created unit)
  • Freezing Spiral Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer FD_LOOP) from 1 to FD_Index_Size, do (Actions)
        • Loop - Actions
          • Set FD_TempInt = FD_Index[FD_LOOP]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FD_Duration[FD_TempInt] Greater than 0.00
            • Then - Actions
              • Set FD_Duration[FD_TempInt] = (FD_Duration[FD_TempInt] - 0.03)
              • Set FD_Degrees[TempInt] = (FD_Degrees[TempInt] + FD_DegreeInterval[TempInt])
              • Set FD_Offset[TempInt] = (FD_Offset[TempInt] + 20.00)
              • Set FD_TempLoc[TempInt] = (Position of FD_Caster[TempInt])
              • Set FD_TempLoc3[TempInt] = ((Position of FD_Caster[TempInt]) offset by FD_Offset[TempInt] towards FD_Degrees[TempInt] degrees)
              • Unit - Move FD_Dummy[TempInt] instantly to FD_TempLoc3[TempInt]
              • Unit Group - Pick every unit in (Units within FD_AoE[TempInt] of FD_TempLoc3[TempInt]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (FD_Caster[TempInt] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause FD_Caster[TempInt] to damage (Picked unit), dealing FD_Damage[TempInt] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • Special Effect - Create a special effect at FD_TempLoc3[TempInt] using Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call RemoveLocation(udg_FD_TempLoc [udg_TempInt])
              • Custom script: call RemoveLocation(udg_FD_TempLoc3 [udg_TempInt])
            • Else - Actions
              • -------- Destroy handles --------
              • Custom script: call RemoveLocation(udg_FD_TempLoc [udg_TempInt])
              • Custom script: call RemoveLocation(udg_FD_TempLoc3 [udg_TempInt])
              • Unit - Remove FD_Dummy[TempInt] from the game
              • -------- RecycleIndex --------
              • Set FD_Index[FD_LOOP] = FD_Index[FD_Index_Size]
              • Set FD_Index[FD_Index_Size] = FD_TempInt
              • Set FD_Index_Size = (FD_Index_Size - 1)
              • Set FD_LOOP = (FD_LOOP - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FD_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Heat Ripple
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heat Ripple
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HR_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Heat Ripple Loop <gen>
        • Else - Actions
      • Set HR_Index_Size = (HR_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HR_Index_Size Greater than HR_Index_maxSize
        • Then - Actions
          • Set HR_Index[HR_Index_Size] = HR_Index_Size
          • Set HR_Index_maxSize = HR_Index_Size
        • Else - Actions
      • Set TempInt = HR_Index[HR_Index_Size]
      • Set HR_Caster[TempInt] = (Triggering unit)
      • Set HR_TempLoc1[TempInt] = (Position of (Triggering unit))
      • Set HR_TempLoc2[TempInt] = ((Position of (Triggering unit)) offset by HR_Offset[TempInt] towards HR_Degree[TempInt] degrees)
      • Set HR_TempLoc3[TempInt] = ((Position of (Triggering unit)) offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 180.00) degrees)
      • Set HR_TempLoc4[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 90.00) degrees)
      • Set HR_TempLoc5[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 270.00) degrees)
      • -------- --------------------------------------------------------------------------- Changeable Variables START --------------------------------------------------------------------------- --------
      • Set HR_Dur[TempInt] = 1.00
      • Set HR_Damage[TempInt] = (50.00 x (Real((Level of (Ability being cast) for (Triggering unit)))))
      • Set HR_Degree[TempInt] = (Random angle)
      • Set HR_Offset[TempInt] = 40.00
      • Set HR_AoE[TempInt] = 125.00
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
  • Heat Ripple Loop
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer HR_LOOP) from 1 to HR_Index_Size, do (Actions)
        • Loop - Actions
          • -------- This let look everything cleaner. --------
          • Set TempInt = HR_Index[HR_LOOP]
          • -------- Condition... --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • HR_Dur[TempInt] Greater than 0.00
            • Then - Actions
              • -------- Actions --------
              • Set HR_Dur[TempInt] = (HR_Dur[TempInt] - 0.10)
              • -------- --------------------------------------------------------------------------- Locations START --------------------------------------------------------------------------- --------
              • Set HR_Offset[TempInt] = (HR_Offset[TempInt] + 50.00)
              • Set HR_TempLoc2[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards HR_Degree[TempInt] degrees)
              • Set HR_TempLoc3[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 180.00) degrees)
              • Set HR_TempLoc4[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 90.00) degrees)
              • Set HR_TempLoc5[TempInt] = (HR_TempLoc1[TempInt] offset by HR_Offset[TempInt] towards (HR_Degree[TempInt] - 270.00) degrees)
              • -------- --------------------------------------------------------------------------- Locations STOP --------------------------------------------------------------------------- --------
              • -------- --------------------------------------------------------------------------- EFFECTS START --------------------------------------------------------------------------- --------
              • Special Effect - Create a special effect at HR_TempLoc2[TempInt] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect at HR_TempLoc3[TempInt] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect at HR_TempLoc4[TempInt] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect at HR_TempLoc5[TempInt] using Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- --------------------------------------------------------------------------- EFFECTS STOP --------------------------------------------------------------------------- --------
              • -------- --------------------------------------------------------------------------- Damage START --------------------------------------------------------------------------- --------
              • Unit Group - Pick every unit in (Units within HR_AoE[TempInt] of HR_TempLoc2[TempInt]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (HR_Caster[TempInt] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause HR_Caster[TempInt] to damage (Picked unit), dealing HR_Damage[TempInt] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • Unit Group - Pick every unit in (Units within HR_AoE[TempInt] of HR_TempLoc3[TempInt]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (HR_Caster[TempInt] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause HR_Caster[TempInt] to damage (Picked unit), dealing HR_Damage[TempInt] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • Unit Group - Pick every unit in (Units within HR_AoE[TempInt] of HR_TempLoc4[TempInt]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (HR_Caster[TempInt] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause HR_Caster[TempInt] to damage (Picked unit), dealing HR_Damage[TempInt] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • Unit Group - Pick every unit in (Units within HR_AoE[TempInt] of HR_TempLoc5[TempInt]) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (HR_Caster[TempInt] belongs to an enemy of (Owner of (Picked unit))) Equal to True
                          • (Life of (Picked unit)) Greater than 0.41
                    • Then - Actions
                      • Unit - Cause HR_Caster[TempInt] to damage (Picked unit), dealing HR_Damage[TempInt] damage of attack type Spells and damage type Normal
                    • Else - Actions
              • -------- --------------------------------------------------------------------------- Damage STOP --------------------------------------------------------------------------- --------
              • Custom script: call RemoveLocation(udg_HR_TempLoc2 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc3 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc4 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc5[udg_TempInt])
            • Else - Actions
              • -------- Destroy handles --------
              • Custom script: call RemoveLocation(udg_HR_TempLoc1[udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc2 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc3 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc4 [udg_TempInt])
              • Custom script: call RemoveLocation(udg_HR_TempLoc5[udg_TempInt])
              • -------- RecycleIndex --------
              • Set HR_Index[HR_LOOP] = HR_Index[HR_Index_Size]
              • Set HR_Index[HR_Index_Size] = TempInt
              • Set HR_Index_Size = (HR_Index_Size - 1)
              • Set HR_LOOP = (HR_LOOP - 1)
      • -------- Turn the trigger again off if the index_size is below 0... --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HR_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Persistancy
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • -------- --------------------------------------------------------------------------- Changeable Variables START --------------------------------------------------------------------------- --------
      • Set PE_Chance2 = (5 x (Level of |c00ffff00Persistancy|r for (Triggering unit)))
      • Set PE_Chance = (Random integer number between 1 and 100)
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • PE_Chance Less than or equal to PE_Chance2
        • Then - Actions
          • Set TempLoc3 = (Position of (Triggering unit))
          • Set TempLoc4 = (Target point of ability being cast)
          • Unit - Create 1 Dummy (Persistance) for (Owner of (Triggering unit)) at TempLoc3 facing Default building facing degrees
          • Unit - Add a 1.60 second Generic expiration timer to (Last created unit)
          • Unit - Add (Ability being cast) to (Last created unit)
          • Unit - Add |c00ffff00Persistancy|r to (Last created unit)
          • Unit - Set level of (Ability being cast) for (Last created unit) to (Level of (Ability being cast) for (Triggering unit))
          • Unit - Set level of |c00ffff00Persistancy|r for (Last created unit) to (Level of |c00ffff00Persistancy|r for (Triggering unit))
          • -------- --------------------------------------------------------------------------- INSERT ABILITIES HERE --------------------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Ability being cast) Equal to |c000f1effArcane Profanityr
            • Then - Actions
              • Unit - Order (Last created unit) to Undead Dreadlord - Carrion Swarm TempLoc4
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Ability being cast) Equal to |c00ff1e28Fiery Wrath|r
                • Then - Actions
                  • Unit - Order (Last created unit) to Orc Tauren Chieftain - Shockwave TempLoc4
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Ability being cast) Equal to |c0080bcfaLightning Strike|r
                    • Then - Actions
                      • Unit - Order (Last created unit) to Orc Tauren Chieftain - War Stomp
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Ability being cast) Equal to Freezing Spiral
                        • Then - Actions
                          • Unit - Order (Last created unit) to Night Elf Warden - Fan Of Knives
                        • Else - Actions
          • -------- --------------------------------------------------------------------------- INSERT ABILITIES HERE --------------------------------------------------------------------------- --------
          • Custom script: call RemoveLocation (udg_TempLoc3)
          • Custom script: call RemoveLocation (udg_TempLoc4)
        • Else - Actions

Note: These codes are not fully updated.
I hope you like it, and let me know if you find any bugs/leaks etc. Also if you think something could be improved or have something to add to a spell, please let me know :)


Keywords:
Spellpack, lightning, fire, arcane, spells, pack, Foopad, Persistancy, FieryWrath, ArcaneProfanity, LightningStrike, MUI, GUI, leakless
Contents

Foopads Spellpack 1.02 (Map)

Reviews
18:14, 12th Oct 2009 The_Reborn_Devil: The bugs are fixed now and the coding looks good. There are no leaks as far as I can see. Status: Approved. Rating: Useful.

Moderator

M

Moderator

18:14, 12th Oct 2009
The_Reborn_Devil:

The bugs are fixed now and the coding looks good.
There are no leaks as far as I can see.
Status: Approved.
Rating: Useful.
 
Level 31
Joined
May 3, 2008
Messages
3,155
Documentation seems to be ok except for the trigger documentation.

Assume I am a newbie who know nothing about trigger, I won't understand what do you mean by changeable variable at this trigger. I probably know it can be change, but don't know what happen if I change it.

You could add a trigger comment such as "Expand the spells aoe" to let people know that changing the variable for "Set LS_AoE[TempIndex] = 100.00" would cause the spells aoe to shrink or expand.

  • Lightning Strike
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to |c0080bcfaLightning Strike|r
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LS_Index_Size Equal to 0
        • Then - Actions
          • Trigger - Turn on Lightning Strike Loop <gen>
        • Else - Actions
      • Set LS_Index_Size = (LS_Index_Size + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LS_Index_Size Greater than LS_Index_maxSize
        • Then - Actions
          • Set LS_Index[LS_Index_Size] = LS_Index_Size
          • Set LS_Index_maxSize = LS_Index_Size
        • Else - Actions
      • Set LS_TempInt = LS_Index[LS_Index_Size]
      • -------- --------------------------------------------------------------------------- Changeable Variables --------------------------------------------------------------------------- --------
      • Set LS_Dur[TempIndex] = 15.00
      • Set LS_Damage[TempIndex] = ((Real((Level of (Ability being cast) for (Triggering unit)))) x 50.00)
      • Set LS_Offset[TempIndex] = 500.00
      • Set LS_AoE[TempIndex] = 100.00
      • Set LS_Degrees[TempIndex] = (Random angle)
      • Set LS_DegreeLength[TempIndex] = 5.00
      • -------- --------------------------------------------------------------------------- Changeable Variables STOP --------------------------------------------------------------------------- --------
      • Set LS_Caster[TempIndex] = (Triggering unit)
      • Set LS_TempLoc2[TempIndex] = (Position of (Triggering unit))
      • Set LS_TempLoc[TempIndex] = ((Position of (Triggering unit)) offset by LS_Offset[TempIndex] towards LS_Degrees[TempIndex] degrees)
At this trigger, I do believe you can shorten it to single call by using multiple if/then/else rather than a singular one.

  • If ((Ability being cast) Equal to |c000f1effArcane Profanityr ) then do (Unit - Order (Last created unit) to Undead Dreadlord - Carrion Swarm TempLoc4) else do (Do nothing)
  • If ((Ability being cast) Equal to |c00ff1e28Fiery Wrath|r ) then do (Unit - Order (Last created unit) to Orc Tauren Chieftain - Shockwave TempLoc4) else do (Do nothing)
  • If ((Ability being cast) Equal to |c0080bcfaLightning Strike|r ) then do (Unit - Order (Last created unit) to Orc Tauren Chieftain - War Stomp) else do (Do nothing)
Making it a single call is much better, instead of making 3 call and only use 1 of it.

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Ability being cast) Equal to |c000f1effArcane Profanityr
    • Then - Actions
      • Unit - Order (Last created unit) to Undead Dreadlord - Carrion Swarm TempLoc4
    • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to |c00ff1e28Fiery Wrath|r
        • Then - Actions
          • Unit - Order (Last created unit) to Orc Tauren Chieftain - Shockwave TempLoc4
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Ability being cast) Equal to |c0080bcfaLightning Strike|r
            • Then - Actions
              • Unit - Order (Last created unit) to Orc Tauren Chieftain - War Stomp
            • Else - Actions
Seems to be quite a fine spells.
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
Okay, I guess this time I do the review :p

So lets start .. um .. I like the Arcane Profanity ability, very nice idea.. but I realy thing you must make to automatically select the Hero after he lands after the orb from travelling

The fire spell is just great, I like it too.

And the lightning.. thing.. umm.. maybe this is the only think I dislike here, not very efficient ... why not try to make it, like this:

The Hero becomes strike the area around him with lightning, instead of a circles with doodads... something like chain-lightning but casting it on the ground, dealing damage in AOE + percent chance for Purge?

I will check if theres a some mistakes in the triggers later.
 
Level 6
Joined
Jun 15, 2008
Messages
175
Thank you both for a review so fast :).
To Septimus, I did not think further documentation was neccesary, I will try do update the documentation to improve understanding of each spell for newbs.
I was thinking about doing what you're recommending on with the if/then/else lines, but I was not sure if that was more effecient. I think it was Zack that used if/then/else in a spell of his and thought that it was more effecient - nevertheless I'll change the if/then/else thing.

MortAr- I don't know about the Lightning Strike ability, you're right, I tried to increase the effiency but I think it has lost the main idea - I will try to rework it :).
Yes the Arcane Profanity spell needs to automatically target the caster when done, I will do that. Thanks for your advice :)
[Edit]
Yes it is Septimus, it's a funny example though :), I've changed it already, I just haven't updated it yet. It's a longer code though.
 
Last edited:
Level 31
Joined
May 3, 2008
Messages
3,155
I was thinking about doing what you're recommending on with the if/then/else lines, but I was not sure if that was more effecient.

It does make it slightly cleaner and efficient.

Ok, let's me make a example for you even though it might not be a good example.

Assume that you are creating 3 singular if/then/else, it was like equal to 3 of your buddy is looking for you at 3 specific location at the same time.

As for the multiple if/then/else, it was like 2 of your friend (B & C) sitting on a restaurant waiting for you while buddy A of yours was looking for you at point A. If he cannot find you, then he would return to the restaurant and called buddy B to find you at point B.

If your buddy B found you at point B, that's mean buddy C does not need to do anything and saves his energy and time.

Hope this example is good enough to be understand. :p
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
Umm.. ok I look up the trigger fast but...

Don't you think the Heat ripple must have more damage on the "explosion" things.. I mean, 125 is too small AOE, when I cast it near peasant, most of them get covered, but no damage is dealt...

And for the freezing spiral, theres no group used, which means a unit can be hit multiple times .. which will be 10 times if the target is near the caster (10x50=500 without mutiple math)
 
Level 6
Joined
Jun 15, 2008
Messages
175
Umm.. ok I look up the trigger fast but...

Don't you think the Heat ripple must have more damage on the "explosion" things.. I mean, 125 is too small AOE, when I cast it near peasant, most of them get covered, but no damage is dealt...

And for the freezing spiral, theres no group used, which means a unit can be hit multiple times .. which will be 10 times if the target is near the caster (10x50=500 without mutiple math)

Heat Ripple should probably have larger AoE, but that's very easy to adjust. The Freezing Spiral is designed like that, it's set to come out at a random angle though so it's very hard to hit someone.
 
Top