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

Admiral Spellpack v1 [GUI/MUI]

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Hi,
This spellpack is an update from Heavy Slash[GUI/MUI] spell.
Like i said before at the spell description..."i will update my spell to spellpack"
Now,this it is...
But,this spellpack just have two spells...i will add more later.
Spells are configurable.You can config them at Trigger Editor [F4].

-----Spells-----

[Q]Heavy Slash
Admiral slam the ground with his sword.

Damage :-
Level 1 : 200.00
Level 2 : 400.00
Level 3 : 600.00

MaxDistance :-
Level 1 : 400.00
Level 2 : 800.00
Level 3 : 1000.00

Cooldown :-
Level 1 : 9.00 s
Level 2 : 7.00 s
Level 3 : 6.00 s


--Screenshot--

234492-albums7047-picture78114.png



--Triggers--

  • HSInit
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- IF YOU CONFIG ANYTHING BELOW THIS LINE,MAKE SURE THE SPELL DESCRIPTION MATCH WITH THIS SETTINGS. --------
      • -------- ============================SPELL_CONFIG============================ --------
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell. --------
      • Set HS_Ability = Heavy Slash
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell maximum distance. --------
      • Set HS_MaxDistance_Config[1] = 800.00
      • Set HS_MaxDistance_Config[2] = 1000.00
      • Set HS_MaxDistance_Config[3] = 1400.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell damage per point. --------
      • Set HS_Damage[1] = 200.00
      • Set HS_Damage[2] = 400.00
      • Set HS_Damage[3] = 600.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell starting distance. --------
      • Set HS_CurDistance_Config[1] = 50.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell distance per point. --------
      • Set HS_DistancePerPoint_Config[1] = 150.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell effect. --------
      • Set HS_Effect[1] = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
      • Set HS_Effect[2] = Abilities\Spells\NightElf\BattleRoar\RoarCaster.mdl
      • -------- This effect will be created at enemy unit. --------
      • Set HS_Effect[3] = Abilities\Spells\Human\MarkOfChaos\MarkOfChaosTarget.mdl
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- This one for the waves effect. --------
      • Set HS_EffectDummy = FireEffect
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- ============================SPELL_CONFIG============================ --------
  • HSStart
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to HS_Ability
    • Actions
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HS_LoopIndex[1] Equal to 0
        • Then - Actions
          • Trigger - Turn on HSLoop <gen>
        • Else - Actions
      • Set HS_LoopIndex[1] = (HS_LoopIndex[1] + 1)
      • Set HS_LoopIndex[2] = (HS_LoopIndex[2] + 1)
      • Set HS_Check[HS_LoopIndex[2]] = True
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- Caster --------
      • Set HS_Caster[HS_LoopIndex[2]] = (Casting unit)
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Set HS_CurDistance[HS_LoopIndex[2]] = HS_CurDistance_Config[1]
      • Set HS_DistancePerPoint[HS_LoopIndex[2]] = HS_DistancePerPoint_Config[1]
      • Set HS_MaxDistance[HS_LoopIndex[2]] = HS_MaxDistance_Config[(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])]
      • Set HS_Damage1[HS_LoopIndex[2]] = HS_Damage[(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])]
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Set HS_Angle[HS_LoopIndex[2]] = (Facing of HS_Caster[HS_LoopIndex[2]])
      • Set HS_LeakPoint[1] = (Position of HS_Caster[HS_LoopIndex[2]])
      • Set HS_LeakPoint[2] = ((Position of HS_Caster[HS_LoopIndex[2]]) offset by HS_CurDistance[HS_LoopIndex[2]] towards HS_Angle[HS_LoopIndex[2]] degrees)
      • Unit - Create 1 FireEffect for (Owner of HS_Caster[HS_LoopIndex[2]]) at HS_LeakPoint[2] facing HS_Angle[HS_LoopIndex[2]] degrees
      • Set HS_Dummy[HS_LoopIndex[2]] = (Last created unit)
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Custom script: call RemoveLocation(udg_HS_LeakPoint[1])
      • Custom script: call RemoveLocation(udg_HS_LeakPoint[2])
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
  • HSLoop
    • Events
      • Time - Every 0.08 seconds of game time
    • Conditions
    • Actions
      • -------- DON'T CHANGE ANYTHING BELOW THIS LINE. --------
      • -------- ************************************************************************************************************* --------
      • For each (Integer HS_LoopIndex[3]) from 1 to HS_LoopIndex[2], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • HS_Check[HS_LoopIndex[3]] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • HS_CurDistance[HS_LoopIndex[3]] Less than or equal to HS_MaxDistance[HS_LoopIndex[3]]
                • Then - Actions
                  • Set HS_CurDistance[HS_LoopIndex[3]] = (HS_CurDistance[HS_LoopIndex[3]] + HS_DistancePerPoint[HS_LoopIndex[3]])
                  • Set HS_LeakPoint[1] = (Position of HS_Dummy[HS_LoopIndex[3]])
                  • Set HS_LeakPoint[2] = (HS_LeakPoint[1] offset by HS_DistancePerPoint[HS_LoopIndex[3]] towards HS_Angle[HS_LoopIndex[3]] degrees)
                  • Unit - Move HS_Dummy[HS_LoopIndex[3]] instantly to HS_LeakPoint[2], facing HS_Angle[HS_LoopIndex[3]] degrees
                  • Unit - Create 1 HS_EffectDummy for (Owner of HS_Caster[HS_LoopIndex[3]]) at HS_LeakPoint[1] facing HS_Angle[HS_LoopIndex[3]] degrees
                  • Unit - Add a 3.00 second Generic expiration timer to (Last created unit)
                  • Special Effect - Create a special effect at HS_LeakPoint[2] using HS_Effect[1]
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Create a special effect at HS_LeakPoint[2] using HS_Effect[2]
                  • Special Effect - Destroy (Last created special effect)
                  • Set HS_EnemyGroup = (Units within 200.00 of HS_LeakPoint[2] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of HS_Caster[HS_LoopIndex[3]])) Equal to True) and (((Matching unit) is Magic Immune) Equal to False))))
                  • Unit Group - Pick every unit in HS_EnemyGroup and do (Actions)
                    • Loop - Actions
                      • Unit - Cause HS_Caster[HS_LoopIndex[3]] to damage (Picked unit), dealing HS_Damage1[HS_LoopIndex[3]] damage of attack type Spells and damage type Normal
                      • Set HS_LeakPoint[4] = (Position of (Picked unit))
                      • Special Effect - Create a special effect at (Position of (Picked unit)) using HS_Effect[3]
                      • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation(udg_HS_LeakPoint[3])
                  • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
                  • Custom script: call DestroyGroup(udg_HS_EnemyGroup)
                  • Custom script: call RemoveLocation(udg_HS_LeakPoint[1])
                  • Custom script: call RemoveLocation(udg_HS_LeakPoint[2])
                  • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
                • Else - Actions
                  • Set HS_LoopIndex[1] = (HS_LoopIndex[1] - 1)
                  • Set HS_Check[HS_LoopIndex[3]] = False
                  • Unit - Remove HS_Dummy[HS_LoopIndex[3]] from the game
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HS_LoopIndex[1] Equal to 0
        • Then - Actions
          • Set HS_LoopIndex[2] = 0
          • Trigger - Turn off (This trigger)
        • Else - Actions
[W]Heart Stomp
Admiral stomp his targeted enemy's heart with his full force.

Damage :-
Level 1 : 400.00
Level 2 : 800.00
Level 3 : 1000.00

Cooldown :-
Level 1 : 15.00 s
Level 2 : 14.00 s
Level 3 : 12.00 s


--Screenshot--

234492-albums7047-picture78115.png


--Triggers--

  • SInit
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- IF YOU CONFIG ANYTHING BELOW THIS LINE,MAKE SURE THE SPELL DESCRIPTION MATCH WITH THIS SETTINGS. --------
      • -------- ============================SPELL_CONFIG============================ --------
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell. --------
      • Set S_Ability = Heart Stomp
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell damage. --------
      • Set S_Damage_Config[1] = 400.00
      • Set S_Damage_Config[2] = 800.00
      • Set S_Damage_Config[3] = 1000.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- This for maximum count when targeted unit is on knockback.Every 0.04 second the counter will be increased by 1. --------
      • Set S_MaxCount = 30
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- This is for knocback speed.This will also set the knockback maximum distance.For Example( S_KnockBackMaxDistance = ( S_KnockBackSpeed x S_MaxCount) --------
      • -------- The Default maximum knockback distance is 1200.00.Because ( 30 x 40.00 = 1200.00) --------
      • Set S_KnocbackSpeed = 40.00
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- The spell effect --------
      • -------- This one will be use during targeted unit is knockbacked. --------
      • Set S_Effect[1] = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
      • -------- This one will be use when targeted unit finished knockback. --------
      • Set S_Effect[2] = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- This one is for effect dummy that will be use when caster hit targeted unit. --------
      • -------- And if you change this,the dummy unit pitch angle must be -90.00 --------
      • -------- If you not set the dummy unit pitch angle to -90.00,the spell wont look like its default. --------
      • Set S_EffectDummy = BodySlamEffect
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • -------- ============================SPELL_CONFIG============================ --------
  • SStart
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to S_Ability
    • Actions
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • S_LoopIndex[1] Equal to 0
        • Then - Actions
          • Trigger - Turn on SLoop <gen>
        • Else - Actions
      • Set S_LoopIndex[1] = (S_LoopIndex[1] + 1)
      • Set S_LoopIndex[2] = (S_LoopIndex[2] + 1)
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Set S_Caster[S_LoopIndex[2]] = (Casting unit)
      • Animation - Change S_Caster[S_LoopIndex[2]]'s animation speed to 150.00% of its original speed
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Set S_Angle[S_LoopIndex[2]] = (Facing of S_Caster[S_LoopIndex[2]])
      • Set S_Damage[S_LoopIndex[2]] = S_Damage_Config[(Level of (Ability being cast) for S_Caster[S_LoopIndex[2]])]
      • Set S_EnemyUnit[S_LoopIndex[2]] = (Target unit of ability being cast)
      • Set S_LeakPoint[2] = (Position of S_Caster[S_LoopIndex[2]])
      • Set S_LeakPoint[1] = (S_LeakPoint[2] offset by 100.00 towards S_Angle[S_LoopIndex[2]] degrees)
      • Set S_Counter[S_LoopIndex[2]] = 0
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Unit - Cause S_Caster[S_LoopIndex[2]] to damage S_EnemyUnit[S_LoopIndex[2]], dealing S_Damage[S_LoopIndex[2]] damage of attack type Spells and damage type Normal
      • Unit - Create 1 S_EffectDummy for (Owner of S_Caster[S_LoopIndex[2]]) at S_LeakPoint[1] facing (S_Angle[S_LoopIndex[2]] + 180.00) degrees
      • Unit - Add a 3.00 second Generic expiration timer to (Last created unit)
      • Animation - Change S_Caster[S_LoopIndex[2]]'s animation speed to 100.00% of its original speed
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
      • Custom script: call RemoveLocation(udg_S_LeakPoint[1])
      • Custom script: call RemoveLocation(udg_S_LeakPoint[2])
      • -------- /////////////////////////////////////////////////////////////////////////////////////////////// --------
  • SLoop
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • -------- DON'T CHANGE ANYTHING BELOW THIS LINE. --------
      • -------- ************************************************************************************************************* --------
      • For each (Integer S_LoopIndex[3]) from 1 to S_LoopIndex[2], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • S_LoopIndex[1] Not equal to 0
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • S_Counter[S_LoopIndex[3]] Less than or equal to S_MaxCount
                • Then - Actions
                  • Set S_Counter[S_LoopIndex[3]] = (S_Counter[S_LoopIndex[3]] + 1)
                  • Set S_LeakPoint[1] = (Position of S_EnemyUnit[S_LoopIndex[3]])
                  • Set S_LeakPoint[2] = (S_LeakPoint[1] offset by S_KnocbackSpeed towards S_Angle[S_LoopIndex[3]] degrees)
                  • Unit - Move S_EnemyUnit[S_LoopIndex[3]] instantly to S_LeakPoint[2]
                  • Special Effect - Create a special effect at S_LeakPoint[2] using S_Effect[1]
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_S_LeakPoint[1])
                  • Custom script: call RemoveLocation(udg_S_LeakPoint[2])
                • Else - Actions
                  • Set S_Counter[S_LoopIndex[3]] = 0
                  • Set S_LeakPoint[1] = (Position of S_EnemyUnit[S_LoopIndex[3]])
                  • Special Effect - Create a special effect at S_LeakPoint[1] using S_Effect[2]
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_S_LeakPoint[1])
                  • Set S_LoopIndex[1] = (S_LoopIndex[1] - 1)
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • S_LoopIndex[1] Equal to 0
        • Then - Actions
          • Set S_LoopIndex[2] = 0
          • Trigger - Turn off (This trigger)
        • Else - Actions
Contents

Just another Warcraft III map (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 22:49, 12th Jan 2014 BPower: Normally I don't intervene so quickly, but rather give the thread time to progess. First and foremost use a different way of indexing, look into this...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

22:49, 12th Jan 2014
BPower:
Normally I don't intervene so quickly, but rather give the thread time to progess.

First and foremost use a different way of indexing, look into this thread it is very easy to understand Dynamic Indexing

Heay Slash
  • Store picked unit into a variable
  • The same unit can be hit multiple times, hence the damage is often a multiple of the original damage.
Heavy Stomp
  • The animation speed should be configurable
  • The variable names should be HS_ and not S_
  • Use TriggeringUnit and not CastingUnit
  • You have a location leak
  • Don't use an array for caster and damage if you don't need it inside the loop

The spell concepts are very simple, hence I expect the code to be very good and clear, otherwise I won't approve it.
 
Level 22
Joined
Aug 27, 2013
Messages
3,973
It's been awhile since my last time reviewing spells

| Rheiko | 12/01/14
Needs Fix

Rheiko's Review:


-Heavy Slash-
===============
  • Set HS_Caster[HS_LoopIndex[2]] = (Casting unit)
-> use triggering unit instead of casting unit

  • Set HS_MaxDistance[HS_LoopIndex[2]] = HS_MaxDistance_Config[(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])]
Store "(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])" into a variable

  • Unit - Cause HS_Caster[HS_LoopIndex[3]] to damage (Picked unit), dealing HS_Damage1[HS_LoopIndex[3]] damage of attack type Spells and damage type Normal
Store picked unit into a variable (i.e TempUnit)
deathismyfriend said:
store everything you use twice or more into a variable

  • Set HS_LeakPoint[4] = (Position of (Picked unit))
  • Special Effect - Create a special effect at (Position of (Picked unit)) using HS_Effect[3]
you store a location but you don't use it? so what was that for?
Use that stored location

  • Set HS_LeakPoint[1] = (Position of HS_Caster[HS_LoopIndex[2]])
  • Set HS_LeakPoint[2] = ((Position of HS_Caster[HS_LoopIndex[2]]) offset by HS_CurDistance[HS_LoopIndex[2]] towards HS_Angle[HS_LoopIndex[2]] degrees)
use that HS_LeakPoint[1]

  • Custom script: call RemoveLocation(udg_HS_LeakPoint[3])
You destroy LeakPoint[3] when there is no LeakPoint[3] ever be stored
you should destroy LeakPoint[4] instead

-Heart Stomp-
===============

  • Set S_Damage[S_LoopIndex[2]] = S_Damage_Config[(Level of (Ability being cast) for S_Caster[S_LoopIndex[2]])]
Level of S_Ability

[TD][/TD]
 
Level 2
Joined
Dec 7, 2013
Messages
7
It's been awhile since my last time reviewing spells

| Rheiko | 12/01/14
Needs Fix

Rheiko's Review:


-Heavy Slash-
===============
  • Set HS_Caster[HS_LoopIndex[2]] = (Casting unit)
-> use triggering unit instead of casting unit

  • Set HS_MaxDistance[HS_LoopIndex[2]] = HS_MaxDistance_Config[(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])]
Store "(Level of HS_Ability for HS_Caster[HS_LoopIndex[2]])" into a variable

  • Unit - Cause HS_Caster[HS_LoopIndex[3]] to damage (Picked unit), dealing HS_Damage1[HS_LoopIndex[3]] damage of attack type Spells and damage type Normal
Store picked unit into a variable (i.e TempUnit)


  • Set HS_LeakPoint[4] = (Position of (Picked unit))
  • Special Effect - Create a special effect at (Position of (Picked unit)) using HS_Effect[3]
you store a location but you don't use it? so what was that for?
Use that stored location

  • Set HS_LeakPoint[1] = (Position of HS_Caster[HS_LoopIndex[2]])
  • Set HS_LeakPoint[2] = ((Position of HS_Caster[HS_LoopIndex[2]]) offset by HS_CurDistance[HS_LoopIndex[2]] towards HS_Angle[HS_LoopIndex[2]] degrees)
use that HS_LeakPoint[1]

  • Custom script: call RemoveLocation(udg_HS_LeakPoint[3])
You destroy LeakPoint[3] when there is no LeakPoint[3] ever be stored
you should destroy LeakPoint[4] instead

-Heart Stomp-
===============

  • Set S_Damage[S_LoopIndex[2]] = S_Damage_Config[(Level of (Ability being cast) for S_Caster[S_LoopIndex[2]])]
Level of S_Ability

[TD][/TD]

thanks for telling me...im hurry while making the spells... :vw_death:
 
Top