• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Crushing Wave based on stat (triggers)

Status
Not open for further replies.
Level 4
Joined
Feb 13, 2015
Messages
60
I got help with a stats based spell before but this is something else and since im new and dont understand so much i bet someone might not handle me xD
 
Level 4
Joined
Feb 13, 2015
Messages
60
Its the same as carrion swarm, but i quess i will be needing both types. Only cone is breath of fire?
 
Level 12
Joined
Mar 24, 2011
Messages
1,082
Nah, carrion swarm is cone too.

EDIT//

Basicaly what you are searching for is this line:
  • Set DamageVariable = (Real((Strength of HeroUnit (Include bonuses))))
For effect over time spells you will have to store it in unique variable for each cast, but for instant spells like teh bottom two it is fine liek this.


Both could be improved as currently these spells are:
Instant - The damage will be done instantly, if you have slow moving missile the damage will hit the targets before the missile does
Having imperfect shapes - They will pick units which are visually outside the spell range, therefore "That did not hit me ! How did I die ???! *raging*"
Examples - Both are just examples and if I have to do them for my own purposes and try to polish them they will definitely not look like this
  • CWCone
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Animate Dead
    • Actions
      • Set Angle = 30.00
      • Set Range = 500.00
      • Set Caster = (Triggering unit)
      • Set Damage = (Real((Strength of Caster (Include bonuses))))
      • Set CastPoint = (Position of Caster)
      • Set Target_Point = (Target point of ability being cast)
      • Set AngleBetwenPoints = (360.00 + (Angle from CastPoint to Target_Point))
      • Set UnitsInRange = (Units within Range of CastPoint matching (((Matching unit) belongs to an enemy of (Triggering Player)) Equal to True))
      • Unit Group - Pick every unit in UnitsInRange and do (Actions)
        • Loop - Actions
          • Set tempPoint = (Position of (Picked unit))
          • Set tempReal = (Angle from CastPoint to tempPoint)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AngleBetwenPoints Greater than or equal to (tempReal + (360.00 - (Angle / 2.00)))
              • AngleBetwenPoints Less than or equal to (tempReal + (360.00 + (Angle / 2.00)))
            • Then - Actions
              • Unit - Cause Caster to damage (Picked unit), dealing Damage damage of attack type Spells and damage type Normal
            • Else - Actions
          • Custom script: call RemoveLocation(udg_tempPoint)
      • Custom script: call DestroyGroup(udg_UnitsInRange)
      • Custom script: call RemoveLocation(udg_CastPoint)
      • Custom script: call RemoveLocation(udg_Target_Point)
  • CWLine
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Animate Dead
    • Actions
      • Set Range = 500.00
      • Set Width = 200.00
      • Set Step = (Width / 4.00)
      • Set StepNo = ((Range / Step) - 4.00)
      • Set Caster = (Triggering unit)
      • Set Damage = (Real((Strength of Caster (Include bonuses))))
      • Set CastPoint = (Position of Caster)
      • Set Target_Point = (Target point of ability being cast)
      • Set AngleBetwenPoints = (Angle from CastPoint to Target_Point)
      • Set Target_Group = (Units within Width of CastPoint matching (((Matching unit) belongs to an enemy of (Triggering player)) Equal to True))
      • For each (Integer tempInt) from 0 to (Integer(StepNo)), do (Actions)
        • Loop - Actions
          • Set CastPoint = (CastPoint offset by Step towards AngleBetwenPoints degrees)
          • Set UnitsInRange = (Units within Width of CastPoint matching (((Matching unit) belongs to an enemy of (Triggering player)) Equal to True))
          • Unit Group - Pick every unit in UnitsInRange and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) is in Target_Group) Equal to False
                • Then - Actions
                  • Unit Group - Add (Picked unit) to Target_Group
                • Else - Actions
          • Custom script: call DestroyGroup(udg_UnitsInRange)
      • Unit Group - Pick every unit in Target_Group and do (Actions)
        • Loop - Actions
          • Unit - Cause Caster to damage (Picked unit), dealing Damage damage of attack type Spells and damage type Normal
      • Custom script: call DestroyGroup(udg_Target_Group)
      • Custom script: call RemoveLocation(udg_CastPoint)
      • Custom script: call RemoveLocation(udg_Target_Point)
 
Last edited:
Level 12
Joined
Mar 24, 2011
Messages
1,082
  • Set Angle = Real
  • Set Range = Real
  • Set Caster = Unit
  • Set Damage = Real
  • Set CastPoint = Point
  • Set Target_Point = Point
  • Set AngleBetwenPoints = Real
  • Set UnitsInRange = Unit Group
  • Set tempPoint = Point
  • Set tempReal = Real
  • Set Range = Real
  • Set Width = Real
  • Set Step = Real
  • Set StepNo = Real
  • Set Caster = Unit
  • Set Damage = Real
  • Set CastPoint = Point
  • Set Target_Point = Point
  • Set AngleBetwenPoints = Real
  • Set Target_Group = Unit Group
  • Set CastPoint = Point
  • Set UnitsInRange = Unit Group
Note: Now I noticed that "Line" is leaking a point.
 
Level 3
Joined
Sep 7, 2013
Messages
47
This will be super easy with Damage Detection System. Create a dummy unit with the spell you are trying to make. Then do in the trigger section this: Whenever the hero casts the spell, create the dummy unit and let the dummy cast it for the hero. Set the custom value (or any stat you want if you care so much with custom values ex. hp/mana) of the dummy unit to the damage you want (applying the agility or any factors you want). Then for the DDS part, you just have detect whenever the damage is dealt by the dummy unit you have assigned the spell to. Then edit the damage based on the dummy's custom value (or hp/mana, based on what stat you had chosen to store the damage values).

Will not take so much time if you understand how DDS works. But I suggest you to learn it because you will still be making spells in the future so you would not have too much problem anymore.
 
Level 24
Joined
Aug 1, 2013
Messages
4,658
I must say that this is indeed easy to do with a DDS but I suggest you to use a Missile System.
If you are going to make maps in the future, you will probably be making it without DDS after all.
Missile Systems however are a must in good maps.

You can use mine (have to update it then though) but mine is very complex even though it is GUI configurable and GUI usable.
 
Level 3
Joined
Sep 7, 2013
Messages
47
Yes, Wietlol. But I think they are just equally important (Missile Systems and DDS). I mean if you have both of them, you will be manipulating almost anything ;)
 
Level 4
Joined
Feb 13, 2015
Messages
60
Nedio95, thanks!

Wietlol the systems you have under your posts holds a missile system, and other systems, do you mean its not finished or that it just not holds the functions i seek?
 
Level 24
Joined
Aug 1, 2013
Messages
4,658
@Mirage Tempest
A DDS and Missile System are not equal in importance at any aspect.
A Missile System is a must in every single good map. A DDS however is very bad when you are making a good map.
For simple maps or a few spells, you can use it but when you are using alternative stats, then a DDS will not help you at all.
In that case you should write an Alternative Damage-Engine instead.

@gurgamel
The system in my signature is 1.0. The one I have is 1.1.
In 1.1, you can make cone missiles but in 1.0 not yet.
I am not quite sure what I actually did last few times so there might be a bug or 2 in it.
(I think not though.)
 

Attachments

  • Custom Missile System 1.1.w3x
    76.8 KB · Views: 45
Level 3
Joined
Sep 7, 2013
Messages
47
@Mirage Tempest
A DDS and Missile System are not equal in importance at any aspect.
A Missile System is a must in every single good map. A DDS however is very bad when you are making a good map.
For simple maps or a few spells, you can use it but when you are using alternative stats, then a DDS will not help you at all.
In that case you should write an Alternative Damage-Engine instead.

Hmm. What do you mean by alternative stats? Well, if you are talking about other stats such as spell critical or something, I implemented those in the map I'm making in a 2 minute code (using dds ofcourse) I also have spell evade (based on agi), spell critical chance (based on agi), spell critical multiplier (based on str) Spell power (based on int).. and so on and so forth. all done by just DDS.
I didn't know you can do something such as creating your own Alternative Damage-Engine. I might look into that. But, I think that would require me too much brainpower wouldn't it? I am not that pro y'know
 
Level 24
Joined
Aug 1, 2013
Messages
4,658
Yea but I wasn't talking about simple critical chance, evades or scaling damage.
I am talking about separating spells into different types (Fire, Water, Holy, Undead, etc) and separating it into AoE damage and Single Target damage and using only custom data to use as damage scaling, damage reduction, resistance penetration, etc.
Also how do you tell the difference between on-hit damage and additional damage?

If you will use these things inside a DDS, you will first of all have a very big problem in coding it and secondly it will be very performance heavy.

Once again, my MS Paint skillz show again what a DDS does compared to what a ADE can do.

Here is how a DDS works.
In a DDS, every single damage that is done inside your system will tell the DDS that a unit is damaged unless you turned the DDS off (for a little time).

In the DDS, you do not know what the damage actually was before it was reduced or what kind of damage it was.
You cannot even know when it was invoked.

looking_for_help invented the Spell Invertion workaround to make a DDS know the difference between basic attacks and spell damage but even then it is still limited to one invoke and that is "A unit takes damage".

This is how an ADE (Alternative Damage-Engine) works.
In an ADE, you deal damage through the engine. As the name already says, it is a new damage engine that will override the regular one. This means that you have to trigger ALL damage inside your map. That is why I do not recommend new people or people who want something for only a few things, to use an ADE at all.
However, if you call functions instead of just dealing damage and responding to it, you can create anything that will make your map look nice and it will maybe even run faster than the reguar damage engine.

In the picture, you don't see a lot because you don't use things that already exist like you do in the DDS.
You have to write everything yourself which also opens "infinite" possibilities.
Also every ADE is map dependent so you cannot use the same ADE for a map with the same stats as League of Legends in a map with the same stats as in World of Warcraft.

In my map, I have customized basic attacks so I can tell the difference between ranged and melee attacks and even give effects to an attack.
I also give parameters such as (damage amount, damage source, damage target,) damage type, damage subtype, scaling type, damage source angle, damage power, etc, etc, etc.

Everything that you want can be put in it without problems as soon as you have it installed properly.

But next to that all, a DDS has one event so you will be having to check every time when a unit takes damage if that damage is ... for every trigger that responds to specific damage.
In an ADE, you can create dynamic events so you can have events like these:
- A unit takes damage

- A unit takes damage from basic attacks
- A unit takes damage from spells

- A unit takes damage from melee basic attacks
- A unit takes damage from ranged basic attacks
- A unit takes damage from fire spells
- A unit takes damage from holy spells

- A unit takes damage from basic attacks that are modified with ... buff
- A unit takes damage from holy spells that are modified with ... ability

- Unit <...> takes damage from spells
- Unit <...> takes damage from <...> spell

etc etc etc etc etc etc.
In my system, every single event that I mentioned is made in 6 dynamic calls:
call AEM_Call_Event(udg_ADE_Event_Damage)
call AEM_Call_Event(udg_ADE_Event_Damage, udg_ADE_Damage_Type)
call AEM_Call_Event(udg_ADE_Event_Damage, udg_ADE_Damage_Type, udg_ADE_Damage_Subtype)
call AEM_Call_Event(udg_ADE_Event_Damage, udg_ADE_Damage_Target, 1)
call AEM_Call_Event(udg_ADE_Event_Damage, udg_ADE_Damage_Source, 2)
call AEM_Call_Event(udg_ADE_Event_Damage_Modified, udg_ADE_Damage_Index, udg_ADE_Damage_Effect)
These events are made with my Advanced Event Management System which I haven't released yet.

I can make a simple template for you to make a very nice yet simple ADE if you want.
 
Level 3
Joined
Sep 7, 2013
Messages
47
Hm. That would be superbly amazing if only that is easy to do. I understand the concept you are talking about but if that requires the user to re-edit all the damage in a map, then it will be a nightmare. This might be a good suggestion for someone who will start to create a new map. Actually, if I ever create some another map, I would actually try to create an ADE and follow your advice :)
 
Level 24
Joined
Aug 1, 2013
Messages
4,658
Yea if you already have a pretty map and only need a few things, then you shouldn't use it.
Also when you wan't to use many basic abilities, then you should also consider the price.
But remember this: Good systems have a price to pay.

This one for example has a price that you will not use normal damage.
My Effect Over Time System (which is the only existing system that can give real buffs to a unit) requires a lot of object editor time.
My Missile System can detect anything and has a few nice features in it... but you have to understand the way how it is done.

Regulary, systems are not allowed to have massive limitations, registrations, rules or anything.
But if you want to do real cool stuff then you have to make an object editor inside the trigger editor. (Register a lot of stuff.)
 
Status
Not open for further replies.
Top