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

Nevermore's Shadowraze

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Now...Fixed, I'll be enough LOL..
Here is the triggers:
  • Shadowraze Learn
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Shadowraze
    • Actions
      • -------- If Hero Learn Shadowraze Ability, we must gove them the unit Shadowrazes ability and set there levels --------
      • Unit - Add Shadowraze (C) to (Triggering unit)
      • Unit - Add Shadowraze (X) to (Triggering unit)
      • Unit - Add Shadowraze (Z) to (Triggering unit)
      • Unit - Set level of Shadowraze (C) for (Triggering unit) to (Level of Shadowraze for (Triggering unit))
      • Unit - Set level of Shadowraze (X) for (Triggering unit) to (Level of Shadowraze for (Triggering unit))
      • Unit - Set level of Shadowraze (Z) for (Triggering unit) to (Level of Shadowraze for (Triggering unit))
  • Shadowraze Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shadowraze (C)
          • (Ability being cast) Equal to Shadowraze (X)
          • (Ability being cast) Equal to Shadowraze (Z)
    • Actions
      • -------- Set the Index --------
      • Set Temp_Index = (Temp_Index + 1)
      • -------- Set the position of casters --------
      • Set Temp_Loc[Temp_Index] = (Position of (Triggering unit))
      • -------- Set the damage taken by casters' enemies --------
      • Set Temp_Damage[Temp_Index] = ((Real((Level of (Ability being cast) for (Triggering unit)))) x 75.00)
      • -------- If casters' cast the "Z" type of Shadowraze, then this trigger's actions will loop --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (Z)
        • Then - Actions
          • -------- The range of "Z" type of Shadowraze --------
          • Set Temp_Range[Temp_Index] = 200.00
          • Set Temp_Loc2[Temp_Index] = (Temp_Loc[Temp_Index] offset by Temp_Range[Temp_Index] towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group[Temp_Index] = (Units within 250.00 of Temp_Loc2[Temp_Index] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and (((Matching unit) is alive) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group[Temp_Index] and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage[Temp_Index] damage of attack type Spells and damage type Magic
        • Else - Actions
      • -------- Or the "X" type of Shadowraze --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (X)
        • Then - Actions
          • -------- The range of "X" type of Shadowraze --------
          • Set Temp_Range[Temp_Index] = 450.00
          • Set Temp_Loc2[Temp_Index] = (Temp_Loc[Temp_Index] offset by Temp_Range[Temp_Index] towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group[Temp_Index] = (Units within 250.00 of Temp_Loc2[Temp_Index] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and (((Matching unit) is alive) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group[Temp_Index] and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage[Temp_Index] damage of attack type Spells and damage type Magic
        • Else - Actions
      • -------- Or the "C" type of Shadowraze --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (C)
        • Then - Actions
          • -------- The range of "C" type of Shadowraze --------
          • Set Temp_Range[Temp_Index] = 700.00
          • Set Temp_Loc2[Temp_Index] = (Temp_Loc[Temp_Index] offset by Temp_Range[Temp_Index] towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group[Temp_Index] = (Units within 250.00 of Temp_Loc2[Temp_Index] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and (((Matching unit) is alive) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group[Temp_Index] and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage[Temp_Index] damage of attack type Spells and damage type Magic
        • Else - Actions
      • -------- Creating the unit as "Special Effect" --------
      • Unit - Create 1 Shadowraze (Special Effect) for Neutral Passive at Temp_Loc2[Temp_Index] facing Default building facing degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • -------- Add other special effects, or you can remove this --------
      • Special Effect - Create a special effect at (Position of (Last created unit)) using Abilities\Spells\Undead\Unsummon\UnsummonTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Removing Locations --------
      • Custom script: call RemoveLocation ( udg_Temp_Loc[udg_Temp_Index] )
      • Custom script: call RemoveLocation ( udg_Temp_Loc2[udg_Temp_Index] )
      • Custom script: call DestroyGroup ( udg_Temp_Group[udg_Temp_Index] )
      • -------- Setting the index --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Temp_Index Greater than or equal to 5
        • Then - Actions
          • Set Temp_Index = 0
        • Else - Actions
Keywords:
Nevermore, shadow, shadowfiend, shadowraze, gui
Contents

Nevermore's Shadowraze (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 05:37, 26th Aug 2012 Magtheridon96: You shouldn't repeat code like this. Only use an if block to set a variable to the range you're going to use, then finally, just get the point using the...

Moderator

M

Moderator

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

05:37, 26th Aug 2012
Magtheridon96: You shouldn't repeat code like this.
Only use an if block to set a variable to the range you're going to use, then finally, just get the point using the range you set in the if blocks as the offset and the facing of the caster as the angle, then do the rest of the actions regularly.

Also, this spell should be configurable.
You shouldn't use constants. I shouldn't be forced to mess with spell code if I want to modify simple things like Special effects, damage and range.
You should create a configuration trigger and set variables to the constants in there. Use arrays for setting data that will change for different levels and use regular variables for things like the effects.
 
Level 8
Joined
Oct 26, 2008
Messages
387
I'll post the triggers


  • Shadowraze Learn
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Shadowraze
    • Actions
      • Set S_Integer = (Player number of (Owner of (Triggering unit)))
      • Set S_Caster[S_Integer] = (Triggering unit)
      • Set S_Level[S_Integer] = (Level of Shadowraze for S_Caster[S_Integer])
      • Set S_Ability_Level[S_Integer] = ((Level of Shadowraze for S_Caster[S_Integer]) x 75)
      • Unit - Set level of Shadowraze (C) for S_Caster[S_Integer] to S_Ability_Level[S_Integer]
      • Unit - Set level of Shadowraze (X) for S_Caster[S_Integer] to S_Ability_Level[S_Integer]
      • Unit - Set level of Shadowraze (Z) for S_Caster[S_Integer] to S_Ability_Level[S_Integer]

  • Shadowraze Learn 2
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Shadowraze
    • Actions
      • Unit - Add Shadowraze (Z) to S_Caster[S_Integer]
      • Unit - Add Shadowraze (X) to S_Caster[S_Integer]
      • Unit - Add Shadowraze (C) to S_Caster[S_Integer]
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (S_Caster[S_Integer] has buff Unknown (B000)) Equal to True
        • Then - Actions
          • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
        • Else - Actions
      • Trigger - Turn off (This trigger)
I didnt understand what the

  • If - Conditions
    • (S_Caster[S_Integer] has buff Unknown (B000)) Equal to True
    • Then - Actions
      • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
Does




  • Shadowraze C
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shadowraze (C)
    • Actions
      • Set S_Caster[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
      • Wait 0.10 seconds
      • Unit - Create 1 Shadowraze (Special Effect) for (Owner of S_Caster[S_Integer]) at ((Position of S_Caster[S_Integer]) offset by 700.00 towards (Facing of S_Caster[S_Integer]) degrees) facing (Facing of S_Caster[S_Integer]) degrees
      • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
      • Unit Group - Pick every unit in (Units within 300.00 of (Position of (Last created unit))) and do (Actions)
        • Loop - Actions
          • Unit - Cause S_Caster[S_Integer] to damage (Picked unit), dealing (Real(S_Ability_Level[S_Integer])) damage of attack type Spells and damage type Normal
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (S_Caster[S_Integer] has buff Shadowrazer ) Equal to True
          • (Owner of (Picked unit)) Not equal to (Random player from (All allies of (Owner of S_Caster[S_Integer])))
        • Then - Actions
          • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
        • Else - Actions
  • Shadowraze X
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shadowraze (X)
    • Actions
      • Wait 0.10 seconds
      • Unit - Create 1 Shadowraze (Special Effect) for (Owner of S_Caster[S_Integer]) at ((Position of S_Caster[S_Integer]) offset by 400.00 towards (Facing of S_Caster[S_Integer]) degrees) facing (Facing of S_Caster[S_Integer]) degrees
      • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
      • Unit Group - Pick every unit in (Units within 300.00 of (Position of (Last created unit))) and do (Actions)
        • Loop - Actions
          • Unit - Cause S_Caster[S_Integer] to damage (Picked unit), dealing (Real(S_Ability_Level[S_Integer])) damage of attack type Spells and damage type Normal
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (S_Caster[S_Integer] has buff Shadowrazer ) Equal to True
          • (Owner of (Picked unit)) Not equal to (Random player from (All allies of (Owner of S_Caster[S_Integer])))
        • Then - Actions
          • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
        • Else - Actions
  • Shadowraze Z
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shadowraze (Z)
    • Actions
      • Wait 0.10 seconds
      • Unit - Create 1 Shadowraze (Special Effect) for (Owner of S_Caster[S_Integer]) at ((Position of S_Caster[S_Integer]) offset by 150.00 towards (Facing of S_Caster[S_Integer]) degrees) facing (Facing of S_Caster[S_Integer]) degrees
      • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
      • Unit Group - Pick every unit in (Units within 300.00 of (Position of (Last created unit))) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Picked unit) Not equal to S_Caster[S_Integer]
            • Then - Actions
              • Unit - Cause S_Caster[S_Integer] to damage (Picked unit), dealing (Real(S_Ability_Level[S_Integer])) damage of attack type Spells and damage type Normal
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (S_Caster[S_Integer] has buff Shadowrazer ) Equal to True
          • (Owner of (Picked unit)) Not equal to (Random player from (All allies of (Owner of S_Caster[S_Integer])))
        • Then - Actions
          • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
        • Else - Actions
Avoid using
  • Wait X seconds
because if you do it is not MUI, and it wont be accepted.

This,


  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Picked unit) Not equal to S_Caster[S_Integer]
    • Then - Actions
      • Unit - Cause S_Caster[S_Integer] to damage (Picked unit), dealing (Real(S_Ability_Level[S_Integer])) damage of attack type Spells and damage type Normal

is going to damage your allies as well, the Condition should be,

  • If - Conditions
    • ((Picked unit) Not equal to S_Caster[S_Integer]) and (((Picked unit) belongs to an ally of (Owner of S_Caster[S_Integer])) Equal to False)
So its going to select only enemies/neutrals etc

And again, what does this do?



  • Else - Actions
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • (S_Caster[S_Integer] has buff Shadowrazer ) Equal to True
        • (Owner of (Picked unit)) Not equal to (Random player from (All allies of (Owner of S_Caster[S_Integer])))
      • Then - Actions
        • Unit - Remove Shadowrazer buff from S_Caster[S_Integer]
      • Else - Actions


 
Level 23
Joined
Apr 16, 2012
Messages
4,041
its not MUI anyways, its MPI(he uses (Player number of (Owner of (Triggering unit))) so ) and you can have MUI with waits, example:
  • Actions
    • Custom script: local unit u = GetTriggerUnit()
    • Wait 5.00 seconds
    • Unit - Kill u
    • Custom script: set u = null
is completly MUI
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
  • Shadowraze Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shadowraze (200)
          • (Ability being cast) Equal to Shadowraze (450)
          • (Ability being cast) Equal to Shadowraze (700)
    • Actions
      • Set Temp_Loc = (Position of (Triggering unit))
      • Set Temp_Damage = (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
          • (Ability being cast) Equal to Shadowraze (200)
        • Then - Actions
          • Set Temp_Range = 200.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (450)
        • Then - Actions
          • Set Temp_Range = 450.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (700)
        • Then - Actions
          • Set Temp_Range = 700.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • Unit - Create 1 Projectile Dummy for Neutral Passive at Temp_Loc2 facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to (150.00%, 150.00%, 150.00%) of its original size
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using ShadowRaze.mdx
      • Special Effect - Destroy (Last created special effect)
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Custom script: call RemoveLocation (udg_Temp_Loc)
      • Custom script: call RemoveLocation (udg_Temp_Loc2)
      • Custom script: call DestroyGroup (udg_Temp_Group)
Seems better, IMO.
I have the full Shadowfiend spellpack made by me (but not released) and I can give it to you, if you want to learn from it.
 
Last edited by a moderator:
Level 33
Joined
Mar 27, 2008
Messages
8,035
I once created Shadowraze for a request, and I don't even use Wait (it works flawlessly).
By using the unit's default Cast Backswing/Point, that acts as my "Wait".
Which makes my Shadowraze a MUI trigger, by default.

Also, Wait below 0.27 seconds does not work (0.27s is the minimum wait time).
 
Level 12
Joined
Nov 20, 2007
Messages
660
  • Shadowraze Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Shadowraze (200)
          • (Ability being cast) Equal to Shadowraze (450)
          • (Ability being cast) Equal to Shadowraze (700)
    • Actions
      • Set Temp_Loc = (Position of (Triggering unit))
      • Set Temp_Damage = (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
          • (Ability being cast) Equal to Shadowraze (200)
        • Then - Actions
          • Set Temp_Range = 200.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (450)
        • Then - Actions
          • Set Temp_Range = 450.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to Shadowraze (700)
        • Then - Actions
          • Set Temp_Range = 700.00
          • Set Temp_Loc2 = (Temp_Loc offset by Temp_Range towards (Facing of (Triggering unit)) degrees)
          • Set Temp_Group = (Units within 250.00 of Temp_Loc2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))))
          • Unit Group - Pick every unit in Temp_Group and do (Actions)
            • Loop - Actions
              • Unit - Cause (Triggering unit) to damage (Picked unit), dealing Temp_Damage damage of attack type Spells and damage type Magic
        • Else - Actions
      • Unit - Create 1 Projectile Dummy for Neutral Passive at Temp_Loc2 facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to (150.00%, 150.00%, 150.00%) of its original size
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using ShadowRaze.mdx
      • Special Effect - Destroy (Last created special effect)
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Custom script: call RemoveLocation (udg_Temp_Loc)
      • Custom script: call RemoveLocation (udg_Temp_Loc2)
      • Custom script: call DestroyGroup (udg_Temp_Group)
Seems better, IMO.
I have the full Shadowfiend spellpack made by me (but not released) and I can give it to you, if you want to learn from it.

You can still make it shorter
 
Top