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

Assassination

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
The Hero assassinates a target, allowing him to teleport to the target and slash it with his blade. Each slash deals 10\20\30 damage.


  • Assassination Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set Assa_Ability = Assassination
      • Set Assa_Dummy = Assassination Dummy - Give Credits to PAZBoy
      • Set Assa_Dummy2 = Dummy - Give Credits to PAZBoy
      • Set Assa_SFX = Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
      • Set Assa_SFX2 = Objects\Spawnmodels\Critters\Albatross\CritterBloodAlbatross.mdl
      • Set Assa_Random = (Random real number between 50.00 and 100.00)
      • Set Assa_DamageS[1] = 10.00
      • Set Assa_DamageS[2] = 15.00
      • Set Assa_DamageS[3] = 20.00
      • Set Assa_DamageE[1] = 50.00
      • Set Assa_DamageE[2] = 200.00
      • Set Assa_DamageE[3] = 500.00
      • Set Assa_Area[1] = 125.00
      • Set Assa_Area[2] = 300.00
      • Set Assa_Area[3] = 500.00
  • Assassination Start
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Assa_Ability
    • Actions
      • 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_Lvl[Assa_Max] = (Level of (Ability being cast) for Assa_Caster[Assa_Max])
      • Unit - Make Assa_Caster[Assa_Max] Invulnerable
      • Unit - Turn collision for Assa_Caster[Assa_Max] Off
      • Set Assa_Attacks[Assa_Max] = 12
      • Animation - Change Assa_Caster[Assa_Max]'s animation speed to 250.00% of its original speed
      • 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 Assassination Loop <gen>
        • Else - Actions
  • Assassination Loop
    • Events
      • Time - Every 0.03 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 chest of Assa_Target[Assa_Loop] using Assa_SFX
          • Special Effect - Destroy (Last created special effect)
          • Special Effect - Create a special effect attached to the chest of Assa_Target[Assa_Loop] using Assa_SFX2
          • 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 Assa_Dummy for (Owner of Assa_Caster[Assa_Loop]) at Assa_PointR facing Assa_PointT
          • Unit - Add a 0.10 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 chest of (Picked unit) using Assa_SFX
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Create a special effect attached to the chest of (Picked unit) using Assa_SFX2
                  • Special Effect - Destroy (Last created special effect)
                  • Unit - Create 1 Assa_Dummy2 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)
              • Custom script: call DestroyGroup( udg_Assa_GroupDMG )
              • 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
              • Set Assa_Target[Assa_Loop] = Assa_Target[Assa_Max]
              • Set Assa_Target[Assa_Max] = No unit
              • 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
  • Assassination Dummy Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Assa_Dummy
    • Actions
      • Unit - Hide (Triggering unit)


Keywords:
Assassin, Assassinate, Assassination, blood, attack, slash, blade
Contents

Assassination (Map)

Reviews
IcemanBo: Read again mentioned points. BPower: Demo map file size is unacceptable. Reduce it down to what is directly related to the spell. You still have no configuration trigger. Check out approved resources for better understanding...

Moderator

M

Moderator

IcemanBo:
Read again mentioned points.

BPower:
Demo map file size is unacceptable. Reduce it down to what is directly related to the spell.
You still have no configuration trigger. Check out approved resources for better understanding.

16:07, 5th Jul 2015
Maker:
Review

  • The test map is way too big, reduce unneeded imported files
  • Remove the recover trigger, use dummy animation death time
    and death type "Does not decay" instead
  • Don't pause the caster
  • Don't do "Assa_Max Equal to 0" ten times per second
  • You only need one dummy unit to cast Storm bolt on every unit
  • The spell is not easily configurable, you could use a configuration trigger
 
Hello.

This looks much better already as you go with indexing now,
but still there are critical things to mention.

Please read the http://www.hiveworkshop.com/forums/rules-information-710/spell-submission-rules-230362/.

Users have to be able to configure your spell to their liking.
^This means create config trigger. In this config trigger user should be able
to configurate all important aspects of the spell to his likes. Also for each level.
Do not put the config staff into the cast trigger. That's completly not wanted.
Spells and systems must have decent importing instructions

Also don't hardcode. That means don't write explicite values into your main code, when user could want to change it.
For example effects. Don't choose the effect YOU want, but let user decide it in config trigger.
Make as much as posible configurable, for example also damage and attack type.

Responses used more often should be stored into temporary variables to gain performance.
For example "LastCreated..t" is used very often? Store it into a varible and then work with the variable.

I have not tested your spell in game yet, but for periodical movements 0.03 is recommended as periodic event to achieve smooth visuals.

Your "remove unit" trigger is not deeded. Change the death type of the dummies to "does not raise/not decay" and it will be finde on death.

The check to turn off the periodic trigger should only happen onDeindex, not in each iteration of your loop.

Don't use PauseUnit for caster.

NeedsFix
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,183
1/5 is going a little overboard. I took a quick look, seems to be MUI, no major mistakes either. Big improvements since the last spells I saw by you.

edit: my bad, I should not have mentioned the rating. It's like begging for drama, and it was not meant to criticize you I was mostly surprised.
 
Last edited:
Level 13
Joined
Jul 16, 2012
Messages
679
- Create a very simple test map buddy. The high priority here is your spell not the test map :)

- And also remove those things that 'cuz of lag does not part of your spell

- In Trigger Loop
Unit - Create 1 Assa_Dummy for (Owner of Assa_Caster[Assa_Loop]) at Assa_PointR facing Assa_PointT
Change the Owner to Neutral Passive Player

Unit - Create 1 Assa_Dummy2 for (Owner of Assa_Caster[Assa_Loop]) at Assa_PointT facing Default building facing degrees
Change the Owner to Neutral Passive Player this Dummy Caster
And also in Object Editor,
change the DummyCaster's Stun Ability the Stats - Target Allowed (remove Enemy)
- This
  • 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)))
All conditions, put it in ITE (If Then Else)
 
Top