#ifndef _PLAYERBOT_RAIDNAXXTRIGGERS_H #define _PLAYERBOT_RAIDNAXXTRIGGERS_H #include "EventMap.h" #include "GenericTriggers.h" #include "PlayerbotAIConfig.h" #include "RaidNaxxBossHelper.h" #include "Trigger.h" class MutatingInjectionTrigger : public HasAuraTrigger { public: MutatingInjectionTrigger(PlayerbotAI* ai) : HasAuraTrigger(ai, "mutating injection", 1) {} }; class MutatingInjectionMeleeTrigger : public MutatingInjectionTrigger { public: MutatingInjectionMeleeTrigger(PlayerbotAI* ai) : MutatingInjectionTrigger(ai) {} bool IsActive() override; }; class MutatingInjectionRangedTrigger : public MutatingInjectionTrigger { public: MutatingInjectionRangedTrigger(PlayerbotAI* ai) : MutatingInjectionTrigger(ai) {} bool IsActive() override; }; class AuraRemovedTrigger : public Trigger { public: AuraRemovedTrigger(PlayerbotAI* botAI, std::string name) : Trigger(botAI, name, 1) { this->prev_check = false; } virtual bool IsActive() override; protected: bool prev_check; }; class MutatingInjectionRemovedTrigger : public HasNoAuraTrigger { public: MutatingInjectionRemovedTrigger(PlayerbotAI* ai) : HasNoAuraTrigger(ai, "mutating injection") {} virtual bool IsActive(); }; class GrobbulusCloudTrigger : public Trigger { public: GrobbulusCloudTrigger(PlayerbotAI* ai) : Trigger(ai, "grobbulus cloud event"), last_cloud_ms(0) {} bool IsActive() override; private: uint32 last_cloud_ms; static constexpr uint32 CloudRotationDelayMs = 15000; }; //class HeiganMeleeTrigger : public Trigger //{ //public: // HeiganMeleeTrigger(PlayerbotAI* ai) : Trigger(ai, "heigan melee") {} // virtual bool IsActive(); //}; // //class HeiganRangedTrigger : public Trigger //{ //public: // HeiganRangedTrigger(PlayerbotAI* ai) : Trigger(ai, "heigan ranged") {} // bool IsActive() override; //}; class RazuviousTankTrigger : public Trigger { public: RazuviousTankTrigger(PlayerbotAI* ai) : Trigger(ai, "instructor razuvious tank"), helper(ai) {} bool IsActive() override; private: RazuviousBossHelper helper; }; class RazuviousNontankTrigger : public Trigger { public: RazuviousNontankTrigger(PlayerbotAI* ai) : Trigger(ai, "instructor razuvious non-tank"), helper(ai) {} bool IsActive() override; private: RazuviousBossHelper helper; }; class KelthuzadTrigger : public Trigger { public: KelthuzadTrigger(PlayerbotAI* ai) : Trigger(ai, "kel'thuzad trigger"), helper(ai) {} bool IsActive() override; private: KelthuzadBossHelper helper; }; class AnubrekhanTrigger : public Trigger { public: AnubrekhanTrigger(PlayerbotAI* ai) : Trigger(ai, "anub'rekhan") {} bool IsActive() override; }; class FaerlinaTrigger : public Trigger { public: FaerlinaTrigger(PlayerbotAI* ai) : Trigger(ai, "faerlina") {} bool IsActive() override; }; class MaexxnaTrigger : public Trigger { public: MaexxnaTrigger(PlayerbotAI* ai) : Trigger(ai, "maexxna") {} bool IsActive() override; }; //class PatchwerkTankTrigger : public Trigger //{ //public: // PatchwerkTankTrigger(PlayerbotAI* ai) : Trigger(ai, "patchwerk tank") {} // bool IsActive() override; //}; // //class PatchwerkNonTankTrigger : public Trigger //{ //public: // PatchwerkNonTankTrigger(PlayerbotAI* ai) : Trigger(ai, "patchwerk non-tank") {} // bool IsActive() override; //}; // //class PatchwerkRangedTrigger : public Trigger //{ //public: // PatchwerkRangedTrigger(PlayerbotAI* ai) : Trigger(ai, "patchwerk ranged") {} // bool IsActive() override; //}; class ThaddiusPhasePetTrigger : public Trigger { public: ThaddiusPhasePetTrigger(PlayerbotAI* ai) : Trigger(ai, "thaddius phase pet"), helper(ai) {} bool IsActive() override; private: ThaddiusBossHelper helper; }; class ThaddiusPhasePetLoseAggroTrigger : public ThaddiusPhasePetTrigger { public: ThaddiusPhasePetLoseAggroTrigger(PlayerbotAI* ai) : ThaddiusPhasePetTrigger(ai) {} virtual bool IsActive() { Unit* target = AI_VALUE(Unit*, "current target"); return ThaddiusPhasePetTrigger::IsActive() && botAI->IsTank(bot) && target && target->GetVictim() != bot; } }; class ThaddiusPhaseTransitionTrigger : public Trigger { public: ThaddiusPhaseTransitionTrigger(PlayerbotAI* ai) : Trigger(ai, "thaddius phase transition"), helper(ai) {} bool IsActive() override; private: ThaddiusBossHelper helper; }; class ThaddiusPhaseThaddiusTrigger : public Trigger { public: ThaddiusPhaseThaddiusTrigger(PlayerbotAI* ai) : Trigger(ai, "thaddius phase thaddius"), helper(ai) {} bool IsActive() override; private: ThaddiusBossHelper helper; }; class FourHorsemenAttractorsTrigger : public Trigger { public: FourHorsemenAttractorsTrigger(PlayerbotAI* ai) : Trigger(ai, "four horsemen attractors"), helper(ai) {} bool IsActive() override; private: FourHorsemenBossHelper helper; }; class FourHorsemenExceptAttractorsTrigger : public Trigger { public: FourHorsemenExceptAttractorsTrigger(PlayerbotAI* ai) : Trigger(ai, "four horsemen except attractors"), helper(ai) {} bool IsActive() override; private: FourHorsemenBossHelper helper; }; class SapphironGroundTrigger : public Trigger { public: SapphironGroundTrigger(PlayerbotAI* ai) : Trigger(ai, "sapphiron ground"), helper(ai) {} bool IsActive() override; private: SapphironBossHelper helper; }; class SapphironFlightTrigger : public Trigger { public: SapphironFlightTrigger(PlayerbotAI* ai) : Trigger(ai, "sapphiron flight"), helper(ai) {} bool IsActive() override; private: SapphironBossHelper helper; }; class GluthTrigger : public Trigger { public: GluthTrigger(PlayerbotAI* ai) : Trigger(ai, "gluth trigger"), helper(ai) {} bool IsActive() override; private: GluthBossHelper helper; }; class GluthMainTankMortalWoundTrigger : public Trigger { public: GluthMainTankMortalWoundTrigger(PlayerbotAI* ai) : Trigger(ai, "gluth main tank mortal wound trigger"), helper(ai) {} bool IsActive() override; private: GluthBossHelper helper; }; class LoathebTrigger : public Trigger { public: LoathebTrigger(PlayerbotAI* ai) : Trigger(ai, "loatheb"), helper(ai) {} bool IsActive() override; private: LoathebBossHelper helper; }; #endif