mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-06-20 15:39:25 +02:00
# Pull Request Small fixes to naxxramas strategy --- ## Complexity & Impact Does this change add new decision branches? - - [x] No - - [ ] Yes (**explain below**) Does this change increase per-bot or per-tick processing? - - [x] No - - [ ] Yes (**describe and justify impact**) Could this logic scale poorly under load? - - [x] No - - [ ] Yes (**explain why**) --- ## Defaults & Configuration Does this change modify default bot behavior? - - [x] No - - [ ] Yes (**explain why**) If this introduces more advanced or AI-heavy logic: - - [x] Lightweight mode remains the default - - [ ] More complex behavior is optional and thereby configurable --- ## AI Assistance Was AI assistance (e.g. ChatGPT or similar tools) used while working on this change? - - [x] No - - [ ] Yes (**explain below**) If yes, please specify: Copilot CLI to code review --- ## Final Checklist - - [x] Stability is not compromised - - [x] Performance impact is understood, tested, and acceptable - - [x] Added logic complexity is justified and explained - - [x] Documentation updated if needed
260 lines
6.2 KiB
C++
260 lines
6.2 KiB
C++
|
|
#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
|