• 🏆 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!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

How to make a Bladestorm that scales with Agility or Damage?

Status
Not open for further replies.
The simplest way to do this would be to change the Bladestorm damage field OnCast. When a unit casts the ability you change its damage field using the new Ability - Set Ability functions to your desired value. A similar question has been answered here
yeah but doesnt that just do the dmg once? or does it repeat with each proc of damage that bladestorm would normally apply? real sorry if this is an obvious thing but im an absolute noob in channeling spells modification, i tried to figure it out and its the deadest dead end i ever been in which is weird cuz figuring out attribute damage modified single target spells was relatively easy
 
Level 12
Joined
Feb 5, 2018
Messages
521
Well there are other fields too: like damage per second, damage per interval.

You can check the ability data in the object editor. If I remember correctly Bladestorm's damage field is "damage per second".

And yes it will change the damage for each tick.
 
Level 20
Joined
May 16, 2012
Messages
635
yeah but doesnt that just do the dmg once? or does it repeat with each proc of damage that bladestorm would normally apply? real sorry if this is an obvious thing but im an absolute noob in channeling spells modification, i tried to figure it out and its the deadest dead end i ever been in which is weird cuz figuring out attribute damage modified single target spells was relatively easy

The damage field of the Bladestorm ability represents the amount of damage dealt per second, so by changing its value OnCast you will change the total amount of damage dealt in each second, not by every tick, which is 6 in one second by the way. Let's say your current damage amount is 600, in game, when your unit casts Bladestorm, it will deal 100 magic damage every 0.1666667 seconds. Now let's say you do what i pointed out and change the damage field OnCast to 6000, now the ability will deal 1000 magic damage in the same interval.It doesnt really matter if it is a channel ability or not, the principle is the same.
 
Thank you so much all of u. I didnt get it at first but i just sat down and kept looking at that trigger for like 10 minutes and i realized that i literally just change the DamagePerSecond value in Object editor into Real(agility) x 0.25 number with triggers and it will execute that in game. So yeah ill try it out
 
Last edited:
Aight im back and im seriously starting to hate bladestorm, did not think this day would come but here iam, so, here is my Trigger:

  • Untitled Trigger 001
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Bladestorm
    • Actions
      • Set VariableSet Strength = (Strength of (Casting unit) (Include bonuses))
      • Set VariableSet realAttribute = (Real(Strength))
      • Ability - Set Ability: (Unit: Blademaster 0140 <gen>'s Ability with Ability Code: Bladestorm )'s Real Level Field: Damage Per Second ('Hbz5') of Level: 0 to (10.00 + (realAttribute x 0.25))
i tried Hbz2, Hbz5, Oww1 etc, but always the bladestorm does 0 dmg, doesnt even interupt enemy sleep. I seriously have no clue why the fk it wont work, looking at the trigger it seems fine i dont see the leak. Pls help dudes thank u
 
Thanks, also one last question sorry to bother but, i want the bladestorm to have 3 upgradeable levels. Do i need to make a trigger like this for each level or is it possible to change this trigger when the hero lvls up the spell. I want lvl 2 to do 25+ attribute x 0.25 and lvl 3 to deal 50+ attribute x 0.25

i know this should be basic stuff but im really good with triggers on some parts and then completly braindead on some other
 
Level 12
Joined
Feb 5, 2018
Messages
521
Just add if all condition are true spell level 1
-add actions
Then same for level 2
And so on

Better to run the damage on cast since the unit attribute changes.
 
Add this after you set the field. Bladestorm does not update the damage field, update it with increase and decrease level.
  • Unit - Increase level of (Ability being cast) for Caster
  • Unit - Decrease level of (Ability being cast) for Caster

  • Untitled Trigger 001
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Bladestorm
    • Actions
      • Set VariableSet Strength = (Strength of (Casting unit) (Include bonuses))
      • Set VariableSet realAttribute = (Real(Strength))
      • Ability - Set Ability: (Unit: Blademaster 0140 <gen>'s Ability with Ability Code: Bladestorm )'s Real Level Field: Damage Per Second ('Hbz5') of Level: 0 to (10.00 + (realAttribute x 0.25))
      • Unit - Increase level of Bladestorm for (Triggering unit)
      • Unit - Decrease level of Bladestorm for (Triggering unit)
i did what u said but it didnt help, my windstorm still deals 0 dmg and i really dont know where the mistake is anymore. Im uploading the map file, please take a quick look at the triggers maybe you can tell me where i fuckd up but i just dont know xd
 

Attachments

  • Bladestorm that just wont work.w3x
    23.4 KB · Views: 45
Level 12
Joined
Feb 5, 2018
Messages
521
  • foken bladestorm
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to idiotstorm
    • Actions
      • Set VariableSet Strength = (Strength of (Casting unit) (Include bonuses))
      • Set VariableSet realAttribute = (Real(Strength))
      • Set VariableSet Damage = 10.00
      • Set VariableSet DamageTOTAL = ((Integer(Damage)) + (Integer(realAttribute)))
      • Ability - Set Ability: (Unit: Blademaster 0140 <gen>'s Ability with Ability Code: idiotstorm )'s Real Level Field: Damage Per Second ('Oww1') of Level: 0 to (Real(DamageTOTAL))
      • Game - Display to (All players) the text: (String(DamageTOTAL))
      • Unit - Increase level of idiotstorm for (Triggering unit)
      • Unit - Decrease level of idiotstorm for (Triggering unit)
TESTED AND FIXED.
 

Attachments

  • Bladestorm that just wont work FIXED.w3x
    23.7 KB · Views: 43
  • foken bladestorm
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to idiotstorm
    • Actions
      • Set VariableSet Strength = (Strength of (Casting unit) (Include bonuses))
      • Set VariableSet realAttribute = (Real(Strength))
      • Set VariableSet Damage = 10.00
      • Set VariableSet DamageTOTAL = ((Integer(Damage)) + (Integer(realAttribute)))
      • Ability - Set Ability: (Unit: Blademaster 0140 <gen>'s Ability with Ability Code: idiotstorm )'s Real Level Field: Damage Per Second ('Oww1') of Level: 0 to (Real(DamageTOTAL))
      • Game - Display to (All players) the text: (String(DamageTOTAL))
      • Unit - Increase level of idiotstorm for (Triggering unit)
      • Unit - Decrease level of idiotstorm for (Triggering unit)
TESTED AND FIXED.

i swear to my fukken GRAVE that i did test it with Oww1 too but i guess i messed up the level of something no idea but THANKS DUD.... i cant belive how easy single target attribute scaling was compared to this garbage. But ye ill give u guys a couple rep points periodically, gotta wait refresh but yeah u both get at least 3 or 4
 
  • foken bladestorm
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to idiotstorm
    • Actions
      • Set VariableSet Strength = (Strength of (Casting unit) (Include bonuses))
      • Set VariableSet realAttribute = (Real(Strength))
      • Set VariableSet Damage = 10.00
      • Set VariableSet DamageTOTAL = ((Integer(Damage)) + (Integer(realAttribute)))
      • Ability - Set Ability: (Unit: Blademaster 0140 <gen>'s Ability with Ability Code: idiotstorm )'s Real Level Field: Damage Per Second ('Oww1') of Level: 0 to (Real(DamageTOTAL))
      • Game - Display to (All players) the text: (String(DamageTOTAL))
      • Unit - Increase level of idiotstorm for (Triggering unit)
      • Unit - Decrease level of idiotstorm for (Triggering unit)
TESTED AND FIXED.

my dud im really sorry to bother, i promise this is the last thing i need help with. Can you look at this and tell me where i fucked up?? it works on lvl 1 (your system) but when i try to scale it up it goes back to dealing 0 dmg

  • Incineration
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Incineration
    • Actions
      • Set VariableSet Inteligence = (Intelligence of (Casting unit) (Include bonuses))
      • Set VariableSet RealAttribute = (Real(Inteligence))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Real((Level of Incineration for (Triggering unit)))) Equal to 0.00
        • Then - Actions
          • Set VariableSet Damage = 10.00
          • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 0 to (Damage + (RealAttribute x 1.50))
          • Unit - Increase level of Incineration for (Triggering unit)
          • Unit - Decrease level of Incineration for (Triggering unit)
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Real((Level of Incineration for (Triggering unit)))) Equal to 1.00
            • Then - Actions
              • Set VariableSet Damage = 20.00
              • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 1 to (Damage + (RealAttribute x 1.50))
              • Unit - Increase level of Incineration for (Triggering unit)
              • Unit - Decrease level of Incineration for (Triggering unit)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Real((Level of Incineration for (Triggering unit)))) Equal to 2.00
                • Then - Actions
                  • Set VariableSet Damage = 35.00
                  • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 2 to (Damage + (RealAttribute x 1.50))
                  • Unit - Increase level of Incineration for (Triggering unit)
                  • Unit - Decrease level of Incineration for (Triggering unit)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Real((Level of Incineration for (Triggering unit)))) Equal to 3.00
                    • Then - Actions
                      • Set VariableSet Damage = 50.00
                      • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 3 to (Damage + (RealAttribute x 1.50))
                      • Unit - Increase level of Incineration for (Triggering unit)
                      • Unit - Decrease level of Incineration for (Triggering unit)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Real((Level of Incineration for (Triggering unit)))) Equal to 4.00
                        • Then - Actions
                          • Set VariableSet Damage = 70.00
                          • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 4 to (Damage + (RealAttribute x 1.50))
                          • Unit - Increase level of Incineration for (Triggering unit)
                          • Unit - Decrease level of Incineration for (Triggering unit)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Real((Level of Incineration for (Triggering unit)))) Equal to 5.00
                            • Then - Actions
                              • Set VariableSet Damage = 85.00
                              • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 5 to (Damage + (RealAttribute x 1.50))
                              • Unit - Increase level of Incineration for (Triggering unit)
                              • Unit - Decrease level of Incineration for (Triggering unit)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Real((Level of Incineration for (Triggering unit)))) Equal to 6.00
                                • Then - Actions
                                  • Set VariableSet Damage = 100.00
                                  • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 6 to (Damage + (RealAttribute x 1.50))
                                  • Unit - Increase level of Incineration for (Triggering unit)
                                  • Unit - Decrease level of Incineration for (Triggering unit)
                                • Else - Actions
                                  • Do nothing
 
Level 20
Joined
May 16, 2012
Messages
635
The "level" parameter in Set Ability function should always be "level of Incineration -1" in your case. Also on a side note, you could change the "Damage" to be 100/(7 - Level of Incineration). That way you will have a much shorter code that scales linearly just like yours. Also why are your converting the level of your ability to a real? that's not necessary. If you do what i just suggested you will end up with just:

  • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: (Level of Incineration for (Triggering unit)) - 1 to ((100/(7 - Level of Incineration for (Triggering unit)))+ (RealAttribute x 1.50))
  • Unit - Increase level of Incineration for (Triggering unit)
  • Unit - Decrease level of Incineration for (Triggering unit)
 
The "level" parameter in Set Ability function should always be "level of Incineration -1" in your case. Also on a side note, you could change the "Damage" to be 100/(7 - Level of Incineration). That way you will have a much shorter code that scales linearly just like yours. Also why are your converting the level of your ability to a real? that's not necessary. If you do what i just suggested you will end up with just:

  • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: (Level of Incineration for (Triggering unit)) - 1 to ((100/(7 - Level of Incineration for (Triggering unit)))+ (RealAttribute x 1.50))
  • Unit - Increase level of Incineration for (Triggering unit)
  • Unit - Decrease level of Incineration for (Triggering unit)
oh i think i see what you mean, so like this right? btw what u mean why i convert level to real?? its the only way i can get the number Level of Ability for unit. Its not in the list on its own, its only in the list Convert Integer to Real

  • Incineration
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Incineration
    • Actions
      • Set VariableSet Inteligence = (Intelligence of (Casting unit) (Include bonuses))
      • Set VariableSet RealAttribute = (Real(Inteligence))
      • Ability - Set Ability: (Unit: (Triggering unit)'s Ability with Ability Code: Incineration )'s Real Level Field: Damage Per Second ('Oww1') of Level: 0 to ((100.00 / (7.00 - (Real((Level of Incineration for (Triggering unit)))))) + (RealAttribute x 1.50))
      • Unit - Increase level of Incineration for (Triggering unit)
      • Unit - Decrease level of Incineration for (Triggering unit)
 
Don't use level 0. Check the line above again with some thought.

OH its level of ability -1, i tought he just wrote -1 into value window and the editor wouldnt let me do that. I see. Well with that, it works on 6 levels, as soon as it reaches max lvl (7) it goes back to dealing 0dmg....

also, i dont get how he got ((100/(7 - Level of Incineration for (Triggering unit)))+ (RealAttribute x 1.50))
thats not possible, the editor will not give you the option to select (unit- level of ability) unless you are in the convert integer to real menu
>>
integers.png


god why is this bladestorm being so problematic :(
 
Level 20
Joined
May 16, 2012
Messages
635
dang it wont work, the second i lvl up the spell to lvl 2 or higher it stops dealing any damage

It did'nt work for lvl 2 because you forgot to replace de "level: 0" with "(Level of Incineration for (Triggering unit)) - 1". level 0 means the first level on the ability, i know it's weird but programming languages are 0-based, so 0 is always the beginning, so when your ability is level 2, then the field level you want to change is "level 1" hance "(Level of Incineration for (Triggering unit))", which will be 2, minus 1 resulting in 1.

Edit: for the last level i think you will need to decrease and increase the ability level, instead of increasing and decreasing, since it's the last level. It's just one conditional for the last level. Also whenever you want to do a calculatiion in gui, use the Math - Aritimethic, and be aware of the parenthesis.
 
Last edited:
Math - Aithmetic

Eventually you will get it to work. :)

thanks for all the help and the cheering mate. Yeah the failure is annoying but despite that i love toying with this stuff, triggers are so fun and once i learn this and wont need help it will be even more fun. I mean i figured out how to do single target spell attribute scaling, im just headbutting walls with this Bladestorm ability, it really just doesnt want to let me succes xd
 
It did'nt work for lvl 2 because you forgot to replace de "level: 0" with "(Level of Incineration for (Triggering unit)) - 1". level 0 means the first level on the ability, i know it's weird but programming languages are 0-based, so 0 is always the beginning, so when your ability is level 2, then the field level you want to change is "level 1" hance "(Level of Incineration for (Triggering unit))", which will be 2, minus 1 resulting in 1.

Edit: for the last level i think you will need to decrease and increase the ability level, instead of increasing and decreasing, since it's the last level. It's just one conditional for the last level. Also whenever you want to do a calculatiion in gui, use the Math - Aritimethic, and be aware of the parenthesis.

what does u mean be aware of parenthesis? also btw, you said that i need to swap the increase decrease level things for the last level. So i gotta do a function like
If then action and have 1 thats just the basic trigger and then 1 thats like Condition (level of ability Bladestorm = 7 then do Swap swap)??
 
Level 20
Joined
May 16, 2012
Messages
635
thanks a lot dud. Finally this hellish shitfest of trying to make 1 spell is over

Dont worry about failling, everybody starts like that. I remember when i was learning to mod in GUI and the hive community was of great help. Eventually i learned to programm and start to tinker with JASS and vJASS, and that's what i recommend you to do. It will increase the amount of stuff that you can do in the game and greatly improves efficiency. Anyway, the community is here to help you with whatever you need.

Edit: be aware of the parenthesis because of presedence. if you do 100 / 7 - level what will happen is that first 100 will be divided by 7 and then subtrated by level, and by doing 100 / (7 - level), first whats in the parenthesis have "preference" so you end up with 100 divided by the subtration. if increasing and decreasing worked for all level then dont worry about what i said, but if it didnt then, whats i meant was for you to insert a condition, checking if the ability level was equal to the last level and if it was, then dec and inc and else just inc and dec.
 
Last edited:
Dont worry about failling, everybody starts like that. I remember when i was learning to mod in GUI and the hive community was of great help. Eventually i learned to programm and start to tinker with JASS and vJASS, and that's what i recommend you to do. It will increase the amount of stuff that you can do in the game and greatly improves efficiency. Anyway, the community is here to help you with whatever you need.

Edit: be aware of the parenthesis because of presedence. if you do 100 / 7 - level what will happen is that first 100 will be divided by 7 and then subtrated by level, and by doing 100 / (7 - level), first whats in the parenthesis have "preference" so you end up with 100 divided by the subtration. if increasing and decreasing worked for all level then dont worry about what i said, but if it didnt then, whats i meant was for you to insert a condition, checking if the ability level was equal to the last level and if it was, then dec and inc and else just inc and dec.

mate i have 1 problem in this entire thing that i cant solve and i cant even describe to you where im failing here. Would you be willing to like, discord call with me or something so i can screenshare show you where i fail to do what u tell me to do here
 
Level 20
Joined
May 16, 2012
Messages
635
mate i have 1 problem in this entire thing that i cant solve and i cant even describe to you where im failing here. Would you be willing to like, discord call with me or something so i can screenshare show you where i fail to do what u tell me to do here

During the week is quite hard, uni and work at the same time, but just try to describe the problem here and we will work from with what you say.
 
Its probably because the function it calls expects a real, altough the level of the ability is an integer, but theres no problem in you using the conversion if it is required. Try using it and see if it works.

thank god, it did. Finally i can throw this spell into the finished folder and not sweat on it no more XD thanks chopin
 
Status
Not open for further replies.
Top