/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it * and/or modify it under version 2 of the License, or (at your option), any later version. */ #ifndef _PLAYERBOT_WARLOCKTRIGGERS_H #define _PLAYERBOT_WARLOCKTRIGGERS_H #include "GenericTriggers.h" #include "PlayerbotAI.h" #include "Playerbots.h" #include "CureTriggers.h" class PlayerbotAI; // Buff and Out of Combat Triggers class DemonArmorTrigger : public BuffTrigger { public: DemonArmorTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "demon armor") {} bool IsActive() override; }; class SoulLinkTrigger : public BuffTrigger { public: SoulLinkTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "soul link") {} bool IsActive() override; }; class FirestoneTrigger : public BuffTrigger { public: FirestoneTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "firestone") {} bool IsActive() override; }; class SpellstoneTrigger : public BuffTrigger { public: SpellstoneTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "spellstone") {} bool IsActive() override; }; class HasSoulstoneTrigger : public Trigger { public: HasSoulstoneTrigger(PlayerbotAI* botAI) : Trigger(botAI, "no soulstone") {} bool IsActive() override { return AI_VALUE2(uint32, "item count", "soulstone") == 0; } }; class SoulstoneTrigger : public Trigger { public: SoulstoneTrigger(PlayerbotAI* botAI) : Trigger(botAI, "soulstone") {} bool IsActive() override { // Just check if we have a soulstone item available return AI_VALUE2(uint32, "item count", "soulstone") > 0; } }; class WarlockConjuredItemTrigger : public ItemCountTrigger { public: WarlockConjuredItemTrigger(PlayerbotAI* botAI, std::string const item) : ItemCountTrigger(botAI, item, 1) {} bool IsActive() override; }; class HasSpellstoneTrigger : public WarlockConjuredItemTrigger { public: HasSpellstoneTrigger(PlayerbotAI* botAI) : WarlockConjuredItemTrigger(botAI, "spellstone") {} }; class HasFirestoneTrigger : public WarlockConjuredItemTrigger { public: HasFirestoneTrigger(PlayerbotAI* botAI) : WarlockConjuredItemTrigger(botAI, "firestone") {} }; class HasHealthstoneTrigger : public WarlockConjuredItemTrigger { public: HasHealthstoneTrigger(PlayerbotAI* botAI) : WarlockConjuredItemTrigger(botAI, "healthstone") {} }; // CC and Pet Triggers class BanishTrigger : public HasCcTargetTrigger { public: BanishTrigger(PlayerbotAI* botAI) : HasCcTargetTrigger(botAI, "banish") {} bool IsActive() override; }; class FearTrigger : public HasCcTargetTrigger { public: FearTrigger(PlayerbotAI* botAI) : HasCcTargetTrigger(botAI, "fear") {} bool IsActive() override; }; class SpellLockInterruptSpellTrigger : public InterruptSpellTrigger { public: SpellLockInterruptSpellTrigger(PlayerbotAI* botAI) : InterruptSpellTrigger(botAI, "spell lock") {} }; class DevourMagicPurgeTrigger : public TargetAuraDispelTrigger { public: DevourMagicPurgeTrigger(PlayerbotAI* botAI) : TargetAuraDispelTrigger(botAI, "devour magic", DISPEL_MAGIC) {} }; class DevourMagicCleanseTrigger : public PartyMemberNeedCureTrigger { public: DevourMagicCleanseTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "devour magic", DISPEL_MAGIC) {} }; // DoT/Debuff Triggers class CurseOfAgonyTrigger : public DebuffTrigger { public: CurseOfAgonyTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "curse of agony", 1, true, 0.5f) {} bool IsActive() override { if (botAI->HasStrategy( "curse of elements", BOT_STATE_COMBAT)) // If Curse of the Elements strategy is active, do not cast Curse of Agony return false; return BuffTrigger::IsActive(); } }; class CurseOfAgonyOnAttackerTrigger : public DebuffOnAttackerTrigger { public: CurseOfAgonyOnAttackerTrigger(PlayerbotAI* botAI) : DebuffOnAttackerTrigger(botAI, "curse of agony", true) {} bool IsActive() override { if (botAI->HasStrategy( "curse of elements", BOT_STATE_COMBAT)) // If Curse of the Elements strategy is active, do not cast Curse of Agony return false; return BuffTrigger::IsActive(); } }; class CorruptionTrigger : public DebuffTrigger { public: CorruptionTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "corruption", 1, true, 0.5f) {} bool IsActive() override { return BuffTrigger::IsActive() && !botAI->HasAura("seed of corruption", GetTarget(), false, true); } }; class CorruptionOnAttackerTrigger : public DebuffOnAttackerTrigger { public: CorruptionOnAttackerTrigger(PlayerbotAI* botAI) : DebuffOnAttackerTrigger(botAI, "corruption", true) {} bool IsActive() override { return BuffTrigger::IsActive() && !botAI->HasAura("seed of corruption", GetTarget(), false, true); } }; class ImmolateTrigger : public DebuffTrigger { public: ImmolateTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "immolate", 1, true, 0.5f) {} bool IsActive() override { return BuffTrigger::IsActive(); } }; class ImmolateOnAttackerTrigger : public DebuffOnAttackerTrigger { public: ImmolateOnAttackerTrigger(PlayerbotAI* ai) : DebuffOnAttackerTrigger(ai, "immolate", true) {} bool IsActive() override { return BuffTrigger::IsActive(); } }; class UnstableAfflictionTrigger : public DebuffTrigger { public: UnstableAfflictionTrigger(PlayerbotAI* ai) : DebuffTrigger(ai, "unstable affliction", 1, true, 0.5f) {} bool IsActive() override { return BuffTrigger::IsActive(); } }; class UnstableAfflictionOnAttackerTrigger : public DebuffOnAttackerTrigger { public: UnstableAfflictionOnAttackerTrigger(PlayerbotAI* ai) : DebuffOnAttackerTrigger(ai, "unstable affliction", true) {} bool IsActive() override { return BuffTrigger::IsActive(); } }; class HauntTrigger : public DebuffTrigger { public: HauntTrigger(PlayerbotAI* ai) : DebuffTrigger(ai, "haunt", 1, true, 0) {} }; class CurseOfTheElementsTrigger : public DebuffTrigger { public: CurseOfTheElementsTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "curse of the elements", 1, true, 0.5f) {} bool IsActive() override; }; // Proc/Cooldown Triggers class LifeTapTrigger : public Trigger { public: LifeTapTrigger(PlayerbotAI* ai) : Trigger(ai, "life tap") {} bool IsActive() override; }; class LifeTapGlyphBuffTrigger : public BuffTrigger { public: LifeTapGlyphBuffTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "life tap") {} bool IsActive() override; }; class MetamorphosisTrigger : public BoostTrigger { public: MetamorphosisTrigger(PlayerbotAI* ai) : BoostTrigger(ai, "metamorphosis") {} }; class DemonicEmpowermentTrigger : public BuffTrigger { public: DemonicEmpowermentTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "demonic empowerment") {} bool IsActive() override; }; class ImmolationAuraActiveTrigger : public HasAuraTrigger { public: ImmolationAuraActiveTrigger(PlayerbotAI* ai) : HasAuraTrigger(ai, "immolation aura") {} }; class ShadowTranceTrigger : public HasAuraTrigger { public: ShadowTranceTrigger(PlayerbotAI* botAI) : HasAuraTrigger(botAI, "shadow trance") {} }; class BacklashTrigger : public HasAuraTrigger { public: BacklashTrigger(PlayerbotAI* botAI) : HasAuraTrigger(botAI, "backlash") {} }; class DecimationTrigger : public HasAuraTrigger { public: DecimationTrigger(PlayerbotAI* ai) : HasAuraTrigger(ai, "decimation") {} bool IsActive() override; }; class MoltenCoreTrigger : public HasAuraTrigger { public: MoltenCoreTrigger(PlayerbotAI* ai) : HasAuraTrigger(ai, "molten core") {} }; #endif