System Damage

Viikuna

No Marlo no game.
Reaction score
265
Forcing everything under one Logic library is not a solution at all...

edit.
Well, ok, Maybe it is. Actually, it looks pretty good and everything and you can call that shit from another library, so it wont end up being too big.

Actually, that looks pretty good, since you can actually see the order of stuff with one look.

edit2. Faerie Fire dealing 0 damage is no problem. If you really need faerie fire for something, you can always trigger it. You dont need 0 damage event to detect projectile spells either, because you can do that stuff with some projectile system, which offers much more flexibility and stuff.
 

codemonkey

Code monkey not crazy, just proud.
Reaction score
66
How do I grab the attacker in conjunction with Damage_RegisterEvent()?
 

Jesus4Lyf

Good Idea™
Reaction score
397
[LJASS]GetEventDamageSource()[/LJASS].
You may also refer to the damaged unit: [LJASS]GetTriggerUnit()[/LJASS]
And the amount of damage: [LJASS]GetEventDamage()[/LJASS]

Actually, that looks pretty good, since you can actually see the order of stuff with one look.
Yay. It replaces magic numbers with labelled constants, effectively.
 

Viikuna

No Marlo no game.
Reaction score
265
Actually, magic numbers are not less efficient, since you only do that array sorting in map init anyways.

They are kinda cool, although that way there has its upside too.
 

GoGo-Boy

You can change this now in User CP
Reaction score
40
Hi there,
gotta mention again how awesome this system is as it really helps me like THAT much.

But now a little bug report.

Argh sorry for massive editing >_< but got some issues.

Now the bug seems to be the following, passive poison damage like the dryad's one returns true for Damage_IsAttack() and Damage_IsPhysical() whereas I think the former one is wrong.
I can work around this in my map, nevertheless I wanted to report this bug.
 

SYI

New Member
Reaction score
1
Hi there,
gotta mention again how awesome this system is as it really helps me like THAT much.

But now a little bug report.

Argh sorry for massive editing >_< but got some issues.

Now the bug seems to be the following, passive poison damage like the dryad's one returns true for Damage_IsAttack() and Damage_IsPhysical() whereas I think the former one is wrong.
I can work around this in my map, nevertheless I wanted to report this bug.
if i'm not mistaken, for the IsSpell, IsAttack, etc. to fully work you need to have all the damage in your map triggered. So having something like a Dyrad's poison, doing its actual damage will throw it off (it assumes it's physical cause the damage wasn't triggered?)
 

dudeim

New Member
Reaction score
22
whenever i save my map with this system it's gives me an error:(
first i had an error with Event but after i updated jass helper it didn't give me the same error now it gave me:
Expected: "type", "struct", "interface", "function", "keyword" or "scope"
and here it gives the error:
private module InitModule
line 257 of the system

can anyone help me?
 

dudeim

New Member
Reaction score
22
well been out of wc3 scripting for some time now so bit outdated on updated things:p but thanks for the help:)
 

Grundy

Ultra Cool Member
Reaction score
35
Does Damage do something with AIDS when it kills a unit that is handled differently than when you call KillUnit()?

In this sample map downloaded form this site and it has these triggers:
Trigger:
  • Initialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Visibility - Disable fog of war
      • Visibility - Disable black mask
      • Environment - Set sky to Outland Sky
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units in (Playable map area) owned by Neutral Hostile) and do (Actions)
        • Loop - Actions
          • Set Integer = (Integer + 1)
          • Set Creep_Loc[Integer] = (Position of (Picked unit))
          • Set Creep_Face_Ang[Integer] = (Facing of (Picked unit))
          • Unit - Set the custom value of (Picked unit) to Integer
      • Destructible - Pick every destructible in (Entire map) and do (Trigger - Add to Revive Trees &lt;gen&gt; the event (Destructible - (Picked destructible) dies))
      • Game - Display to (All players) for 45.00 seconds the text: Press &#039;Esc&#039; to rest...

Trigger:
  • Revive Creeps
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Owner of (Triggering unit)) Equal to Neutral Hostile) and (((Triggering unit) is Summoned) Not equal to True)
    • Actions
      • Wait (Random real number between 10.00 and 25.00) seconds
      • Unit - Create 1 (Unit-type of (Triggering unit)) for (Owner of (Triggering unit)) at Creep_Loc[(Custom value of (Triggering unit))] facing Creep_Face_Ang[(Custom value of (Triggering unit))] degrees
      • Unit - Set the custom value of (Last created unit) to (Custom value of (Triggering unit))

setting the custom value like that is no good with AIDS so I changed it to this:
Trigger:
  • Initialization
    • Events
      • Time - Elapsed game time is 0.10 seconds
    • Conditions
    • Actions
      • Visibility - Disable fog of war
      • Visibility - Disable black mask
      • Environment - Set sky to Generic Sky
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units in (Playable map area) owned by Neutral Hostile) and do (Actions)
        • Loop - Actions
          • Custom script: set udg_Integer = GetUnitIndex(GetEnumUnit())
          • Set Creep_Loc[Integer] = (Position of (Picked unit))
          • Set Creep_Face_Ang[Integer] = (Facing of (Picked unit))
      • Destructible - Pick every destructible in (Entire map) and do (Trigger - Add to Revive Trees &lt;gen&gt; the event (Destructible - (Picked destructible) dies))
      • Game - Display to (All players) for 45.00 seconds the text: Press &#039;Esc&#039; to rest...

Trigger:
  • Revive Creeps
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Owner of (Triggering unit)) Equal to Neutral Hostile) and (((Triggering unit) is Summoned) Not equal to True)
    • Actions
      • Wait (Random real number between 10.00 and 15.00) seconds
      • Custom script: set udg_Integer = GetUnitIndex(GetEnumUnit())
      • Unit - Create 1 (Unit-type of (Triggering unit)) for (Owner of (Triggering unit)) at Creep_Loc[Integer] facing Creep_Face_Ang[Integer] degrees
      • Custom script: set udg_Integer = GetUnitIndex(bj_lastCreatedUnit)
      • Set Creep_Loc[Integer] = (Position of (Last created unit))
      • Set Creep_Face_Ang[Integer] = (Facing of (Last created unit))

And to test it i made this trigger (i know it leaks, don't care. just made it to test the respawn trigger):
Trigger:
  • Kill All
    • Events
      • Player - Player 1 (Red) types a chat message containing -kill as An exact match
    • Conditions
    • Actions
      • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • Unit - Kill (Picked unit)


when i kill every unit in the map by typing -kill they all respawn no problem but when i kill a unit with Damage it never respawns. I'm not sure if this is an issue with AIDS or with Damage or with the triggers but I know it doesn't work when a unit dies form Damage so I'm posting this here.
 

Jesus4Lyf

Good Idea™
Reaction score
397
Trigger:
  • Custom script: set udg_Integer = GetUnitIndex(GetEnumUnit())

Whatt? ;)
(In "Revive Creeps".)
On a side note, I guess that means GetEnumUnit() works after waits in a different thread. :p

PS. That line in Revive Creeps should be
Trigger:
  • Custom script: set udg_Integer = GetUnitIndex(GetTriggerUnit())
 

Grundy

Ultra Cool Member
Reaction score
35
HAHA... wow... I just copied the action from the 1st trigger into the 2nd trigger didn't even think about what function it was calling. Since it worked when I did -kill I never even though that could possibly be the problem. Weird. I probably would have caught that if it was in somebody else's code.

Atomic brain fart.
 

ertaboy356b

Old School Gamer
Reaction score
86
Hi, does this detect normal non-triggered physical damage??
if so how?

can someone kindly give me a clear framework?
 

Laiev

Hey Listen!!
Reaction score
188
Hi, does this detect normal non-triggered physical damage??
if so how?

can someone kindly give me a clear framework?

[ljass]call Damage_IsAttack()[/ljass] this? o.o

but you'll need to trigger every skill damage and only what you don't trigger will include in that boolean
 

Jesus4Lyf

Good Idea™
Reaction score
397
JASS:
scope OnAttackDamage initializer OnInit
    private function OnDamage takes nothing returns boolean
        if Damage_IsAttack() then
            // here. use GetTriggerUnit() for damaged unit, GetEventDamageSource() for damager, GetEventDamage() for damage amount.
        endif
        return false
    endfunction
    private function OnInit takes nothing returns nothing
        local trigger t=CreateTrigger()
        call TriggerAddCondition(t,Filter(function OnDamage)) // you can use a trigger action instead if you wish.
        call Damage_RegisterEvent(t)
    endfunction
endscope
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top