System TriggerX

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
JASS:
////////////////////////////////////
//      
//      TriggerX -v1.0.1-
//         by kingking
//  
//  What is TriggerX?
//  ~ TriggerX is a trigger management
//    system that let's you register
//    triggers to player unit event 
//    without leakage of event.
//  
//  ~ TriggerX is able to handle
//    dynamic triggers too.
//
//  Advantage :
//  ~ Leakless trigger registration.
//  ~ Supports unregistration.
//  ~ Supports dynamic triggers.
//  ~ Automatically discard destroyed triggers
//  (Thanks to Event which make these possible.)
//
//  Functions provided :
//  ================AnyUnitEvents====================
//  ~ Register/UnregisterAnyUnitCastSpell(trig)
//  ~ Register/UnregisterAnyUnitStartSpellEffect(trig)
//  ~ Register/UnregisterAnyUnitEndCastingSpell(trig)
//  ~ Register/UnregisterAnyUnitChannelSpell(trig)
//  ~ Register/UnregisterAnyUnitFinishSpell(trig)
//  ~ Register/UnregisterAnyUnitAttacked(trig)
//  ~ Register/UnregisterAnyUnitChangeOwner(trig)
//  ~ Register/UnregisterAnyUnitCancelConstruction(trig)
//  ~ Register/UnregisterAnyUnitFinishConstruction(trig)
//  ~ Register/UnregisterAnyUnitStartConstruction(trig)
//  ~ Register/UnregisterAnyUnitDeath(trig)
//  ~ Register/UnregisterAnyUnitDecay(trig)
//  ~ Register/UnregisterAnyUnitDeselected(trig)
//  ~ Register/UnregisterAnyUnitDetected(trig)
//  ~ Register/UnregisterAnyUnitDropItem(trig)
//  ~ Register/UnregisterAnyUnitHidden(trig)
//  ~ Register/UnregisterAnyUnitIssuedOrder(trig)
//  ~ Register/UnregisterAnyUnitIssuedPointOrder(trig)
//  ~ Register/UnregisterAnyUnitIssuedTargetOrder(trig)
//  ~ Register/UnregisterAnyUnitIssuedUnitOrder(trig)
//  ~ Register/UnregisterAnyUnitLoaded(trig)
//  ~ Register/UnregisterAnyUnitPawnItem(trig)
//  ~ Register/UnregisterAnyUnitPickUpItem(trig)
//  ~ Register/UnregisterAnyUnitCancelResearching(trig)
//  ~ Register/UnregisterAnyUnitFinishResearching(trig)
//  ~ Register/UnregisterAnyUnitStartResearching(trig)
//  ~ Register/UnregisterAnyUnitSelected(trig)
//  ~ Register/UnregisterAnyUnitSell(trig)
//  ~ Register/UnregisterAnyUnitSellItem(trig)
//  ~ Register/UnregisterAnyUnitSummon(trig)
//  ~ Register/UnregisterAnyUnitCancelTraining(trig)
//  ~ Register/UnregisterAnyUnitFinishTraining(trig)
//  ~ Register/UnregisterAnyUnitStartTraining(trig)
//
//  ~ Enable/DisableAnyUnitCastSpellEvent()
//  ~ Enable/DisableAnyUnitStartSpellEffectEvent()
//  ~ Enable/DisableAnyUnitEndCastingSpellEvent()
//  ~ Enable/DisableAnyUnitChannelSpellEvent()
//  ~ Enable/DisableAnyUnitFinishSpellEvent()
//  ~ Enable/DisableAnyUnitAttackedEvent()
//  ~ Enable/DisableAnyUnitChangeOwnerEvent()
//  ~ Enable/DisableAnyUnitCancelConstructionEvent()
//  ~ Enable/DisableAnyUnitFinishConstructionEvent()
//  ~ Enable/DisableAnyUnitStartConstructionEvent()
//  ~ Enable/DisableAnyUnitDeathEvent()
//  ~ Enable/DisableAnyUnitDecayEvent()
//  ~ Enable/DisableAnyUnitDeselectedEvent()
//  ~ Enable/DisableAnyUnitDetectedEvent()
//  ~ Enable/DisableAnyUnitDropItemEvent()
//  ~ Enable/DisableAnyUnitHiddenEvent()
//  ~ Enable/DisableAnyUnitIssuedOrderEvent()
//  ~ Enable/DisableAnyUnitIssuedPointOrderEvent()
//  ~ Enable/DisableAnyUnitIssuedTargetOrderEvent()
//  ~ Enable/DisableAnyUnitIssuedUnitOrderEvent()
//  ~ Enable/DisableAnyUnitLoadedEvent()
//  ~ Enable/DisableAnyUnitPawnItemEvent()
//  ~ Enable/DisableAnyUnitPickUpItemEvent()
//  ~ Enable/DisableAnyUnitCancelResearchingEvent()
//  ~ Enable/DisableAnyUnitFinishResearchingEvent()
//  ~ Enable/DisableAnyUnitStartResearchingEvent()
//  ~ Enable/DisableAnyUnitSelectedEvent()
//  ~ Enable/DisableAnyUnitSellEvent()
//  ~ Enable/DisableAnyUnitSellItemEvent()
//  ~ Enable/DisableAnyUnitSummonEvent()
//  ~ Enable/DisableAnyUnitCancelTrainingEvent()
//  ~ Enable/DisableAnyUnitFinishTrainingEvent()
//  ~ Enable/DisableAnyUnitStartTrainingEvent()
//
//  ===============AnyPlayerEvents================
//  ~ Register/UnregisterAnyPlayerChangeAllianceEvent(trig)
//  ~ Register/UnregisterAnyPlayerPressDownButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerReleaseDownButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerPressUpButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerReleaseUpButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerPressLeftButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerReleaseLeftButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerPressRightButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerReleaseRightButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerChatEvent(trig)
//  ~ Register/UnregisterAnyPlayerVictoryEvent(trig)
//  ~ Register/UnregisterAnyPlayerDefeatEvent(trig)
//  ~ Register/UnregisterAnyPlayerPressEscButtonEvent(trig)
//  ~ Register/UnregisterAnyPlayerLeaveGameEvent(trig)
//
//  ~ Enable/DisableAnyPlayerChangeAllianceEvent()
//  ~ Enable/DisableAnyPlayerPressDownButtonEvent()
//  ~ Enable/DisableAnyPlayerReleaseDownButtonEvent()
//  ~ Enable/DisableAnyPlayerPressUpButtonEvent()
//  ~ Enable/DisableAnyPlayerReleaseUpButtonEvent()
//  ~ Enable/DisableAnyPlayerPressLeftButtonEvent()
//  ~ Enable/DisableAnyPlayerReleaseLeftButtonEvent()
//  ~ Enable/DisableAnyPlayerPressRightButtonEvent()
//  ~ Enable/DisableAnyPlayerReleaseRightButtonEvent()
//  ~ Enable/DisableAnyPlayerChatEvent()
//  ~ Enable/DisableAnyPlayerVictoryEvent()
//  ~ Enable/DisableAnyPlayerDefeatEvent()
//  ~ Enable/DisableAnyPlayerPressEscButtonEvent()
//  ~ Enable/DisableAnyPlayerLeaveGameEvent()
//
//  ===============AnyHeroEvents===================
//  ~ Register/UnregisterAnyHeroChangeLevel(trig)
//  ~ Register/UnregisterAnyHeroLearnSkill(trig)
//  ~ Register/UnregisterAnyHeroBeingStartRevive(trig)
//  ~ Register/UnregisterAnyHeroBeingCancelRevive(trig)
//  ~ Register/UnregisterAnyHeroBeingFinishRevive(trig)
//
//  ~ Enable/DisableAnyHeroChangeLevelEvent()
//  ~ Enable/DisableAnyHeroLearnSkillEvent()
//  ~ Enable/DisableAnyHeroBeingStartReviveEvent()
//  ~ Enable/DisableAnyHeroBeingCancelReviveEvent()
//  ~ Enable/DisableAnyHeroBeingFinishReviveEvent()
//
//  Requires : Event, Jasshelper 0.A.2.A or newer.
//! zinc
library TriggerX requires Event
{
    //! textmacro TriggerXAnyUnitEvent takes NAME, EVENT
    struct $NAME$ extends array
    {
        static Event event;
        static trigger trig;
        
        static method $NAME$Handler() -> boolean
        {
            thistype.event.fire();
            return false;
        }
            
        static method onInit ()
        {
            integer i = bj_MAX_PLAYER_SLOTS;
            thistype.trig = CreateTrigger();
            while (i > 0)
            {
                i = i - 1;
                TriggerRegisterPlayerUnitEvent(thistype.trig,Player(i),EVENT_PLAYER_UNIT_$EVENT$,null);
            }
            TriggerAddCondition(thistype.trig,Condition(function thistype.$NAME$Handler));
            thistype.event = Event.create();
        }
    }
    
    public function RegisterAnyUnit$NAME$ (trigger trig) -> EventReg
    {
        return $NAME$.event.register(trig);
    }
    
    public function UnregisterAnyUnit$NAME$ (trigger trig)
    {
        $NAME$.event.register(trig);
    }
    
    public function EnableAnyUnit$NAME$Event ()
    {
        EnableTrigger($NAME$.trig);
    }
    
    public function DisableAnyUnit$NAME$Event ()
    {
        DisableTrigger($NAME$.trig);
    }
    
    //! endtextmacro
    //! runtextmacro TriggerXAnyUnitEvent ("CastSpell", "SPELL_CAST")
    //! runtextmacro TriggerXAnyUnitEvent ("StartSpellEffect", "SPELL_EFFECT")
    //! runtextmacro TriggerXAnyUnitEvent ("EndCastingSpell", "SPELL_ENDCAST")
    //! runtextmacro TriggerXAnyUnitEvent ("ChannelSpell", "SPELL_CHANNEL")
    //! runtextmacro TriggerXAnyUnitEvent ("FinishSpell", "SPELL_FINISH")
    //! runtextmacro TriggerXAnyUnitEvent ("Attacked", "ATTACKED")
    //! runtextmacro TriggerXAnyUnitEvent ("ChangeOwner", "CHANGE_OWNER")
    //! runtextmacro TriggerXAnyUnitEvent ("CancelConstruction", "SPELL_CAST")
    //! runtextmacro TriggerXAnyUnitEvent ("FinishConstruction", "CONSTRUCT_FINISH")
    //! runtextmacro TriggerXAnyUnitEvent ("StartConstruction", "CONSTRUCT_START")
    //! runtextmacro TriggerXAnyUnitEvent ("Death", "DEATH")
    //! runtextmacro TriggerXAnyUnitEvent ("Decay", "DECAY")
    //! runtextmacro TriggerXAnyUnitEvent ("Deselected", "DESELECTED")
    //! runtextmacro TriggerXAnyUnitEvent ("Detected", "DETECTED")
    //! runtextmacro TriggerXAnyUnitEvent ("DropItem", "DROP_ITEM")
    //! runtextmacro TriggerXAnyUnitEvent ("Hidden", "HIDDEN")
    //! runtextmacro TriggerXAnyUnitEvent ("IssuedOrder", "ISSUED_ORDER")
    //! runtextmacro TriggerXAnyUnitEvent ("IssuedPointOrder", "ISSUED_POINT_ORDER")
    //! runtextmacro TriggerXAnyUnitEvent ("IssuedTargetOrder", "ISSUED_TARGET_ORDER")
    //! runtextmacro TriggerXAnyUnitEvent ("IssuedUnitOrder", "ISSUED_UNIT_ORDER")
    //! runtextmacro TriggerXAnyUnitEvent ("Loaded", "LOADED")
    //! runtextmacro TriggerXAnyUnitEvent ("PawnItem", "PAWN_ITEM")
    //! runtextmacro TriggerXAnyUnitEvent ("PickUpItem", "PICKUP_ITEM")
    //! runtextmacro TriggerXAnyUnitEvent ("CancelResearching", "RESEARCH_CANCEL")
    //! runtextmacro TriggerXAnyUnitEvent ("FinishResearching", "RESEARCH_FINISH")
    //! runtextmacro TriggerXAnyUnitEvent ("StartResearching", "RESEARCH_START")
    //! runtextmacro TriggerXAnyUnitEvent ("Selected", "SELECTED")
    //! runtextmacro TriggerXAnyUnitEvent ("Sell", "SELL")
    //! runtextmacro TriggerXAnyUnitEvent ("SellItem", "SELL_ITEM")
    //! runtextmacro TriggerXAnyUnitEvent ("Summon", "SUMMON")
    //! runtextmacro TriggerXAnyUnitEvent ("CancelTraining", "TRAIN_CANCEL")
    //! runtextmacro TriggerXAnyUnitEvent ("FinishTraining", "TRAIN_FINISH")
    //! runtextmacro TriggerXAnyUnitEvent ("StartTraining", "TRAIN_START")
    //! runtextmacro TriggerXAnyUnitEvent ("CancelUpgrading", "UPGRADE_CANCEL")
    //! runtextmacro TriggerXAnyUnitEvent ("FinishUpgrading", "UPGRADE_FINISH")
    //! runtextmacro TriggerXAnyUnitEvent ("StartUpgrading", "UPGRADE_START")
    //! runtextmacro TriggerXAnyUnitEvent ("UseItem", "USE_ITEM")
    
    //! textmacro TriggerXAnyPlayerEvent takes NAME, EVENT
    struct $NAME$ extends array
    {
        static Event event;
        static trigger trig;
        
        static method $NAME$Handler() -> boolean
        {
            thistype.event.fire();
            return false;
        }
            
        static method onInit ()
        {
            integer i = bj_MAX_PLAYER_SLOTS;
            thistype.trig = CreateTrigger();
            while (i > 0)
            {
                i = i - 1;
                TriggerRegisterPlayerEvent(thistype.trig,Player(i),EVENT_PLAYER_$EVENT$);
            }
            TriggerAddCondition(thistype.trig,Condition(function thistype.$NAME$Handler));
            thistype.event = Event.create();
        }
    }
    
    public function RegisterAnyPlayer$NAME$ (trigger trig) -> EventReg
    {
        return $NAME$.event.register(trig);
    }
    
    public function UnregisterAnyPlayer$NAME$ (trigger trig)
    {
        $NAME$.event.register(trig);
    }
    
    public function EnableAnyPlayer$NAME$Event ()
    {
        EnableTrigger($NAME$.trig);
    }
    
    public function DisableAnyPlayer$NAME$Event ()
    {
        DisableTrigger($NAME$.trig);
    }
    //! endtextmacro
    //! runtextmacro TriggerXAnyPlayerEvent ("ChangeAlliance","ALLIANCE_CHANGED")
    //! runtextmacro TriggerXAnyPlayerEvent ("PressDownButton","ARROW_DOWN_DOWN")
    //! runtextmacro TriggerXAnyPlayerEvent ("ReleaseDownButton","ARROW_DOWN_UP")
    //! runtextmacro TriggerXAnyPlayerEvent ("PressUpButton","ARROW_UP_DOWN")
    //! runtextmacro TriggerXAnyPlayerEvent ("ReleaseUpButton","ARROW_UP_UP")
    //! runtextmacro TriggerXAnyPlayerEvent ("PressLeftButton","ARROW_LEFT_DOWN")
    //! runtextmacro TriggerXAnyPlayerEvent ("ReleaseLeftButton","ARROW_LEFT_UP")
    //! runtextmacro TriggerXAnyPlayerEvent ("PressRightButton","ARROW_RIGHT_DOWN")
    //! runtextmacro TriggerXAnyPlayerEvent ("ReleaseRightButton","ARROW_RIGHT_UP")
    //! runtextmacro TriggerXAnyPlayerEvent ("Chat","CHAT")
    //! runtextmacro TriggerXAnyPlayerEvent ("Defeat","DEFEAT")
    //! runtextmacro TriggerXAnyPlayerEvent ("PressEscButton","END_CINEMATIC")
    //! runtextmacro TriggerXAnyPlayerEvent ("LeaveGame","LEAVE")
    //! runtextmacro TriggerXAnyPlayerEvent ("Victory","VICTORY")
             
    //! textmacro TriggerXAnyHeroEvent takes NAME, EVENT
    struct $NAME$ extends array
    {
        static Event event;
        static trigger trig;
        
        static method $NAME$Handler() -> boolean
        {
            thistype.event.fire();
            return false;
        }
            
        static method onInit ()
        {
            integer i = bj_MAX_PLAYER_SLOTS;
            thistype.trig = CreateTrigger();
            while (i > 0)
            {
                i = i - 1;
                TriggerRegisterPlayerUnitEvent(thistype.trig,Player(i),EVENT_PLAYER_HERO_$EVENT$,null);
            }
            TriggerAddCondition(thistype.trig,Condition(function thistype.$NAME$Handler));
            thistype.event = Event.create();
        }
    }
    
    public function RegisterAnyHero$NAME$ (trigger trig) -> EventReg
    {
        return $NAME$.event.register(trig);
    }
    
    public function UnregisterAnyHero$NAME$ (trigger trig)
    {
        $NAME$.event.register(trig);
    }
    
    public function EnableAnyHero$NAME$Event ()
    {
        EnableTrigger($NAME$.trig);
    }
    
    public function DisableAnyHero$NAME$Event ()
    {
        DisableTrigger($NAME$.trig);
    }
    //! endtextmacro
    //! runtextmacro TriggerXAnyHeroEvent ("ChangeLevel","LEVEL")
    //! runtextmacro TriggerXAnyHeroEvent ("BeingStartRevived","REVIVE_CANCEL")
    //! runtextmacro TriggerXAnyHeroEvent ("BeingFinishRevived","REVIVE_FINISH")
    //! runtextmacro TriggerXAnyHeroEvent ("BeingCancelRevived","REVIVE_START")
    //! runtextmacro TriggerXAnyHeroEvent ("LearnSkill","SKILL")
}
//! endzinc
 

Romek

Super Moderator
Reaction score
963
> They leak handle id.
If you want to put it like that, every time you're creating ANY handle, it's a leak.
 
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