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

Sol Rider Spellpack v1.04

  • Like
Reactions: deepstrasz
Spellpack requested by ~Nightmare for his suggestion in DotA.

I removed all manacost and cooldown to show its MUI-ness, the user could just set them to the wanted value. I used old icons, feel free to replace them.

  • Heat Wave
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heat Wave
      • (In-game time of day) Greater than 5.59
      • (In-game time of day) Less than 18.00
    • Actions
      • -------- This trigger is only for the % spell boost during daytime. --------
      • -------- Variables --------
      • Custom script: set udg_TempCaster = GetTriggerUnit()
      • Set TempPoint = (Position of TempCaster)
      • Set TempPlayer = (Owner of TempCaster)
      • Set TempInteger = (Level of (Ability being cast) for TempCaster)
      • Set OffsetLoc = (Target point of ability being cast)
      • -------- Dummy Caster --------
      • Unit - Create 1 Dummy for TempPlayer at TempPoint facing Default building facing degrees
      • Custom script: set udg_TempUnit = bj_lastCreatedUnit
      • Custom script: call RemoveLocation(udg_TempPoint)
      • Unit - Add a 0.01 second Generic expiration timer to TempUnit
      • Unit - Order TempUnit to Undead Dreadlord - Carrion Swarm OffsetLoc
      • Set TempLevel = (Level of Sunlight Efficiency for TempCaster)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TempLevel Equal to 1
        • Then - Actions
          • Unit - Add Heat Wave (Dummy 1) to TempUnit
          • Unit - Set level of Heat Wave (Dummy 1) for TempUnit to TempInteger
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TempLevel Equal to 2
            • Then - Actions
              • Unit - Add Heat Wave (Dummy 2) to TempUnit
              • Unit - Set level of Heat Wave (Dummy 2) for TempUnit to TempInteger
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempLevel Equal to 3
                • Then - Actions
                  • Unit - Add Heat Wave (Dummy 3) to TempUnit
                  • Unit - Set level of Heat Wave (Dummy 3) for TempUnit to TempInteger
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempLevel Equal to 4
                    • Then - Actions
                      • Unit - Add Heat Wave (Dummy 4) to TempUnit
                      • Unit - Set level of Heat Wave (Dummy 4) for TempUnit to TempInteger
                    • Else - Actions
      • -------- Leak Removal --------
      • Custom script: call RemoveLocation(udg_OffsetLoc)
      • Custom script: set udg_TempUnit = null
      • Custom script: set udg_TempCaster = null
  • Starblight
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Starblight
    • Actions
      • -------- Variables --------
      • Custom script: set udg_TempCaster = GetTriggerUnit()
      • Set TempPoint = (Position of TempCaster)
      • Set TempPlayer = (Owner of TempCaster)
      • Set TempInteger = (Level of (Ability being cast) for TempCaster)
      • Set OffsetLoc = (Target point of ability being cast)
      • -------- To every unit in the target area --------
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units within 350.00 of OffsetLoc matching ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and (((Matching unit) is alive) Equal to True))) and do (Actions)
        • Loop - Actions
          • -------- Dummy Caster --------
          • Unit - Create 1 Dummy for TempPlayer at TempPoint facing Default building facing degrees
          • Custom script: set udg_TempUnit = bj_lastCreatedUnit
          • Unit - Add Starblight (Normal) to TempUnit
          • Unit - Add a 0.01 second Generic expiration timer to TempUnit
          • Unit - Set level of Starblight (Normal) for TempUnit to TempInteger
          • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Picked unit)
          • -------- Daytime bonus --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (In-game time of day) Greater than 5.59
              • (In-game time of day) Less than 18.00
            • Then - Actions
              • -------- Dummy Caster --------
              • Set TempLevel = (Level of Sunlight Efficiency for TempCaster)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempLevel Equal to 1
                • Then - Actions
                  • Unit - Add Starblight (Dummy 1) to TempUnit
                  • Unit - Set level of Starblight (Dummy 1) for TempUnit to TempInteger
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempLevel Equal to 2
                    • Then - Actions
                      • Unit - Add Starblight (Dummy 2) to TempUnit
                      • Unit - Set level of Starblight (Dummy 2) for TempUnit to TempInteger
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • TempLevel Equal to 3
                        • Then - Actions
                          • Unit - Add Starblight (Dummy 3) to TempUnit
                          • Unit - Set level of Starblight (Dummy 3) for TempUnit to TempInteger
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • TempLevel Equal to 4
                            • Then - Actions
                              • Unit - Add Starblight (Dummy 4) to TempUnit
                              • Unit - Set level of Starblight (Dummy 4) for TempUnit to TempInteger
                            • Else - Actions
              • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Picked unit)
              • Custom script: set udg_TempUnit = null
            • Else - Actions
      • -------- Leak Removal --------
      • Custom script: call RemoveLocation(udg_TempPoint)
      • Custom script: call RemoveLocation(udg_OffsetLoc)
      • Custom script: set udg_TempCaster = null
  • Solar Flare Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- ----------- ---------- ----------- ----------
      • -------- Configurations for the Solar Flare spell --------
      • -------- ----------- ---------- ----------- ----------
      • -------- The area in which units are picked to get damaged. This is advised to be more than twice the SF_WhirlDistance. --------
      • Set SF_AOE = 450.00
      • -------- Sets the distance between each whirling flame. --------
      • -------- The direction depends on this, with clockwise being a negative integer and counter/anti-clockwise being a positive. --------
      • Set SF_DegreesPerWhirl = 72
      • -------- The distance between the target point and the whirl flames. --------
      • Set SF_WhirlDistance = 120.00
      • -------- The number of flames that will appear. --------
      • Set SF_WhirlFlames = 5
  • Solar Flare
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Solar Flare
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DoT_Index[2] Equal to 0
            • Then - Actions
              • Set DoT_Index[1] = 0
              • Trigger - Turn on Solar Flare Loop <gen>
            • Else - Actions
          • -------- Variables --------
          • Set DoT_Index[1] = (DoT_Index[1] + 1)
          • Set DoT_Index[2] = (DoT_Index[2] + 1)
          • Set TempPoint = (Target point of ability being cast)
          • -------- Duration --------
          • Set DoT_Duration[DoT_Index[1]] = 2.00
          • -------- Caster --------
          • Set DoT_Caster[DoT_Index[1]] = (Triggering unit)
          • -------- Boolean required to run the loop trigger --------
          • Set DoT_Condition[DoT_Index[1]] = True
          • -------- String required to filter the ability --------
          • Set DoT_Name[DoT_Index[1]] = (Name of (Ability being cast))
          • -------- Attack and Damage Types --------
          • Set DoT_AttackType[DoT_Index[1]] = Spells
          • Set DoT_DamageType[DoT_Index[1]] = Fire
          • -------- Damage Amount --------
          • Set DoT_Damage[DoT_Index[1]] = (0.00 + (25.00 + (75.00 x (Real((Level of (Ability being cast) for (Triggering unit)))))))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (In-game time of day) Greater than 5.59
              • (In-game time of day) Less than 18.00
            • Then - Actions
              • Set DoT_Damage[DoT_Index[1]] = ((10.00 + (5.00 x (Real((Level of Sunlight Efficiency for (Triggering unit)))))) + DoT_Damage[DoT_Index[1]])
            • Else - Actions
          • -------- Unit Group to be damaged --------
          • Set DoT_Group[DoT_Index[1]] = (Units within SF_AOE of TempPoint matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) or ((Owner of (Matching unit)) Equal to Neutral Passive))))
          • Custom script: set udg_TempPlayer = GetOwningPlayer(udg_DoT_Caster[udg_DoT_Index[1]])
          • Set SF_TargetPoint[DoT_Index[1]] = (Target point of ability being cast)
          • -------- Dummy Effect --------
          • Unit - Create 1 Dummy for TempPlayer at TempPoint facing TempReal degrees
          • Custom script: set udg_TempUnit = bj_lastCreatedUnit
          • Unit - Add a 2.00 second Generic expiration timer to TempUnit
          • Special Effect - Create a special effect attached to the chest of TempUnit using Sun.mdx
          • Animation - Change TempUnit's vertex coloring to (100.00%, 65.00%, 0.00%) with 0.00% transparency
          • Animation - Change TempUnit's size to (120.00%, 120.00%, 120.00%) of its original size
          • Custom script: set udg_TempUnit = null
          • Custom script: set udg_TempCaster = null
          • For each (Integer TempInteger) from 0 to SF_WhirlFlames, do (Actions)
            • Loop - Actions
              • -------- Variables --------
              • Set OffsetLoc = (Target point of ability being cast)
              • Set TempReal = ((Real(TempInteger)) x (Real(SF_DegreesPerWhirl)))
              • Set TempPoint = (OffsetLoc offset by SF_WhirlDistance towards TempReal degrees)
              • Custom script: call RemoveLocation(udg_OffsetLoc)
              • -------- Dummy Effect --------
              • Unit - Create 1 Dummy for TempPlayer at TempPoint facing TempReal degrees
              • Custom script: set udg_TempUnit = bj_lastCreatedUnit
              • Unit - Add a 2.00 second Generic expiration timer to TempUnit
              • Special Effect - Create a special effect attached to the chest of TempUnit using Abilities\Spells\Orc\SpiritLink\SpiritLinkTarget.mdl
              • Animation - Change TempUnit's vertex coloring to (100.00%, 65.00%, 0.00%) with 5.00% transparency
              • Animation - Change TempUnit's size to (250.00%, 250.00%, 250.00%) of its original size
              • Custom script: call RemoveLocation(udg_TempPoint)
              • Custom script: set udg_TempUnit = null
        • Else - Actions
  • Solar Flare Loop
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer DoT_Index[3]) from 1 to DoT_Index[1], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DoT_Condition[DoT_Index[3]] Equal to True
            • Then - Actions
              • -------- Countdown --------
              • Set DoT_Duration[DoT_Index[3]] = (DoT_Duration[DoT_Index[3]] - 0.10)
              • -------- Check every interval that the DoT should damage. --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DoT_Name[DoT_Index[3]] Equal to Solar Flare
                  • Or - Any (Conditions) are true
                    • Conditions
                      • DoT_Duration[DoT_Index[3]] Equal to 0.00
                      • DoT_Duration[DoT_Index[3]] Equal to 1.00
                      • DoT_Duration[DoT_Index[3]] Equal to 1.90
                • Then - Actions
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within SF_AOE of SF_TargetPoint[DoT_Index[3]]) and do (Actions)
                    • Loop - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ((Picked unit) belongs to an enemy of (Owner of DoT_Caster[DoT_Index[3]])) Equal to True
                          • ((Picked unit) is alive) Equal to True
                        • Then - Actions
                          • Unit Group - Add (Picked unit) to DoT_Group[DoT_Index[3]]
                        • Else - Actions
                  • Unit Group - Pick every unit in DoT_Group[DoT_Index[3]] and do (Actions)
                    • Loop - Actions
                      • -------- Damage --------
                      • Unit - Cause DoT_Caster[DoT_Index[3]] to damage (Picked unit), dealing DoT_Damage[DoT_Index[3]] damage of attack type Hero and damage type Universal
                      • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Items\AIfb\AIfbSpecialArt.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Orc\SpiritLink\SpiritLinkTarget.mdl
                      • Special Effect - Destroy (Last created special effect)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DoT_Duration[DoT_Index[3]] Less than or equal to 0.00
                    • Then - Actions
                      • Set DoT_Condition[DoT_Index[3]] = False
                      • Custom script: call DestroyGroup(udg_DoT_Group[udg_DoT_Index[3]])
                      • Set DoT_Index[2] = (DoT_Index[2] - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • DoT_Index[2] Equal to 0
                        • Then - Actions
                          • Set DoT_Index[1] = 0
                          • Trigger - Turn off (This trigger)
                        • Else - Actions
                    • Else - Actions
                • Else - Actions
            • Else - Actions
v1.00 - Uploaded.
v1.01 - Reduced trigger actions drastically by removing recursions, thanks to Maker.
v1.02 - Added a config trigger for Solar Flare, thanks to GhostHunter123.
v1.03 - De-indexed the last trigger, thanks to deathismyfriend.
v1.04 - Made Solar Flare effect even better without pausing units, and hopefully covered all bugs noticed by Maker.


Keywords:
Sol Rider, Sun Rider, Spellpack, Zeth Ajakkar, Latin
Contents

Sol Rider (Map)

Reviews
Sol Rider Spellpack v1.04 | Reviewed by Maker | 18th Jun 2013 APPROVED MUI and leakless. The Heat Wave effect could be a bit better and the Solar Flare effect disappears without death animation Sol Rider Spellpack...

Moderator

M

Moderator


Sol Rider Spellpack v1.04 | Reviewed by Maker | 18th Jun 2013
APPROVED


126248-albums6177-picture66521.png


  • MUI and leakless. The Heat Wave effect could be a bit better
    and the Solar Flare effect disappears without death animation
[tr]



Sol Rider Spellpack v1.03 | Reviewed by Maker | 6th Jun 2013
NEEDS FIX


126248-albums6177-picture66522.png


  • Don't edit the default units, create a custom unit
  • Don't use Pause unit for spells
126248-albums6177-picture66523.png


  • You are removing TempPoint twice in Heat Wave
  • You can use one dummy to cast the ability on all units
  • The last temp point removal in Solar Flare is not needed
  • Don't use pause unit for spells
  • The caster does not have Attack, slam animation that Heat Wave uses
  • Heat Wave could benefit from having a bit of follow through time
[tr]
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
u should store (Level of Sunlight Efficiency for (Triggering unit)) into a temp variable.
u should store the dummy units in an array and use the level of the ability as the array index.
never use integer A instead make ur own and use that.
ur indexing method is outdated and inefficient. my tutorial things a guier should know has the one used now it is a lot more efficient.
u never de-index so this will hit op-limit or the array limit and break the spells.
rule of thumb anything used twice or more store into a temp variable and use that.

thts just wat i saw at a quick look.
 
Top