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

Assassinate v1.4

My 1st spell that I would like to upload to THW.

It engraves a stigma on its primary victim and destroys it with a stigma every 0.1 seconds. At the end of the stigma, it will deal damage to victims in an area and stuns them for a short duration.
The caster is invulnerable while the stigma is active.

  • Assassinate
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Assassinate
    • Actions
      • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
      • -------- DO NOT CHANGE!!! --------
      • Set Assa_Max = (Assa_Max + 1)
      • Set Assa_Caster[Assa_Max] = (Triggering unit)
      • Set Assa_Target[Assa_Max] = (Target unit of ability being cast)
      • Set Assa_Ability = (Ability being cast)
      • Set Assa_Lvl[Assa_Max] = (Level of (Ability being cast) for Assa_Caster[Assa_Max])
      • Unit - Pause Assa_Caster[Assa_Max]
      • Unit - Make Assa_Caster[Assa_Max] Invulnerable
      • Unit - Turn collision for Assa_Caster[Assa_Max] Off
      • -------- END --------
      • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
      • -------- CHANGEABLE: No. of Attacks --------
      • Set Assa_Attacks[Assa_Max] = 12
      • -------- CHANGEABLE: Random Point where the Caster will teleport and attack --------
      • Set Assa_Random = (Random real number between 50.00 and 100.00)
      • -------- CHANGEABLE: Damage Dealt to the primary target --------
      • Set Assa_DamageS[1] = 10.00
      • Set Assa_DamageS[2] = 15.00
      • Set Assa_DamageS[3] = 20.00
      • -------- CHANGEABLE: Damage Dealt if 'Assa_DamageS' effect is done (ending effect) --------
      • Set Assa_DamageE[1] = 50.00
      • Set Assa_DamageE[2] = 200.00
      • Set Assa_DamageE[3] = 500.00
      • -------- CHANGEABLE: Area of effect if 'Assa_DamageS' effect is done (ending effect) --------
      • Set Assa_Area[1] = 125.00
      • Set Assa_Area[2] = 300.00
      • Set Assa_Area[3] = 500.00
      • -------- CHANGEABLE: Animation Speed --------
      • Animation - Change Assa_Caster[Assa_Max]'s animation speed to 250.00% of its original speed
      • -------- END --------
      • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
      • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
      • -------- DO NOT CHANGE!!! --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Assa_Max Equal to 1
        • Then - Actions
          • Trigger - Turn on Assassinate Loop <gen>
        • Else - Actions
      • -------- END --------
      • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
  • Assassinate Loop
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Assa_Loop) from 1 to Assa_Max, do (Actions)
        • Loop - Actions
          • Animation - Play Assa_Caster[Assa_Loop]'s attack animation
          • Special Effect - Create a special effect attached to the origin of Assa_Target[Assa_Loop] using Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
          • Special Effect - Destroy (Last created special effect)
          • Special Effect - Create a special effect attached to the origin of Assa_Caster[Assa_Loop] using Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
          • Special Effect - Destroy (Last created special effect)
          • Set Assa_PointT = (Position of Assa_Target[Assa_Loop])
          • Set Assa_PointR = (Assa_PointT offset by Assa_Random towards (Random real number between 0.00 and 359.99) degrees)
          • Unit - Move Assa_Caster[Assa_Loop] instantly to Assa_PointR, facing Assa_PointT
          • Unit - Create 1 Assassinate Dummy for (Owner of Assa_Caster[Assa_Loop]) at Assa_PointR facing Assa_PointT
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 75.00% transparency
          • Animation - Play (Last created unit)'s attack animation
          • Unit - Cause Assa_Caster[Assa_Loop] to damage Assa_Target[Assa_Loop], dealing Assa_DamageS[Assa_Lvl[Assa_Loop]] damage of attack type Spells and damage type Normal
          • Set Assa_Attacks[Assa_Loop] = (Assa_Attacks[Assa_Loop] - 1)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Assa_Attacks[Assa_Loop] Equal to 0
            • Then - Actions
              • Set Assa_GroupDMG = (Units within Assa_Area[Assa_Lvl[Assa_Loop]] of Assa_PointT matching ((((Matching unit) belongs to an enemy of (Owner of Assa_Caster[Assa_Loop])) Equal to True) and (((Matching unit) is alive) Equal to True)))
              • Unit Group - Pick every unit in Assa_GroupDMG and do (Actions)
                • Loop - Actions
                  • Unit - Cause Assa_Caster[Assa_Loop] to damage (Picked unit), dealing Assa_DamageE[Assa_Lvl[Assa_Loop]] damage of attack type Spells and damage type Normal
                  • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • -------- Should avoid making dummies under existing units as this consumes unnescescary resources. --------
                  • Unit - Create 1 Dummy for (Owner of Assa_Caster[Assa_Loop]) at Assa_PointT facing Default building facing degrees
                  • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                  • Unit - Order (Last created unit) to Human Mountain King - Storm Bolt (Picked unit)
              • -------- Only remove existing groups. --------
              • Custom script: call DestroyGroup( udg_Assa_GroupDMG )
              • Unit - Unpause Assa_Caster[Assa_Loop]
              • Unit - Make Assa_Caster[Assa_Loop] Vulnerable
              • Unit - Turn collision for Assa_Caster[Assa_Loop] On
              • Animation - Change Assa_Caster[Assa_Loop]'s animation speed to 100.00% of its original speed
              • Set Assa_Caster[Assa_Loop] = Assa_Caster[Assa_Max]
              • Set Assa_Caster[Assa_Max] = No unit
              • -------- Must move max index object member to loop index object member. It makes no sense to move loop index object member to itself! --------
              • Set Assa_Target[Assa_Loop] = Assa_Target[Assa_Max]
              • Set Assa_Target[Assa_Max] = No unit
              • -------- Must move all members of an object during object move operation. --------
              • Set Assa_Attacks[Assa_Loop] = Assa_Attacks[Assa_Max]
              • Set Assa_Lvl[Assa_Loop] = Assa_Lvl[Assa_Max]
              • Set Assa_Max = (Assa_Max - 1)
              • Set Assa_Loop = (Assa_Loop - 1)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_Assa_PointT)
          • Custom script: call RemoveLocation(udg_Assa_PointR)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Assa_Max Equal to 0
            • Then - Actions
              • Trigger - Turn off (This trigger)
            • Else - Actions
  • Assassinate Recover
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Assassinate Dummy
    • Actions
      • Unit - Remove (Triggering unit) from the game
Inspired by Cabal Online - Assassinate
Click here to watch Cabal Online's Original Version of it.


Please Rate this Spell.
Update:
v1.3 - Made it MUI
Thanks to Dr Super Good for fixing the spell in v1.3
v1.4 - Made Configurable and made some changes

Keywords:
Blink, Teleport, Stun, Attack, Cabal, Assassinate, Force-Blader
Contents

Assassinate v1.4 (Map)

Reviews
15:28, 22nd Jul 2013 PurgeandFire: Good job. This spell is nicely coded and fun to play around with.

Moderator

M

Moderator

15:28, 22nd Jul 2013
PurgeandFire: Good job. This spell is nicely coded and fun to play around with.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
can u post the triggers plz.
u also need importing instructions.

edit: i was able to dl and i found a few mistakes.

u should not destroy the points in the then condition unless u make the point in there ( in this case u dont). these will leak whenever the else condition is run
anything u use twice or more store into a variable and use that. ex: picked unit is used a lot.
u leak a point. the assa_randompoint
 
Level 14
Joined
Oct 16, 2011
Messages
296
can u post the triggers plz.
u also need importing instructions.

edit: i was able to dl and i found a few mistakes.

u should not destroy the points in the then condition unless u make the point in there ( in this case u dont). these will leak whenever the else condition is run
anything u use twice or more store into a variable and use that. ex: picked unit is used a lot.
u leak a point. the assa_randompoint

ow, haha. thanks for checking it @deathismyfriend, i made this spell in just 1 day and i didn't rechecked it. again, thanks for checking my spell :D
 
Level 16
Joined
Jul 31, 2012
Messages
2,217
This Spell has troubles with MUI :/
You must add 2 casters in the test map when uploading a spell
Now, when i added 1 caster and casted them together, it ended up that the second caster was still disabled after the spell and invulnerable, and after that, i made the first caster cast it again, he ended up also disabled and invulnerable

The thing that causes this is this line:
  • Set Assa_Max = (Assa_Max - 1)
When you reduce the max index by 1, when it was 2 before, when looping the spell, the 2nd array will be ignored and only the first will continue

Overall, it's a nice spell but with a MUI problem:
it should take a 2/5 but since it's cool with it's effects:
225233-albums6523-picture70793.jpg


voting for: NEEDS FIX
 
Level 7
Joined
Dec 28, 2009
Messages
257
Errm, i didnt read other comments in this talk, but - shouldnt uploaded spell also contain some tooltip, what exactly it does? :D Like, yep, i could read it whole and see for myself (i could, im too lazy now), but i think besides trigger of spell it should also contain few words what exactly it does, so we dont have to read it all and find out what it does :D + maybe some other stuff for lazy people like which values can be changed (range, AoE, damage, etc) by integers or wherever.

Just saying, its your first spell as you said, so, information for future :D and good luck fixing it if it still has got some problems (im afraid i cant help very much, Deathismyfriend and DotCa are skillas, im noob :D)
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
u messed up here. its in the de-index part.
  • Set Assa_Target[Assa_Loop] = Assa_Target[Assa_Loop]
u should put this after the loop not in the loop
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  • If - Conditions
  • Assa_Max Equal to 0
  • Then - Actions
  • Trigger - Turn off (This trigger)
  • Else - Actions
 
Hashtables are slower because the process of saving and loading data from a hashtable is not trivial like an array lookup. First, the passed indexes need to go through a hash function, then you'd have to query the data from a structure that may or may not be efficient depending on how Blizzard actually implemented the hashtable ;v
 

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,449
I think PnF missed one thing:

  • Unit - Pause Assa_Caster[Assa_Max]
Thought it is not allowed. Better use a dummy unit with the same model as the Hero with locust or invulnerable ability, and hide the Hero somewhere. Or just don't pause the hero completely. Also making hero invulnerable while casting an ability is sometimes considered as imbalance.

Adding some configurable thingies will be nice :)

Post above me is right.
 
Level 38
Joined
Feb 27, 2007
Messages
4,951
This one does not use hashtables so it will work. You can easily check the code to see if it uses something like hashtables that didn't exist in 1.22. Or, you know, update your game install. But I'm gonna guess since I've mentioned that in 3 different threads you've commented in about 1.22 that you're not going to do that.
 
Top