Snippet OnUnitDamage

Dirac

22710180
Reaction score
147
For a more advanced version (with OnAttack and OnKill events) visit this link:
http://www.hiveworkshop.com/forums/submissions-414/snippet-onunitevent-204367/
JASS:
library OUD uses /*

*/  AIDS    /* thehelper.net/forums/showthread.php/130752-Advanced-Indexing-Data-Storage
*/  Damage  /* thehelper.net/forums/showthread.php/131287-Damage

//  A snippet that provides useful tools for registering when a specific
//  unit deals damage. Great for maps that need good damage filtering.
***********************************************************************

    API

    function OnUnitDamage takes unit whichUnit, boolexpr condition returns triggercondition
//      Everytime an unit deals damage the given condition will be fired, uses the
//      same API for returning values as DamageEvent. Returns a triggercondition if
//      you wish to later undo this.
    
    function RemoveOnUnitDamage takes unit whichUnit, triggercondition condition returns nothing
//      Takes the triggercondition previously returned by the OnUnitDamage call and
//      removes it from the evaluation list.
    
    function ClearOnUnitDamage takes unit whichUnit returns nothing
//      This happens automatically when the unit is deindexed, but if you wish to
//      clear all the evaluation list for a given unit, use this.

**********************************************************************/

//  How does it work: it creates a new trigger the first time you attach a condition
//  to an unit, this trigger will never be destroyed, but constantly recycled, and it
//  adds the given boolexpr as a condition to it, this trigger is stored inside an array
//  with the unit's user data as it's index. Every time an unit takes damage it checks if
//  the damage source's index trigger exists, if so, it fires it and therefore all the
//  conditions are evaluated. If the unit is deindexed the trigger's condition are cleared
//  and it's ready for reuse for the next unit.

    globals
        private trigger array e
    endglobals
    private function onDamage takes nothing returns boolean
        local integer i=GetUnitUserData(GetEventDamageSource())
        if not(null==e<i>) then
            call TriggerEvaluate(e<i>)
        endif
        return false
    endfunction
    function RemoveOnUnitDamage takes unit whichUnit, triggercondition condition returns nothing
        call TriggerRemoveCondition(e[GetUnitUserData(whichUnit)],condition)
    endfunction
    function ClearOnUnitDamage takes unit whichUnit returns nothing
        call TriggerClearConditions(e[GetUnitUserData(whichUnit)])
    endfunction
    function OnUnitDamage takes unit whichUnit, boolexpr condition returns triggercondition
        local integer i=GetUnitUserData(whichUnit)
        if null==e<i> then
            set e<i>=CreateTrigger()
        endif
        return TriggerAddCondition(e<i>,condition)
    endfunction
    private struct OUD_Struct extends array
        private method AIDS_onDestroy takes nothing returns nothing
            call DestroyTrigger(e[GetUnitUserData(.unit)])
        endmethod
        private static method AIDS_onInit takes nothing returns nothing
            local trigger trig=CreateTrigger()
            call Damage_RegisterEvent(trig)
            call TriggerAddCondition(trig,Condition(function onDamage))
            set trig=null
        endmethod
        //! runtextmacro AIDS()
    endstruct
endlibrary</i></i></i></i></i>
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • jonas jonas:
    where did you go?
  • The Helper The Helper:
    Jefferson TX on a Paranormal Investigation of a haunted bed and breakfast - I got some friends that are paranormal investigators and they have an RV and do YouTubes
    +1
  • The Helper The Helper:
    It was a lot of fun. The RV was bad ass
  • jonas jonas:
    That sounds like fun!
    +1
  • The Helper The Helper:
    it was a blast!
  • The Helper The Helper:
    I am going to post the Youtube of the investigation in the forums when it is ready
    +1
  • jonas jonas:
    cool!
  • vypur85 vypur85:
    Sounds cool TH.
  • tom_mai78101 tom_mai78101:
    I was on a Legend of Zelda marathon...
  • tom_mai78101 tom_mai78101:
    Am still doing it now
    +1
  • jonas jonas:
    which one(s) are you playing?
  • jonas jonas:
    I played a little bit of the switch title two weeks ago and found it quite boring
  • The Helper The Helper:
    just got back from San Antonio this weekend had the best Buffalo Chicken Cheesesteak sandwhich in Universal City, TX - place was called Yous Guys freaking awesome! Hope everyone had a fantastic weekend!
    +1
  • The Helper The Helper:
    Happy Tuesday!
  • The Helper The Helper:
    We have been getting crazy numbers reported by the forum of people online the bots are going crazy on us I think it is AI training bots going at it at least that is what it looks like to me.
  • The Helper The Helper:
    Most legit traffic is tracked on multiple Analytics and we have Cloud Flare setup to block a ton of stuff but still there is large amount of bots that seem to escape detection and show up in the user list of the forum. I have been watching this bullshit for a year and still cannot figure it out it is drving me crazy lol.
    +1
  • Ghan Ghan:
    Beep boop
    +1
  • The Helper The Helper:
    hears robot sounds while 250 bots are on the forum lol
  • The Helper The Helper:
    Happy Saturday!
    +1
  • The Helper The Helper:
    and then it was Thursday...
    +2
  • tom_mai78101 tom_mai78101:
    And then Monday
    +1
  • The Helper The Helper:
    I got the day off today!
    +1
  • tom_mai78101 tom_mai78101:
    How...? (T-T)
  • The Helper The Helper:
    I took the day off. I work for myself so I can do that.
    +1
  • Varine Varine:
    Well I'm already over summer

    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