package RegisterEvents import NoWurst import _Handles import HashMap /*****PlayerUnitEvent*****/ trigger array t public function registerPlayerUnitEvent(playerunitevent p, code c) registerPlayerUnitEvent(p, null, c, null) public function registerPlayerUnitEvent(playerunitevent p, code filter, code c) registerPlayerUnitEvent(p, filter, c, null) public function registerPlayerUnitEvent(playerunitevent p, code filter, code condition, code action) let hid = p.getHandleId() if t[hid] == null t[hid] = CreateTrigger() for k = bj_MAX_PLAYER_SLOTS - 1 downto 0 t[hid].registerPlayerUnitEvent(players[k], p, filter != null ? Filter(filter) : null) if condition != null t[hid].addCondition(Filter(condition)) if action != null t[hid].addAction(action) public function registerPlayerUnitEventForPlayer(playerunitevent p, code c, player pl) let i = bj_MAX_PLAYER_SLOTS * p.getHandleId() + pl.getId() if t[i] == null t[i] = CreateTrigger() t[i].registerPlayerUnitEvent(pl, p, null) t[i].addCondition(Filter(c)) public function getPlayerUnitEventTrigger(playerunitevent p) returns trigger return t[GetHandleId(p)] /*****PlayerEvent*****/ public function registerPlayerEvent(playerevent p, code c) registerPlayerEvent(p, c, null) public function registerPlayerEvent(playerevent p, code condition, code action) let hid = p.getHandleId() if t[hid] == null t[hid] = CreateTrigger() for k = bj_MAX_PLAYER_SLOTS - 1 downto 0 t[hid].registerPlayerEvent(players[k], p) if condition != null t[hid].addCondition(Filter(condition)) if action != null t[hid].addAction(action) /*****SpellEffectEvent*****/ constant onCastMap = new HashMap() init registerPlayerUnitEvent(EVENT_PLAYER_UNIT_SPELL_EFFECT, () -> (onCastMap.get(GetSpellAbilityId())).evaluate()) public function registerSpellEffectEvent(int abil, code onCast) if not onCastMap.has(abil) onCastMap.put(abil, CreateTrigger()) onCastMap.get(abil).addCondition(Filter(onCast))