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