feat(playerbot): WoW 12.0 migration - Update version references and file names

BREAKING CHANGE: Renamed WoW112* files to WoW120* variants

Migration changes:
- Rename WoW112CharacterCreation.h to WoW120CharacterCreation.h
- Rename ResourceTypes_WoW112.h to ResourceTypes_WoW120.h
- Rename SpellValidation_WoW112.h to SpellValidation_WoW120.h
- Rename SpellValidation_WoW112_Part2.h to SpellValidation_WoW120_Part2.h
- Rename CombatSpecializationTemplate_WoW112.h to WoW120 variant
- Rename ResourceSystemWoW112.md to WoW120 variant
- Update WoW112Spells namespace to WoW120Spells in all files
- Update all include paths from WoW112 to WoW120
- Update comments referencing "11.2" to "12.0"
- Add Spirit stat to BaseStats (MAX_STATS = 5 in WoW 12.0)
- Update Difficulty enum types from uint8 to int16

Part of WoW 12.0 API migration (TrinityCore commit b0a596908d5c1b5b09f90e97b17a7fc785e5366f)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Signed-off-by: luis <[email protected]>
This commit is contained in:
agatho
2026-02-04 20:28:17 -03:00
committed by luis
co-authored by Claude Opus 4.5
parent ac473ee5dc
commit a2b3d67321
114 changed files with 1751 additions and 1751 deletions
+4 -4
View File
@@ -29,8 +29,8 @@
#include "DBCEnums.h"
#include "SharedDefines.h"
#include "CommonActions.h"
#include "../ClassAI/SpellValidation_WoW112.h"
#include "../ClassAI/SpellValidation_WoW112_Part2.h"
#include "../ClassAI/SpellValidation_WoW120.h"
#include "../ClassAI/SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -451,7 +451,7 @@ void ActionFactory::RegisterAction(::std::string const& name,
::std::vector<::std::shared_ptr<Action>> actions;
ChrSpecialization specEnum = static_cast<ChrSpecialization>(spec);
using namespace WoW112Spells;
using namespace WoW120Spells;
switch (classId)
{
@@ -1119,7 +1119,7 @@ void ActionFactory::RegisterAction(::std::string const& name,
::std::vector<::std::shared_ptr<Action>> ActionFactory::CreateCombatActions(uint8 classId)
{
using namespace WoW112Spells;
using namespace WoW120Spells;
::std::vector<::std::shared_ptr<Action>> actions;
@@ -345,7 +345,7 @@ void BotAI::ProcessCombatInterrupt(CombatEvent const& event)
if (!casterSnapshot || !casterSnapshot->isHostile)
return;
// Check if spell is interruptible (WoW 11.2: check InterruptFlags)
// Check if spell is interruptible (WoW 12.0: check InterruptFlags)
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(event.spellId, DIFFICULTY_NONE);
if (!spellInfo || spellInfo->InterruptFlags == SpellInterruptFlags::None)
return;
@@ -753,7 +753,7 @@ void HunterBaselineRotation::ApplyBuffs(Player* bot)
void BaselineRotationManager::InitializeRogueBaseline()
{
::std::vector<BaselineAbility> abilities;
// WoW 11.2 (The War Within) spell IDs:
// WoW 12.0 (The War Within) spell IDs:
// - Sinister Strike: 193315 (retail), NOT 1752 (classic)
// - Eviscerate: 196819 (retail)
abilities.emplace_back(193315, 1, 40, 0, 10.0f, true); // Sinister Strike (retail)
@@ -780,7 +780,7 @@ void BaselineRotationManager::InitializeDeathKnightBaseline()
void BaselineRotationManager::InitializeShamanBaseline()
{
::std::vector<BaselineAbility> abilities;
// WoW 11.2 (The War Within) spell IDs:
// WoW 12.0 (The War Within) spell IDs:
// - Lightning Bolt: 188196 (retail), NOT 403 (classic)
// - Primal Strike: 73899 (retail)
abilities.emplace_back(188196, 1, 0, 0, 10.0f, false); // Lightning Bolt (retail)
@@ -799,7 +799,7 @@ void BaselineRotationManager::InitializeMageBaseline()
void BaselineRotationManager::InitializeWarlockBaseline()
{
::std::vector<BaselineAbility> abilities;
// WoW 11.2 (The War Within) spell IDs:
// WoW 12.0 (The War Within) spell IDs:
// - Shadow Bolt: 686 (same as classic)
// - Corruption: 172 (same as classic)
abilities.emplace_back(686, 1, 0, 0, 10.0f, false); // Shadow Bolt
@@ -898,7 +898,7 @@ void WarlockBaselineRotation::ApplyBuffs(Player* bot)
// THREAD-SAFETY FIX (2026-01-16): Use QueueSpellCast instead of bot->CastSpell()
// ========================================================================
// Warlock pet spell IDs (WoW 11.2)
// Warlock pet spell IDs (WoW 12.0)
constexpr uint32 SUMMON_IMP = 688;
constexpr uint32 SUMMON_VOIDWALKER = 697;
@@ -10,14 +10,14 @@
#pragma once
#include "CombatSpecializationBase.h"
#include "ResourceTypes_WoW112.h"
#include "ResourceTypes_WoW120.h"
#include <type_traits>
namespace Playerbot
{
/**
* Enhanced Combat Specialization Template for WoW 11.2
* Enhanced Combat Specialization Template for WoW 12.0
*
* This template provides specialized resource handling for all 13 classes.
* Each class specialization inherits from this template with their specific resource type.
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h" // Central spell registry
#include "../SpellValidation_WoW120.h" // Central spell registry
#include "../../Services/ThreatAssistant.h"
#include "Player.h"
#include "SpellMgr.h"
@@ -29,64 +29,64 @@ namespace Playerbot
{
// ============================================================================
// BLOOD DEATH KNIGHT SPELL ALIASES (WoW 11.2 - The War Within)
// BLOOD DEATH KNIGHT SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// ============================================================================
namespace BloodDeathKnightSpells
{
// Rune Spenders
constexpr uint32 HEART_STRIKE = WoW112Spells::DeathKnight::Blood::HEART_STRIKE;
constexpr uint32 BLOOD_BOIL = WoW112Spells::DeathKnight::Blood::BLOOD_BOIL;
constexpr uint32 DEATHS_CARESS = WoW112Spells::DeathKnight::Blood::DEATHS_CARESS;
constexpr uint32 MARROWREND = WoW112Spells::DeathKnight::Blood::MARROWREND;
constexpr uint32 CONSUMPTION = WoW112Spells::DeathKnight::Blood::CONSUMPTION;
constexpr uint32 HEART_STRIKE = WoW120Spells::DeathKnight::Blood::HEART_STRIKE;
constexpr uint32 BLOOD_BOIL = WoW120Spells::DeathKnight::Blood::BLOOD_BOIL;
constexpr uint32 DEATHS_CARESS = WoW120Spells::DeathKnight::Blood::DEATHS_CARESS;
constexpr uint32 MARROWREND = WoW120Spells::DeathKnight::Blood::MARROWREND;
constexpr uint32 CONSUMPTION = WoW120Spells::DeathKnight::Blood::CONSUMPTION;
// Runic Power Spenders
constexpr uint32 DEATH_STRIKE = WoW112Spells::DeathKnight::DEATH_STRIKE;
constexpr uint32 DEATHS_AND_DECAY_BLOOD = WoW112Spells::DeathKnight::DEATH_AND_DECAY;
constexpr uint32 BONESTORM = WoW112Spells::DeathKnight::Blood::BONESTORM;
constexpr uint32 DEATH_STRIKE = WoW120Spells::DeathKnight::DEATH_STRIKE;
constexpr uint32 DEATHS_AND_DECAY_BLOOD = WoW120Spells::DeathKnight::DEATH_AND_DECAY;
constexpr uint32 BONESTORM = WoW120Spells::DeathKnight::Blood::BONESTORM;
// Active Mitigation
constexpr uint32 VAMPIRIC_BLOOD = WoW112Spells::DeathKnight::Blood::VAMPIRIC_BLOOD;
constexpr uint32 DANCING_RUNE_WEAPON = WoW112Spells::DeathKnight::Blood::DANCING_RUNE_WEAPON;
constexpr uint32 ICEBOUND_FORTITUDE = WoW112Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 ANTI_MAGIC_SHELL = WoW112Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 RUNE_TAP = WoW112Spells::DeathKnight::Blood::RUNE_TAP;
constexpr uint32 VAMPIRIC_STRIKE = WoW112Spells::DeathKnight::Blood::VAMPIRIC_STRIKE;
constexpr uint32 VAMPIRIC_BLOOD = WoW120Spells::DeathKnight::Blood::VAMPIRIC_BLOOD;
constexpr uint32 DANCING_RUNE_WEAPON = WoW120Spells::DeathKnight::Blood::DANCING_RUNE_WEAPON;
constexpr uint32 ICEBOUND_FORTITUDE = WoW120Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 ANTI_MAGIC_SHELL = WoW120Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 RUNE_TAP = WoW120Spells::DeathKnight::Blood::RUNE_TAP;
constexpr uint32 VAMPIRIC_STRIKE = WoW120Spells::DeathKnight::Blood::VAMPIRIC_STRIKE;
// Threat Generation
constexpr uint32 DARK_COMMAND = WoW112Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 BLOOD_PLAGUE = WoW112Spells::DeathKnight::Blood::BLOOD_PLAGUE;
constexpr uint32 FROST_FEVER = WoW112Spells::DeathKnight::Frost::FROST_FEVER;
constexpr uint32 DARK_COMMAND = WoW120Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 BLOOD_PLAGUE = WoW120Spells::DeathKnight::Blood::BLOOD_PLAGUE;
constexpr uint32 FROST_FEVER = WoW120Spells::DeathKnight::Frost::FROST_FEVER;
// Major Cooldowns
constexpr uint32 RAISE_DEAD_BLOOD = WoW112Spells::DeathKnight::RAISE_DEAD;
constexpr uint32 ARMY_OF_THE_DEAD = WoW112Spells::DeathKnight::Unholy::ARMY_OF_THE_DEAD;
constexpr uint32 GOREFIENDS_GRASP = WoW112Spells::DeathKnight::Blood::GOREFIENDS_GRASP;
constexpr uint32 BLOODDRINKER = WoW112Spells::DeathKnight::Blood::BLOODDRINKER;
constexpr uint32 TOMBSTONE = WoW112Spells::DeathKnight::Blood::TOMBSTONE;
constexpr uint32 RAISE_DEAD_BLOOD = WoW120Spells::DeathKnight::RAISE_DEAD;
constexpr uint32 ARMY_OF_THE_DEAD = WoW120Spells::DeathKnight::Unholy::ARMY_OF_THE_DEAD;
constexpr uint32 GOREFIENDS_GRASP = WoW120Spells::DeathKnight::Blood::GOREFIENDS_GRASP;
constexpr uint32 BLOODDRINKER = WoW120Spells::DeathKnight::Blood::BLOODDRINKER;
constexpr uint32 TOMBSTONE = WoW120Spells::DeathKnight::Blood::TOMBSTONE;
// Utility
constexpr uint32 DEATH_GRIP = WoW112Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 DEATHS_ADVANCE = WoW112Spells::DeathKnight::DEATHS_ADVANCE;
constexpr uint32 MIND_FREEZE = WoW112Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 ASPHYXIATE = WoW112Spells::DeathKnight::ASPHYXIATE;
constexpr uint32 CONTROL_UNDEAD = WoW112Spells::DeathKnight::CONTROL_UNDEAD;
constexpr uint32 RAISE_ALLY = WoW112Spells::DeathKnight::RAISE_ALLY;
constexpr uint32 DEATH_GRIP = WoW120Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 DEATHS_ADVANCE = WoW120Spells::DeathKnight::DEATHS_ADVANCE;
constexpr uint32 MIND_FREEZE = WoW120Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 ASPHYXIATE = WoW120Spells::DeathKnight::ASPHYXIATE;
constexpr uint32 CONTROL_UNDEAD = WoW120Spells::DeathKnight::CONTROL_UNDEAD;
constexpr uint32 RAISE_ALLY = WoW120Spells::DeathKnight::RAISE_ALLY;
// Procs and Buffs
constexpr uint32 BONE_SHIELD = WoW112Spells::DeathKnight::Blood::BONE_SHIELD;
constexpr uint32 CRIMSON_SCOURGE = WoW112Spells::DeathKnight::Blood::CRIMSON_SCOURGE;
constexpr uint32 HEMOSTASIS = WoW112Spells::DeathKnight::Blood::HEMOSTASIS;
constexpr uint32 OSSUARY = WoW112Spells::DeathKnight::Blood::OSSUARY;
constexpr uint32 BONE_SHIELD = WoW120Spells::DeathKnight::Blood::BONE_SHIELD;
constexpr uint32 CRIMSON_SCOURGE = WoW120Spells::DeathKnight::Blood::CRIMSON_SCOURGE;
constexpr uint32 HEMOSTASIS = WoW120Spells::DeathKnight::Blood::HEMOSTASIS;
constexpr uint32 OSSUARY = WoW120Spells::DeathKnight::Blood::OSSUARY;
// Talents
constexpr uint32 BLOOD_TAP = WoW112Spells::DeathKnight::Blood::BLOOD_TAP;
constexpr uint32 RAPID_DECOMPOSITION = WoW112Spells::DeathKnight::Blood::RAPID_DECOMPOSITION;
constexpr uint32 HEARTBREAKER = WoW112Spells::DeathKnight::Blood::HEARTBREAKER;
constexpr uint32 FOUL_BULWARK = WoW112Spells::DeathKnight::Blood::FOUL_BULWARK;
constexpr uint32 RELISH_IN_BLOOD = WoW112Spells::DeathKnight::Blood::RELISH_IN_BLOOD;
constexpr uint32 BLOOD_TAP = WoW120Spells::DeathKnight::Blood::BLOOD_TAP;
constexpr uint32 RAPID_DECOMPOSITION = WoW120Spells::DeathKnight::Blood::RAPID_DECOMPOSITION;
constexpr uint32 HEARTBREAKER = WoW120Spells::DeathKnight::Blood::HEARTBREAKER;
constexpr uint32 FOUL_BULWARK = WoW120Spells::DeathKnight::Blood::FOUL_BULWARK;
constexpr uint32 RELISH_IN_BLOOD = WoW120Spells::DeathKnight::Blood::RELISH_IN_BLOOD;
}
using namespace BloodDeathKnightSpells;
@@ -596,7 +596,7 @@ private:
// - Proper BotAI retrieval from Player instance (via custom Player extension or bot registry)
// - ActionPriorityQueue registration for Blood DK spells (Vampiric Blood, Death Strike, Marrowrend, Heart Strike, Blood Boil)
// - BehaviorTree construction with emergency defensives, active mitigation, bone shield maintenance, and threat generation sequences
// Reference: WoW 11.2 Death Knight mechanics, Blood specialization active mitigation patterns
// Reference: WoW 12.0 Death Knight mechanics, Blood specialization active mitigation patterns
// BotAI* ai = dynamic_cast<BotAI*>(bot->GetPlayerAI());
// if (!ai) return;
@@ -13,7 +13,7 @@
#include "BloodDeathKnight.h"
#include "FrostDeathKnight.h"
#include "UnholyDeathKnight.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "../../Combat/CombatBehaviorIntegration.h"
#include "Player.h"
#include "Group.h"
@@ -108,17 +108,17 @@ struct DeathKnightMetrics
};
// ============================================================================
// Death Knight Spell IDs - Using Central SpellValidation Registry (WoW 11.2)
// Death Knight Spell IDs - Using Central SpellValidation Registry (WoW 12.0)
// ============================================================================
// All spell IDs sourced from SpellValidation_WoW112.h to maintain single source of truth
// All spell IDs sourced from SpellValidation_WoW120.h to maintain single source of truth
// Namespace aliases for cleaner code
namespace DKSpells = WoW112Spells::DeathKnight;
namespace DKBlood = WoW112Spells::DeathKnight::Blood;
namespace DKFrost = WoW112Spells::DeathKnight::Frost;
namespace DKUnholy = WoW112Spells::DeathKnight::Unholy;
namespace DKSpells = WoW120Spells::DeathKnight;
namespace DKBlood = WoW120Spells::DeathKnight::Blood;
namespace DKFrost = WoW120Spells::DeathKnight::Frost;
namespace DKUnholy = WoW120Spells::DeathKnight::Unholy;
// Core Abilities (All Specs) - WoW 11.2
// Core Abilities (All Specs) - WoW 12.0
static constexpr uint32 DK_DEATH_STRIKE = DKSpells::DEATH_STRIKE;
static constexpr uint32 DK_DEATH_AND_DECAY = DKSpells::DEATH_AND_DECAY;
static constexpr uint32 DK_DEATH_GRIP = DKSpells::DEATH_GRIP;
@@ -134,7 +134,7 @@ static constexpr uint32 DK_DARK_COMMAND = DKSpells::DARK_COMMAND;
static constexpr uint32 DK_ASPHYXIATE = DKSpells::ASPHYXIATE;
static constexpr uint32 DK_DEATHS_ADVANCE = DKSpells::DEATHS_ADVANCE;
// Blood Specialization - WoW 11.2
// Blood Specialization - WoW 12.0
static constexpr uint32 DK_HEART_STRIKE = DKBlood::HEART_STRIKE;
static constexpr uint32 DK_BLOOD_BOIL = DKBlood::BLOOD_BOIL;
static constexpr uint32 DK_RUNE_TAP = DKBlood::RUNE_TAP;
@@ -145,7 +145,7 @@ static constexpr uint32 DK_BLOOD_PLAGUE = DKBlood::BLOOD_PLAGUE;
static constexpr uint32 DK_MARROWREND = DKBlood::MARROWREND;
static constexpr uint32 DK_DEATHS_CARESS = DKBlood::DEATHS_CARESS;
// Frost Specialization - WoW 11.2
// Frost Specialization - WoW 12.0
static constexpr uint32 DK_FROST_STRIKE = DKFrost::FROST_STRIKE;
static constexpr uint32 DK_HOWLING_BLAST = DKFrost::HOWLING_BLAST;
static constexpr uint32 DK_OBLITERATE = DKFrost::OBLITERATE;
@@ -155,7 +155,7 @@ static constexpr uint32 DK_FROST_FEVER = DKFrost::FROST_FEVER;
static constexpr uint32 DK_HORN_OF_WINTER = DKFrost::HORN_OF_WINTER;
static constexpr uint32 DK_REMORSELESS_WINTER = DKFrost::REMORSELESS_WINTER;
// Unholy Specialization - WoW 11.2
// Unholy Specialization - WoW 12.0
static constexpr uint32 DK_SCOURGE_STRIKE = DKUnholy::SCOURGE_STRIKE;
static constexpr uint32 DK_EPIDEMIC = DKUnholy::EPIDEMIC;
static constexpr uint32 DK_ARMY_OF_THE_DEAD = DKUnholy::ARMY_OF_THE_DEAD;
@@ -798,7 +798,7 @@ void DeathKnightAI::UpdateBuffs()
uint32 currentTime = GameTime::GetGameTimeMS();
// NOTE: Presences removed in WoW 11.2 - specializations are automatic
// NOTE: Presences removed in WoW 12.0 - specializations are automatic
// Maintain Horn of Winter
if (currentTime - _lastHorn > 30000 && !HasAura(DK_HORN_OF_WINTER))
@@ -1788,7 +1788,7 @@ void DeathKnightAI::ExecuteSpecializationRotation(Unit* target)
void DeathKnightAI::UpdatePresenceIfNeeded()
{
// NOTE: Presences removed in WoW 11.2 - specializations are automatic
// NOTE: Presences removed in WoW 12.0 - specializations are automatic
// This function is kept for API compatibility but does nothing
}
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h" // Central spell registry
#include "../SpellValidation_WoW120.h" // Central spell registry
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -28,54 +28,54 @@ namespace Playerbot
{
// ============================================================================
// FROST DEATH KNIGHT SPELL ALIASES (WoW 11.2 - The War Within)
// FROST DEATH KNIGHT SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// ============================================================================
namespace FrostDeathKnightSpells
{
// Rune Spenders
constexpr uint32 OBLITERATE = WoW112Spells::DeathKnight::Frost::OBLITERATE;
constexpr uint32 HOWLING_BLAST = WoW112Spells::DeathKnight::Frost::HOWLING_BLAST;
constexpr uint32 REMORSELESS_WINTER = WoW112Spells::DeathKnight::Frost::REMORSELESS_WINTER;
constexpr uint32 GLACIAL_ADVANCE = WoW112Spells::DeathKnight::Frost::GLACIAL_ADVANCE;
constexpr uint32 FROSTSCYTHE = WoW112Spells::DeathKnight::Frost::FROSTSCYTHE;
constexpr uint32 OBLITERATE = WoW120Spells::DeathKnight::Frost::OBLITERATE;
constexpr uint32 HOWLING_BLAST = WoW120Spells::DeathKnight::Frost::HOWLING_BLAST;
constexpr uint32 REMORSELESS_WINTER = WoW120Spells::DeathKnight::Frost::REMORSELESS_WINTER;
constexpr uint32 GLACIAL_ADVANCE = WoW120Spells::DeathKnight::Frost::GLACIAL_ADVANCE;
constexpr uint32 FROSTSCYTHE = WoW120Spells::DeathKnight::Frost::FROSTSCYTHE;
// Runic Power Spenders
constexpr uint32 FROST_STRIKE = WoW112Spells::DeathKnight::Frost::FROST_STRIKE;
constexpr uint32 HORN_OF_WINTER = WoW112Spells::DeathKnight::Frost::HORN_OF_WINTER;
constexpr uint32 FROST_STRIKE = WoW120Spells::DeathKnight::Frost::FROST_STRIKE;
constexpr uint32 HORN_OF_WINTER = WoW120Spells::DeathKnight::Frost::HORN_OF_WINTER;
// Cooldowns
constexpr uint32 PILLAR_OF_FROST = WoW112Spells::DeathKnight::Frost::PILLAR_OF_FROST;
constexpr uint32 EMPOWER_RUNE_WEAPON = WoW112Spells::DeathKnight::Frost::EMPOWER_RUNE_WEAPON;
constexpr uint32 BREATH_OF_SINDRAGOSA = WoW112Spells::DeathKnight::Frost::BREATH_OF_SINDRAGOSA;
constexpr uint32 FROSTWYRMS_FURY = WoW112Spells::DeathKnight::Frost::FROSTWYRMS_FURY;
constexpr uint32 PILLAR_OF_FROST = WoW120Spells::DeathKnight::Frost::PILLAR_OF_FROST;
constexpr uint32 EMPOWER_RUNE_WEAPON = WoW120Spells::DeathKnight::Frost::EMPOWER_RUNE_WEAPON;
constexpr uint32 BREATH_OF_SINDRAGOSA = WoW120Spells::DeathKnight::Frost::BREATH_OF_SINDRAGOSA;
constexpr uint32 FROSTWYRMS_FURY = WoW120Spells::DeathKnight::Frost::FROSTWYRMS_FURY;
// Utility
constexpr uint32 DEATH_GRIP_FROST = WoW112Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 MIND_FREEZE_FROST = WoW112Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 CHAINS_OF_ICE = WoW112Spells::DeathKnight::CHAINS_OF_ICE;
constexpr uint32 DARK_COMMAND_FROST = WoW112Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 ANTI_MAGIC_SHELL_FROST = WoW112Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 ICEBOUND_FORTITUDE_FROST = WoW112Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 DEATHS_ADVANCE_FROST = WoW112Spells::DeathKnight::DEATHS_ADVANCE;
constexpr uint32 DEATH_GRIP_FROST = WoW120Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 MIND_FREEZE_FROST = WoW120Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 CHAINS_OF_ICE = WoW120Spells::DeathKnight::CHAINS_OF_ICE;
constexpr uint32 DARK_COMMAND_FROST = WoW120Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 ANTI_MAGIC_SHELL_FROST = WoW120Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 ICEBOUND_FORTITUDE_FROST = WoW120Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 DEATHS_ADVANCE_FROST = WoW120Spells::DeathKnight::DEATHS_ADVANCE;
// Procs and Buffs
constexpr uint32 KILLING_MACHINE = WoW112Spells::DeathKnight::Frost::KILLING_MACHINE;
constexpr uint32 RIME = WoW112Spells::DeathKnight::Frost::RIME;
constexpr uint32 RAZORICE = WoW112Spells::DeathKnight::Frost::RAZORICE_PROC;
constexpr uint32 FROZEN_PULSE = WoW112Spells::DeathKnight::Frost::FROZEN_PULSE;
constexpr uint32 KILLING_MACHINE = WoW120Spells::DeathKnight::Frost::KILLING_MACHINE;
constexpr uint32 RIME = WoW120Spells::DeathKnight::Frost::RIME;
constexpr uint32 RAZORICE = WoW120Spells::DeathKnight::Frost::RAZORICE_PROC;
constexpr uint32 FROZEN_PULSE = WoW120Spells::DeathKnight::Frost::FROZEN_PULSE;
// Diseases
constexpr uint32 FROST_FEVER_DK = WoW112Spells::DeathKnight::Frost::FROST_FEVER;
constexpr uint32 FROST_FEVER_DK = WoW120Spells::DeathKnight::Frost::FROST_FEVER;
// Talents
constexpr uint32 OBLITERATION = WoW112Spells::DeathKnight::Frost::OBLITERATION;
constexpr uint32 OBLITERATION = WoW120Spells::DeathKnight::Frost::OBLITERATION;
constexpr uint32 BREATH_OF_SINDRAGOSA_TALENT = BREATH_OF_SINDRAGOSA;
constexpr uint32 GATHERING_STORM = WoW112Spells::DeathKnight::Frost::GATHERING_STORM;
constexpr uint32 ICECAP = WoW112Spells::DeathKnight::Frost::ICECAP;
constexpr uint32 INEXORABLE_ASSAULT = WoW112Spells::DeathKnight::Frost::INEXORABLE_ASSAULT;
constexpr uint32 COLD_HEART = WoW112Spells::DeathKnight::Frost::COLD_HEART;
constexpr uint32 GATHERING_STORM = WoW120Spells::DeathKnight::Frost::GATHERING_STORM;
constexpr uint32 ICECAP = WoW120Spells::DeathKnight::Frost::ICECAP;
constexpr uint32 INEXORABLE_ASSAULT = WoW120Spells::DeathKnight::Frost::INEXORABLE_ASSAULT;
constexpr uint32 COLD_HEART = WoW120Spells::DeathKnight::Frost::COLD_HEART;
// Aliases with FROST_ prefix for RegisterSpell compatibility
constexpr uint32 FROST_ICEBOUND_FORTITUDE = ICEBOUND_FORTITUDE_FROST;
@@ -630,7 +630,7 @@ private:
// - Proper BotAI retrieval from Player instance (via custom Player extension or bot registry)
// - ActionPriorityQueue registration for Frost DK spells (Icebound Fortitude, Pillar of Frost, Empower Rune Weapon, Obliterate, Howling Blast, Frost Strike, Breath of Sindragosa, Remorseless Winter, Horn of Winter)
// - BehaviorTree construction with burst cooldowns, priority procs (Killing Machine/Rime), runic power/rune spenders
// Reference: WoW 11.2 Death Knight mechanics, Frost specialization burst windows and proc management
// Reference: WoW 12.0 Death Knight mechanics, Frost specialization burst windows and proc management
// Commenting out for now until BotAI integration is implemented
/*
BotAI* ai = this->GetBot()->GetBotAI();
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h" // Central spell registry
#include "../SpellValidation_WoW120.h" // Central spell registry
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -29,62 +29,62 @@ namespace Playerbot
{
// ============================================================================
// UNHOLY DEATH KNIGHT SPELL ALIASES (WoW 11.2 - The War Within)
// UNHOLY DEATH KNIGHT SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// ============================================================================
namespace UnholyDeathKnightSpells
{
// Rune Spenders
constexpr uint32 FESTERING_STRIKE = WoW112Spells::DeathKnight::Unholy::FESTERING_STRIKE;
constexpr uint32 SCOURGE_STRIKE = WoW112Spells::DeathKnight::Unholy::SCOURGE_STRIKE;
constexpr uint32 CLAWING_SHADOWS = WoW112Spells::DeathKnight::Unholy::CLAWING_SHADOWS;
constexpr uint32 EPIDEMIC = WoW112Spells::DeathKnight::Unholy::EPIDEMIC;
constexpr uint32 DEFILE = WoW112Spells::DeathKnight::Unholy::DEFILE;
constexpr uint32 FESTERING_STRIKE = WoW120Spells::DeathKnight::Unholy::FESTERING_STRIKE;
constexpr uint32 SCOURGE_STRIKE = WoW120Spells::DeathKnight::Unholy::SCOURGE_STRIKE;
constexpr uint32 CLAWING_SHADOWS = WoW120Spells::DeathKnight::Unholy::CLAWING_SHADOWS;
constexpr uint32 EPIDEMIC = WoW120Spells::DeathKnight::Unholy::EPIDEMIC;
constexpr uint32 DEFILE = WoW120Spells::DeathKnight::Unholy::DEFILE;
// Runic Power Spenders
constexpr uint32 DEATH_COIL = WoW112Spells::DeathKnight::DEATH_COIL;
constexpr uint32 DARK_TRANSFORMATION = WoW112Spells::DeathKnight::Unholy::DARK_TRANSFORMATION;
constexpr uint32 DEATH_COIL = WoW120Spells::DeathKnight::DEATH_COIL;
constexpr uint32 DARK_TRANSFORMATION = WoW120Spells::DeathKnight::Unholy::DARK_TRANSFORMATION;
// Diseases
constexpr uint32 VIRULENT_PLAGUE = WoW112Spells::DeathKnight::Unholy::VIRULENT_PLAGUE;
constexpr uint32 OUTBREAK = WoW112Spells::DeathKnight::Unholy::OUTBREAK;
constexpr uint32 VIRULENT_PLAGUE = WoW120Spells::DeathKnight::Unholy::VIRULENT_PLAGUE;
constexpr uint32 OUTBREAK = WoW120Spells::DeathKnight::Unholy::OUTBREAK;
// Pet Management
constexpr uint32 RAISE_DEAD_UNHOLY = WoW112Spells::DeathKnight::RAISE_DEAD;
constexpr uint32 SUMMON_GARGOYLE = WoW112Spells::DeathKnight::Unholy::SUMMON_GARGOYLE;
constexpr uint32 ARMY_OF_THE_DEAD_UNHOLY = WoW112Spells::DeathKnight::Unholy::ARMY_OF_THE_DEAD;
constexpr uint32 APOCALYPSE = WoW112Spells::DeathKnight::Unholy::APOCALYPSE;
constexpr uint32 RAISE_ABOMINATION = WoW112Spells::DeathKnight::Unholy::RAISE_ABOMINATION;
constexpr uint32 RAISE_DEAD_UNHOLY = WoW120Spells::DeathKnight::RAISE_DEAD;
constexpr uint32 SUMMON_GARGOYLE = WoW120Spells::DeathKnight::Unholy::SUMMON_GARGOYLE;
constexpr uint32 ARMY_OF_THE_DEAD_UNHOLY = WoW120Spells::DeathKnight::Unholy::ARMY_OF_THE_DEAD;
constexpr uint32 APOCALYPSE = WoW120Spells::DeathKnight::Unholy::APOCALYPSE;
constexpr uint32 RAISE_ABOMINATION = WoW120Spells::DeathKnight::Unholy::RAISE_ABOMINATION;
// Major Cooldowns
constexpr uint32 UNHOLY_ASSAULT = WoW112Spells::DeathKnight::Unholy::UNHOLY_ASSAULT;
constexpr uint32 UNHOLY_BLIGHT = WoW112Spells::DeathKnight::Unholy::UNHOLY_BLIGHT;
constexpr uint32 SOUL_REAPER = WoW112Spells::DeathKnight::Unholy::SOUL_REAPER;
constexpr uint32 UNHOLY_ASSAULT = WoW120Spells::DeathKnight::Unholy::UNHOLY_ASSAULT;
constexpr uint32 UNHOLY_BLIGHT = WoW120Spells::DeathKnight::Unholy::UNHOLY_BLIGHT;
constexpr uint32 SOUL_REAPER = WoW120Spells::DeathKnight::Unholy::SOUL_REAPER;
// Utility
constexpr uint32 DEATH_GRIP_UNHOLY = WoW112Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 MIND_FREEZE_UNHOLY = WoW112Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 CHAINS_OF_ICE_UNHOLY = WoW112Spells::DeathKnight::CHAINS_OF_ICE;
constexpr uint32 DARK_COMMAND_UNHOLY = WoW112Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 ANTI_MAGIC_SHELL_UNHOLY = WoW112Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 ICEBOUND_FORTITUDE_UNHOLY = WoW112Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 DEATHS_ADVANCE_UNHOLY = WoW112Spells::DeathKnight::DEATHS_ADVANCE;
constexpr uint32 CONTROL_UNDEAD_UNHOLY = WoW112Spells::DeathKnight::CONTROL_UNDEAD;
constexpr uint32 RAISE_ALLY_UNHOLY = WoW112Spells::DeathKnight::RAISE_ALLY;
constexpr uint32 DEATH_GRIP_UNHOLY = WoW120Spells::DeathKnight::DEATH_GRIP;
constexpr uint32 MIND_FREEZE_UNHOLY = WoW120Spells::DeathKnight::MIND_FREEZE;
constexpr uint32 CHAINS_OF_ICE_UNHOLY = WoW120Spells::DeathKnight::CHAINS_OF_ICE;
constexpr uint32 DARK_COMMAND_UNHOLY = WoW120Spells::DeathKnight::DARK_COMMAND;
constexpr uint32 ANTI_MAGIC_SHELL_UNHOLY = WoW120Spells::DeathKnight::ANTI_MAGIC_SHELL;
constexpr uint32 ICEBOUND_FORTITUDE_UNHOLY = WoW120Spells::DeathKnight::ICEBOUND_FORTITUDE;
constexpr uint32 DEATHS_ADVANCE_UNHOLY = WoW120Spells::DeathKnight::DEATHS_ADVANCE;
constexpr uint32 CONTROL_UNDEAD_UNHOLY = WoW120Spells::DeathKnight::CONTROL_UNDEAD;
constexpr uint32 RAISE_ALLY_UNHOLY = WoW120Spells::DeathKnight::RAISE_ALLY;
// Procs and Buffs
constexpr uint32 SUDDEN_DOOM = WoW112Spells::DeathKnight::Unholy::SUDDEN_DOOM;
constexpr uint32 RUNIC_CORRUPTION = WoW112Spells::DeathKnight::Unholy::RUNIC_CORRUPTION;
constexpr uint32 FESTERING_WOUND = WoW112Spells::DeathKnight::Unholy::FESTERING_WOUND;
constexpr uint32 UNHOLY_STRENGTH = WoW112Spells::DeathKnight::Unholy::UNHOLY_STRENGTH;
constexpr uint32 SUDDEN_DOOM = WoW120Spells::DeathKnight::Unholy::SUDDEN_DOOM;
constexpr uint32 RUNIC_CORRUPTION = WoW120Spells::DeathKnight::Unholy::RUNIC_CORRUPTION;
constexpr uint32 FESTERING_WOUND = WoW120Spells::DeathKnight::Unholy::FESTERING_WOUND;
constexpr uint32 UNHOLY_STRENGTH = WoW120Spells::DeathKnight::Unholy::UNHOLY_STRENGTH;
// Talents
constexpr uint32 BURSTING_SORES = WoW112Spells::DeathKnight::Unholy::BURSTING_SORES;
constexpr uint32 INFECTED_CLAWS = WoW112Spells::DeathKnight::Unholy::INFECTED_CLAWS;
constexpr uint32 ALL_WILL_SERVE = WoW112Spells::DeathKnight::Unholy::ALL_WILL_SERVE;
constexpr uint32 UNHOLY_PACT = WoW112Spells::DeathKnight::Unholy::UNHOLY_PACT;
constexpr uint32 SUPERSTRAIN = WoW112Spells::DeathKnight::Unholy::SUPERSTRAIN;
constexpr uint32 BURSTING_SORES = WoW120Spells::DeathKnight::Unholy::BURSTING_SORES;
constexpr uint32 INFECTED_CLAWS = WoW120Spells::DeathKnight::Unholy::INFECTED_CLAWS;
constexpr uint32 ALL_WILL_SERVE = WoW120Spells::DeathKnight::Unholy::ALL_WILL_SERVE;
constexpr uint32 UNHOLY_PACT = WoW120Spells::DeathKnight::Unholy::UNHOLY_PACT;
constexpr uint32 SUPERSTRAIN = WoW120Spells::DeathKnight::Unholy::SUPERSTRAIN;
// Aliases with UNHOLY_ prefix for RegisterSpell compatibility
constexpr uint32 UNHOLY_ANTIMAGIC_SHELL = ANTI_MAGIC_SHELL_UNHOLY;
@@ -648,7 +648,7 @@ private:
// - Proper BotAI retrieval from Player instance (via custom Player extension or bot registry)
// - ActionPriorityQueue registration for Unholy DK spells (Anti-Magic Shell, Army of the Dead, Apocalypse, Festering Strike, Scourge Strike, Death Coil)
// - BehaviorTree construction with burst cooldowns, Festering Wound management, wound application/bursting, and runic power dump
// Reference: WoW 11.2 Death Knight mechanics, Unholy specialization pet management and Festering Wound stacking patterns
// Reference: WoW 12.0 Death Knight mechanics, Unholy specialization pet management and Festering Wound stacking patterns
// Commenting out for now until BotAI integration is implemented
/*
BotAI* ai = this->GetBot()->GetBotAI();
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include <memory>
#include <chrono>
#include <unordered_map>
@@ -26,54 +26,54 @@ class VengeanceDemonHunterRefactored;
using HavocDemonHunter = HavocDemonHunterRefactored;
using VengeanceDemonHunter = VengeanceDemonHunterRefactored;
// DemonHunter Spell IDs - Using central registry (WoW 11.2)
// DemonHunter Spell IDs - Using central registry (WoW 12.0)
enum DemonHunterSpells
{
// Havoc abilities
CHAOS_STRIKE = WoW112Spells::DemonHunter::Common::CHAOS_STRIKE,
BLADE_DANCE = WoW112Spells::DemonHunter::Common::BLADE_DANCE,
DEATH_SWEEP = WoW112Spells::DemonHunter::Common::DEATH_SWEEP,
ANNIHILATION = WoW112Spells::DemonHunter::Common::ANNIHILATION,
METAMORPHOSIS_HAVOC = WoW112Spells::DemonHunter::Common::METAMORPHOSIS_HAVOC,
EYE_BEAM = WoW112Spells::DemonHunter::Common::EYE_BEAM,
DEMONS_BITE = WoW112Spells::DemonHunter::Common::DEMONS_BITE,
FEL_BARRAGE = WoW112Spells::DemonHunter::Common::FEL_BARRAGE,
CHAOS_STRIKE = WoW120Spells::DemonHunter::Common::CHAOS_STRIKE,
BLADE_DANCE = WoW120Spells::DemonHunter::Common::BLADE_DANCE,
DEATH_SWEEP = WoW120Spells::DemonHunter::Common::DEATH_SWEEP,
ANNIHILATION = WoW120Spells::DemonHunter::Common::ANNIHILATION,
METAMORPHOSIS_HAVOC = WoW120Spells::DemonHunter::Common::METAMORPHOSIS_HAVOC,
EYE_BEAM = WoW120Spells::DemonHunter::Common::EYE_BEAM,
DEMONS_BITE = WoW120Spells::DemonHunter::Common::DEMONS_BITE,
FEL_BARRAGE = WoW120Spells::DemonHunter::Common::FEL_BARRAGE,
// Vengeance abilities
SOUL_CLEAVE = WoW112Spells::DemonHunter::Common::SOUL_CLEAVE,
SPIRIT_BOMB = WoW112Spells::DemonHunter::Common::SPIRIT_BOMB,
METAMORPHOSIS_VENGEANCE = WoW112Spells::DemonHunter::Common::METAMORPHOSIS_VENGEANCE,
SHEAR = WoW112Spells::DemonHunter::Common::SHEAR,
SOUL_BARRIER = WoW112Spells::DemonHunter::Common::SOUL_BARRIER,
SOUL_CLEAVE = WoW120Spells::DemonHunter::Common::SOUL_CLEAVE,
SPIRIT_BOMB = WoW120Spells::DemonHunter::Common::SPIRIT_BOMB,
METAMORPHOSIS_VENGEANCE = WoW120Spells::DemonHunter::Common::METAMORPHOSIS_VENGEANCE,
SHEAR = WoW120Spells::DemonHunter::Common::SHEAR,
SOUL_BARRIER = WoW120Spells::DemonHunter::Common::SOUL_BARRIER,
// Defensive abilities
BLUR = WoW112Spells::DemonHunter::Common::BLUR,
DARKNESS = WoW112Spells::DemonHunter::Common::DARKNESS,
NETHERWALK = WoW112Spells::DemonHunter::Common::NETHERWALK,
BLUR = WoW120Spells::DemonHunter::Common::BLUR,
DARKNESS = WoW120Spells::DemonHunter::Common::DARKNESS,
NETHERWALK = WoW120Spells::DemonHunter::Common::NETHERWALK,
// Shared abilities
DEMON_SPIKES = WoW112Spells::DemonHunter::Common::DEMON_SPIKES,
IMMOLATION_AURA = WoW112Spells::DemonHunter::Common::IMMOLATION_AURA,
FIERY_BRAND = WoW112Spells::DemonHunter::Common::FIERY_BRAND,
FEL_RUSH = WoW112Spells::DemonHunter::Common::FEL_RUSH,
VENGEFUL_RETREAT = WoW112Spells::DemonHunter::Common::VENGEFUL_RETREAT,
CONSUME_MAGIC = WoW112Spells::DemonHunter::Common::CONSUME_MAGIC,
SIGIL_OF_FLAME = WoW112Spells::DemonHunter::Common::SIGIL_OF_FLAME,
SIGIL_OF_SILENCE = WoW112Spells::DemonHunter::Common::SIGIL_OF_SILENCE,
SIGIL_OF_MISERY = WoW112Spells::DemonHunter::Common::SIGIL_OF_MISERY,
CHAOS_NOVA = WoW112Spells::DemonHunter::Common::CHAOS_NOVA,
DEMON_SPIKES = WoW120Spells::DemonHunter::Common::DEMON_SPIKES,
IMMOLATION_AURA = WoW120Spells::DemonHunter::Common::IMMOLATION_AURA,
FIERY_BRAND = WoW120Spells::DemonHunter::Common::FIERY_BRAND,
FEL_RUSH = WoW120Spells::DemonHunter::Common::FEL_RUSH,
VENGEFUL_RETREAT = WoW120Spells::DemonHunter::Common::VENGEFUL_RETREAT,
CONSUME_MAGIC = WoW120Spells::DemonHunter::Common::CONSUME_MAGIC,
SIGIL_OF_FLAME = WoW120Spells::DemonHunter::Common::SIGIL_OF_FLAME,
SIGIL_OF_SILENCE = WoW120Spells::DemonHunter::Common::SIGIL_OF_SILENCE,
SIGIL_OF_MISERY = WoW120Spells::DemonHunter::Common::SIGIL_OF_MISERY,
CHAOS_NOVA = WoW120Spells::DemonHunter::Common::CHAOS_NOVA,
// Utility/Interrupts
DISRUPT = WoW112Spells::DemonHunter::Common::DISRUPT,
IMPRISON = WoW112Spells::DemonHunter::Common::IMPRISON,
DISRUPT = WoW120Spells::DemonHunter::Common::DISRUPT,
IMPRISON = WoW120Spells::DemonHunter::Common::IMPRISON,
// Offensive cooldowns
NEMESIS = WoW112Spells::DemonHunter::Common::NEMESIS,
NEMESIS = WoW120Spells::DemonHunter::Common::NEMESIS,
// Talent abilities
MOMENTUM_TALENT = WoW112Spells::DemonHunter::Common::MOMENTUM_TALENT,
DEMONIC_TALENT = WoW112Spells::DemonHunter::Common::DEMONIC_TALENT,
BLIND_FURY_TALENT = WoW112Spells::DemonHunter::Common::BLIND_FURY_TALENT
MOMENTUM_TALENT = WoW120Spells::DemonHunter::Common::MOMENTUM_TALENT,
DEMONIC_TALENT = WoW120Spells::DemonHunter::Common::DEMONIC_TALENT,
BLIND_FURY_TALENT = WoW120Spells::DemonHunter::Common::BLIND_FURY_TALENT
};
class TC_GAME_API DemonHunterAI : public ClassAI
@@ -17,7 +17,7 @@
#include "../Common/CooldownManager.h"
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "ObjectGuid.h"
#include "../../../Spatial/SpatialGridManager.h"
#include "ObjectAccessor.h"
@@ -49,55 +49,55 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// HAVOC DEMON HUNTER SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// HAVOC DEMON HUNTER SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// Note: Uses enum to maintain compatibility with DemonHunterAI.h and existing code
// ============================================================================
enum HavocSpells
{
// Core Abilities - Using central registry: WoW112Spells::DemonHunter::Havoc
SPELL_DEMONS_BITE = WoW112Spells::DemonHunter::Havoc::DEMONS_BITE,
SPELL_CHAOS_STRIKE = WoW112Spells::DemonHunter::Havoc::CHAOS_STRIKE,
SPELL_ANNIHILATION = WoW112Spells::DemonHunter::Havoc::ANNIHILATION,
SPELL_BLADE_DANCE = WoW112Spells::DemonHunter::Havoc::BLADE_DANCE,
SPELL_DEATH_SWEEP = WoW112Spells::DemonHunter::Havoc::DEATH_SWEEP,
SPELL_EYE_BEAM = WoW112Spells::DemonHunter::Havoc::EYE_BEAM,
SPELL_IMMOLATION_AURA = WoW112Spells::DemonHunter::Havoc::IMMOLATION_AURA,
SPELL_FEL_RUSH = WoW112Spells::DemonHunter::FEL_RUSH,
SPELL_VENGEFUL_RETREAT = WoW112Spells::DemonHunter::VENGEFUL_RETREAT,
// Core Abilities - Using central registry: WoW120Spells::DemonHunter::Havoc
SPELL_DEMONS_BITE = WoW120Spells::DemonHunter::Havoc::DEMONS_BITE,
SPELL_CHAOS_STRIKE = WoW120Spells::DemonHunter::Havoc::CHAOS_STRIKE,
SPELL_ANNIHILATION = WoW120Spells::DemonHunter::Havoc::ANNIHILATION,
SPELL_BLADE_DANCE = WoW120Spells::DemonHunter::Havoc::BLADE_DANCE,
SPELL_DEATH_SWEEP = WoW120Spells::DemonHunter::Havoc::DEATH_SWEEP,
SPELL_EYE_BEAM = WoW120Spells::DemonHunter::Havoc::EYE_BEAM,
SPELL_IMMOLATION_AURA = WoW120Spells::DemonHunter::Havoc::IMMOLATION_AURA,
SPELL_FEL_RUSH = WoW120Spells::DemonHunter::FEL_RUSH,
SPELL_VENGEFUL_RETREAT = WoW120Spells::DemonHunter::VENGEFUL_RETREAT,
// Major Cooldowns - Using central registry: WoW112Spells::DemonHunter
SPELL_METAMORPHOSIS = WoW112Spells::DemonHunter::METAMORPHOSIS_HAVOC,
SPELL_FEL_BARRAGE = WoW112Spells::DemonHunter::Havoc::FEL_BARRAGE,
SPELL_CHAOS_NOVA = WoW112Spells::DemonHunter::CHAOS_NOVA,
SPELL_DARKNESS = WoW112Spells::DemonHunter::DARKNESS,
SPELL_BLUR = WoW112Spells::DemonHunter::BLUR,
// Major Cooldowns - Using central registry: WoW120Spells::DemonHunter
SPELL_METAMORPHOSIS = WoW120Spells::DemonHunter::METAMORPHOSIS_HAVOC,
SPELL_FEL_BARRAGE = WoW120Spells::DemonHunter::Havoc::FEL_BARRAGE,
SPELL_CHAOS_NOVA = WoW120Spells::DemonHunter::CHAOS_NOVA,
SPELL_DARKNESS = WoW120Spells::DemonHunter::DARKNESS,
SPELL_BLUR = WoW120Spells::DemonHunter::BLUR,
// Talents/Passives - Using central registry: WoW112Spells::DemonHunter::Havoc
SPELL_DEMONIC = WoW112Spells::DemonHunter::Havoc::DEMONIC,
SPELL_MOMENTUM = WoW112Spells::DemonHunter::Havoc::MOMENTUM,
SPELL_BLIND_FURY = WoW112Spells::DemonHunter::Havoc::BLIND_FURY,
SPELL_FIRST_BLOOD = WoW112Spells::DemonHunter::Havoc::FIRST_BLOOD,
SPELL_TRAIL_OF_RUIN = WoW112Spells::DemonHunter::Havoc::TRAIL_OF_RUIN,
SPELL_CHAOS_CLEAVE = WoW112Spells::DemonHunter::Havoc::CHAOS_CLEAVE,
SPELL_CYCLE_OF_HATRED = WoW112Spells::DemonHunter::Havoc::CYCLE_OF_HATRED,
// Talents/Passives - Using central registry: WoW120Spells::DemonHunter::Havoc
SPELL_DEMONIC = WoW120Spells::DemonHunter::Havoc::DEMONIC,
SPELL_MOMENTUM = WoW120Spells::DemonHunter::Havoc::MOMENTUM,
SPELL_BLIND_FURY = WoW120Spells::DemonHunter::Havoc::BLIND_FURY,
SPELL_FIRST_BLOOD = WoW120Spells::DemonHunter::Havoc::FIRST_BLOOD,
SPELL_TRAIL_OF_RUIN = WoW120Spells::DemonHunter::Havoc::TRAIL_OF_RUIN,
SPELL_CHAOS_CLEAVE = WoW120Spells::DemonHunter::Havoc::CHAOS_CLEAVE,
SPELL_CYCLE_OF_HATRED = WoW120Spells::DemonHunter::Havoc::CYCLE_OF_HATRED,
// Utility - Using central registry: WoW112Spells::DemonHunter
SPELL_DISRUPT = WoW112Spells::DemonHunter::DISRUPT,
SPELL_CONSUME_MAGIC = WoW112Spells::DemonHunter::CONSUME_MAGIC,
SPELL_IMPRISON = WoW112Spells::DemonHunter::IMPRISON,
SPELL_SPECTRAL_SIGHT = WoW112Spells::DemonHunter::SPECTRAL_SIGHT,
SPELL_TORMENT = WoW112Spells::DemonHunter::Havoc::TORMENT,
// Utility - Using central registry: WoW120Spells::DemonHunter
SPELL_DISRUPT = WoW120Spells::DemonHunter::DISRUPT,
SPELL_CONSUME_MAGIC = WoW120Spells::DemonHunter::CONSUME_MAGIC,
SPELL_IMPRISON = WoW120Spells::DemonHunter::IMPRISON,
SPELL_SPECTRAL_SIGHT = WoW120Spells::DemonHunter::SPECTRAL_SIGHT,
SPELL_TORMENT = WoW120Spells::DemonHunter::Havoc::TORMENT,
// Buffs/Debuffs - Using central registry: WoW112Spells::DemonHunter::Havoc
BUFF_MOMENTUM = WoW112Spells::DemonHunter::Havoc::BUFF_MOMENTUM,
BUFF_FURIOUS_GAZE = WoW112Spells::DemonHunter::Havoc::BUFF_FURIOUS_GAZE,
BUFF_METAMORPHOSIS = WoW112Spells::DemonHunter::Havoc::BUFF_METAMORPHOSIS,
BUFF_PREPARED = WoW112Spells::DemonHunter::Havoc::BUFF_PREPARED,
BUFF_IMMOLATION_AURA = WoW112Spells::DemonHunter::Havoc::IMMOLATION_AURA,
BUFF_BLADE_DANCE = WoW112Spells::DemonHunter::Havoc::BLADE_DANCE,
BUFF_BLUR = WoW112Spells::DemonHunter::BLUR
// Buffs/Debuffs - Using central registry: WoW120Spells::DemonHunter::Havoc
BUFF_MOMENTUM = WoW120Spells::DemonHunter::Havoc::BUFF_MOMENTUM,
BUFF_FURIOUS_GAZE = WoW120Spells::DemonHunter::Havoc::BUFF_FURIOUS_GAZE,
BUFF_METAMORPHOSIS = WoW120Spells::DemonHunter::Havoc::BUFF_METAMORPHOSIS,
BUFF_PREPARED = WoW120Spells::DemonHunter::Havoc::BUFF_PREPARED,
BUFF_IMMOLATION_AURA = WoW120Spells::DemonHunter::Havoc::IMMOLATION_AURA,
BUFF_BLADE_DANCE = WoW120Spells::DemonHunter::Havoc::BLADE_DANCE,
BUFF_BLUR = WoW120Spells::DemonHunter::BLUR
};
// Fury resource type (simple uint32)
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "../../Services/ThreatAssistant.h"
#include "Player.h"
#include "SpellMgr.h"
@@ -45,46 +45,46 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// VENGEANCE DEMON HUNTER SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// VENGEANCE DEMON HUNTER SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// Note: Uses enum to maintain compatibility with DemonHunterAI.h and existing code
// ============================================================================
enum VengeanceSpells
{
// Pain Generators - Using central registry: WoW112Spells::DemonHunter::Vengeance
FRACTURE = WoW112Spells::DemonHunter::Vengeance::FRACTURE,
FEL_DEVASTATION = WoW112Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
// Pain Generators - Using central registry: WoW120Spells::DemonHunter::Vengeance
FRACTURE = WoW120Spells::DemonHunter::Vengeance::FRACTURE,
FEL_DEVASTATION = WoW120Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
// Pain Spenders - use DemonHunterSpells from DemonHunterAI.h for SOUL_CLEAVE, SPIRIT_BOMB
FEL_DEVASTATION_SPENDER = WoW112Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
FEL_DEVASTATION_SPENDER = WoW120Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
// Sigils - Using central registry: WoW112Spells::DemonHunter::Vengeance
SIGIL_OF_CHAINS = WoW112Spells::DemonHunter::Vengeance::SIGIL_OF_CHAINS,
// Sigils - Using central registry: WoW120Spells::DemonHunter::Vengeance
SIGIL_OF_CHAINS = WoW120Spells::DemonHunter::Vengeance::SIGIL_OF_CHAINS,
// Threat and Utility - Using central registry: WoW112Spells::DemonHunter::Vengeance
INFERNAL_STRIKE = WoW112Spells::DemonHunter::Vengeance::INFERNAL_STRIKE,
THROW_GLAIVE_TANK = WoW112Spells::DemonHunter::Vengeance::THROW_GLAIVE_TANK,
TORMENT = WoW112Spells::DemonHunter::Vengeance::TORMENT,
CONSUME_MAGIC_TANK = WoW112Spells::DemonHunter::CONSUME_MAGIC,
// Threat and Utility - Using central registry: WoW120Spells::DemonHunter::Vengeance
INFERNAL_STRIKE = WoW120Spells::DemonHunter::Vengeance::INFERNAL_STRIKE,
THROW_GLAIVE_TANK = WoW120Spells::DemonHunter::Vengeance::THROW_GLAIVE_TANK,
TORMENT = WoW120Spells::DemonHunter::Vengeance::TORMENT,
CONSUME_MAGIC_TANK = WoW120Spells::DemonHunter::CONSUME_MAGIC,
// Defensive Cooldowns - Using central registry: WoW112Spells::DemonHunter::Vengeance
LAST_RESORT = WoW112Spells::DemonHunter::Vengeance::LAST_RESORT,
FEL_DEVASTATION_DEF = WoW112Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
// Defensive Cooldowns - Using central registry: WoW120Spells::DemonHunter::Vengeance
LAST_RESORT = WoW120Spells::DemonHunter::Vengeance::LAST_RESORT,
FEL_DEVASTATION_DEF = WoW120Spells::DemonHunter::Vengeance::FEL_DEVASTATION,
// Passives/Procs - Using central registry: WoW112Spells::DemonHunter::Vengeance
IMMOLATION_AURA_TANK = WoW112Spells::DemonHunter::Vengeance::IMMOLATION_AURA_TANK,
SOUL_FRAGMENTS_BUFF = WoW112Spells::DemonHunter::Vengeance::SOUL_FRAGMENT,
PAINBRINGER_BUFF = WoW112Spells::DemonHunter::Vengeance::PAINBRINGER_BUFF,
FRAILTY_DEBUFF = WoW112Spells::DemonHunter::Vengeance::FRAILTY_DEBUFF,
// Passives/Procs - Using central registry: WoW120Spells::DemonHunter::Vengeance
IMMOLATION_AURA_TANK = WoW120Spells::DemonHunter::Vengeance::IMMOLATION_AURA_TANK,
SOUL_FRAGMENTS_BUFF = WoW120Spells::DemonHunter::Vengeance::SOUL_FRAGMENT,
PAINBRINGER_BUFF = WoW120Spells::DemonHunter::Vengeance::PAINBRINGER_BUFF,
FRAILTY_DEBUFF = WoW120Spells::DemonHunter::Vengeance::FRAILTY_DEBUFF,
// Talents - Using central registry: WoW112Spells::DemonHunter::Vengeance
AGONIZING_FLAMES = WoW112Spells::DemonHunter::Vengeance::AGONIZING_FLAMES,
BURNING_ALIVE = WoW112Spells::DemonHunter::Vengeance::BURNING_ALIVE,
FEED_THE_DEMON = WoW112Spells::DemonHunter::Vengeance::FEED_THE_DEMON,
SPIRIT_BOMB_TALENT = WoW112Spells::DemonHunter::Vengeance::SPIRIT_BOMB,
FRACTURE_TALENT = WoW112Spells::DemonHunter::Vengeance::FRACTURE,
SOUL_BARRIER_TALENT = WoW112Spells::DemonHunter::Vengeance::SOUL_BARRIER
// Talents - Using central registry: WoW120Spells::DemonHunter::Vengeance
AGONIZING_FLAMES = WoW120Spells::DemonHunter::Vengeance::AGONIZING_FLAMES,
BURNING_ALIVE = WoW120Spells::DemonHunter::Vengeance::BURNING_ALIVE,
FEED_THE_DEMON = WoW120Spells::DemonHunter::Vengeance::FEED_THE_DEMON,
SPIRIT_BOMB_TALENT = WoW120Spells::DemonHunter::Vengeance::SPIRIT_BOMB,
FRACTURE_TALENT = WoW120Spells::DemonHunter::Vengeance::FRACTURE,
SOUL_BARRIER_TALENT = WoW120Spells::DemonHunter::Vengeance::SOUL_BARRIER
};
// Pain resource type (simple uint32)
@@ -25,8 +25,8 @@
#include "../BotAI.h"
#include "GameTime.h"
// Central Spell Registry - See WoW112Spells::Druid namespace
#include "../SpellValidation_WoW112.h"
// Central Spell Registry - See WoW120Spells::Druid namespace
#include "../SpellValidation_WoW120.h"
namespace Playerbot
{
@@ -44,67 +44,67 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// BALANCE DRUID SPELL IDs (WoW 11.2 - The War Within)
// See central registry: WoW112Spells::Druid and WoW112Spells::Druid::Balance
// BALANCE DRUID SPELL IDs (WoW 12.0 - The War Within)
// See central registry: WoW120Spells::Druid and WoW120Spells::Druid::Balance
// ============================================================================
enum BalanceDruidSpells
{
// Astral Power Generators
WRATH = WoW112Spells::Druid::Balance::WRATH,
STARFIRE = WoW112Spells::Druid::Balance::STARFIRE,
STELLAR_FLARE = WoW112Spells::Druid::Balance::STELLAR_FLARE,
FORCE_OF_NATURE = WoW112Spells::Druid::Balance::FORCE_OF_NATURE,
WRATH = WoW120Spells::Druid::Balance::WRATH,
STARFIRE = WoW120Spells::Druid::Balance::STARFIRE,
STELLAR_FLARE = WoW120Spells::Druid::Balance::STELLAR_FLARE,
FORCE_OF_NATURE = WoW120Spells::Druid::Balance::FORCE_OF_NATURE,
// Astral Power Spenders
STARSURGE = WoW112Spells::Druid::Balance::STARSURGE,
STARFALL = WoW112Spells::Druid::Balance::STARFALL,
NEW_MOON = WoW112Spells::Druid::Balance::NEW_MOON,
HALF_MOON = WoW112Spells::Druid::Balance::HALF_MOON,
FULL_MOON = WoW112Spells::Druid::Balance::FULL_MOON,
STARSURGE = WoW120Spells::Druid::Balance::STARSURGE,
STARFALL = WoW120Spells::Druid::Balance::STARFALL,
NEW_MOON = WoW120Spells::Druid::Balance::NEW_MOON,
HALF_MOON = WoW120Spells::Druid::Balance::HALF_MOON,
FULL_MOON = WoW120Spells::Druid::Balance::FULL_MOON,
// DoTs
MOONFIRE = WoW112Spells::Druid::Balance::MOONFIRE_BALANCE,
SUNFIRE = WoW112Spells::Druid::Balance::SUNFIRE_BALANCE,
MOONFIRE = WoW120Spells::Druid::Balance::MOONFIRE_BALANCE,
SUNFIRE = WoW120Spells::Druid::Balance::SUNFIRE_BALANCE,
// Major Cooldowns
INCARNATION_CHOSEN = WoW112Spells::Druid::Balance::INCARNATION_CHOSEN,
CELESTIAL_ALIGNMENT = WoW112Spells::Druid::Balance::CELESTIAL_ALIGNMENT,
WARRIOR_OF_ELUNE = WoW112Spells::Druid::Balance::WARRIOR_OF_ELUNE,
FURY_OF_ELUNE = WoW112Spells::Druid::Balance::FURY_OF_ELUNE,
CONVOKE_THE_SPIRITS = WoW112Spells::Druid::Balance::CONVOKE_THE_SPIRITS,
INCARNATION_CHOSEN = WoW120Spells::Druid::Balance::INCARNATION_CHOSEN,
CELESTIAL_ALIGNMENT = WoW120Spells::Druid::Balance::CELESTIAL_ALIGNMENT,
WARRIOR_OF_ELUNE = WoW120Spells::Druid::Balance::WARRIOR_OF_ELUNE,
FURY_OF_ELUNE = WoW120Spells::Druid::Balance::FURY_OF_ELUNE,
CONVOKE_THE_SPIRITS = WoW120Spells::Druid::Balance::CONVOKE_THE_SPIRITS,
// Utility
MOONKIN_FORM = WoW112Spells::Druid::MOONKIN_FORM,
SOLAR_BEAM = WoW112Spells::Druid::SOLAR_BEAM,
TYPHOON = WoW112Spells::Druid::TYPHOON,
MIGHTY_BASH = WoW112Spells::Druid::MIGHTY_BASH,
MASS_ENTANGLEMENT = WoW112Spells::Druid::MASS_ENTANGLEMENT,
REMOVE_CORRUPTION = WoW112Spells::Druid::REMOVE_CORRUPTION,
SOOTHE = WoW112Spells::Druid::SOOTHE,
INNERVATE = WoW112Spells::Druid::INNERVATE,
MOONKIN_FORM = WoW120Spells::Druid::MOONKIN_FORM,
SOLAR_BEAM = WoW120Spells::Druid::SOLAR_BEAM,
TYPHOON = WoW120Spells::Druid::TYPHOON,
MIGHTY_BASH = WoW120Spells::Druid::MIGHTY_BASH,
MASS_ENTANGLEMENT = WoW120Spells::Druid::MASS_ENTANGLEMENT,
REMOVE_CORRUPTION = WoW120Spells::Druid::REMOVE_CORRUPTION,
SOOTHE = WoW120Spells::Druid::SOOTHE,
INNERVATE = WoW120Spells::Druid::INNERVATE,
// Defensives
BARKSKIN = WoW112Spells::Druid::BARKSKIN,
RENEWAL = WoW112Spells::Druid::RENEWAL,
REGROWTH = WoW112Spells::Druid::REGROWTH,
BEAR_FORM = WoW112Spells::Druid::BEAR_FORM,
FRENZIED_REGENERATION = WoW112Spells::Druid::Guardian::FRENZIED_REGENERATION,
BARKSKIN = WoW120Spells::Druid::BARKSKIN,
RENEWAL = WoW120Spells::Druid::RENEWAL,
REGROWTH = WoW120Spells::Druid::REGROWTH,
BEAR_FORM = WoW120Spells::Druid::BEAR_FORM,
FRENZIED_REGENERATION = WoW120Spells::Druid::Guardian::FRENZIED_REGENERATION,
// Eclipse System
ECLIPSE_SOLAR = WoW112Spells::Druid::Balance::SOLAR_ECLIPSE,
ECLIPSE_LUNAR = WoW112Spells::Druid::Balance::LUNAR_ECLIPSE,
BALANCE_OF_ALL_THINGS = WoW112Spells::Druid::Balance::BALANCE_OF_ALL_THINGS,
ECLIPSE_SOLAR = WoW120Spells::Druid::Balance::SOLAR_ECLIPSE,
ECLIPSE_LUNAR = WoW120Spells::Druid::Balance::LUNAR_ECLIPSE,
BALANCE_OF_ALL_THINGS = WoW120Spells::Druid::Balance::BALANCE_OF_ALL_THINGS,
// Procs and Buffs
SHOOTING_STARS = WoW112Spells::Druid::Balance::SHOOTING_STARS,
STARWEAVERS_WARP = WoW112Spells::Druid::Balance::STARWEAVERS_WARP,
STARWEAVERS_WEFT = WoW112Spells::Druid::Balance::STARWEAVERS_WEFT,
SHOOTING_STARS = WoW120Spells::Druid::Balance::SHOOTING_STARS,
STARWEAVERS_WARP = WoW120Spells::Druid::Balance::STARWEAVERS_WARP,
STARWEAVERS_WEFT = WoW120Spells::Druid::Balance::STARWEAVERS_WEFT,
// Talents
WILD_MUSHROOM = WoW112Spells::Druid::Balance::WILD_MUSHROOM_GROUND,
TWIN_MOONS = WoW112Spells::Druid::Balance::TWIN_MOONS,
SOUL_OF_THE_FOREST = WoW112Spells::Druid::Balance::SOUL_OF_THE_FOREST
WILD_MUSHROOM = WoW120Spells::Druid::Balance::WILD_MUSHROOM_GROUND,
TWIN_MOONS = WoW120Spells::Druid::Balance::TWIN_MOONS,
SOUL_OF_THE_FOREST = WoW120Spells::Druid::Balance::SOUL_OF_THE_FOREST
};
// Dual resource type for Balance Druid (Mana + Astral Power)
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include <memory>
#include <chrono>
@@ -128,86 +128,86 @@ private:
uint32 GetComboPoints() const;
// Spell ID constants
// Druid Spell IDs - Using central registry (WoW 11.2)
// Druid Spell IDs - Using central registry (WoW 12.0)
enum DruidSpells
{
// Forms
BEAR_FORM = WoW112Spells::Druid::Common::BEAR_FORM,
CAT_FORM = WoW112Spells::Druid::Common::CAT_FORM,
MOONKIN_FORM = WoW112Spells::Druid::Common::MOONKIN_FORM,
TREE_OF_LIFE = WoW112Spells::Druid::Common::TREE_OF_LIFE,
TRAVEL_FORM = WoW112Spells::Druid::Common::TRAVEL_FORM,
BEAR_FORM = WoW120Spells::Druid::Common::BEAR_FORM,
CAT_FORM = WoW120Spells::Druid::Common::CAT_FORM,
MOONKIN_FORM = WoW120Spells::Druid::Common::MOONKIN_FORM,
TREE_OF_LIFE = WoW120Spells::Druid::Common::TREE_OF_LIFE,
TRAVEL_FORM = WoW120Spells::Druid::Common::TRAVEL_FORM,
// Interrupts
SKULL_BASH_BEAR = WoW112Spells::Druid::Common::SKULL_BASH_BEAR,
SKULL_BASH_CAT = WoW112Spells::Druid::Common::SKULL_BASH_CAT,
SOLAR_BEAM = WoW112Spells::Druid::Common::SOLAR_BEAM,
TYPHOON = WoW112Spells::Druid::Common::TYPHOON,
MIGHTY_BASH = WoW112Spells::Druid::Common::MIGHTY_BASH,
SKULL_BASH_BEAR = WoW120Spells::Druid::Common::SKULL_BASH_BEAR,
SKULL_BASH_CAT = WoW120Spells::Druid::Common::SKULL_BASH_CAT,
SOLAR_BEAM = WoW120Spells::Druid::Common::SOLAR_BEAM,
TYPHOON = WoW120Spells::Druid::Common::TYPHOON,
MIGHTY_BASH = WoW120Spells::Druid::Common::MIGHTY_BASH,
// Defensive abilities
BARKSKIN = WoW112Spells::Druid::Common::BARKSKIN,
SURVIVAL_INSTINCTS = WoW112Spells::Druid::Common::SURVIVAL_INSTINCTS,
FRENZIED_REGENERATION = WoW112Spells::Druid::Common::FRENZIED_REGENERATION,
IRONBARK = WoW112Spells::Druid::Common::IRONBARK,
CENARION_WARD = WoW112Spells::Druid::Common::CENARION_WARD,
BARKSKIN = WoW120Spells::Druid::Common::BARKSKIN,
SURVIVAL_INSTINCTS = WoW120Spells::Druid::Common::SURVIVAL_INSTINCTS,
FRENZIED_REGENERATION = WoW120Spells::Druid::Common::FRENZIED_REGENERATION,
IRONBARK = WoW120Spells::Druid::Common::IRONBARK,
CENARION_WARD = WoW120Spells::Druid::Common::CENARION_WARD,
// Feral offensive
TIGERS_FURY = WoW112Spells::Druid::Common::TIGERS_FURY,
BERSERK_CAT = WoW112Spells::Druid::Common::BERSERK_CAT,
INCARNATION_KING = WoW112Spells::Druid::Common::INCARNATION_KING,
TIGERS_FURY = WoW120Spells::Druid::Common::TIGERS_FURY,
BERSERK_CAT = WoW120Spells::Druid::Common::BERSERK_CAT,
INCARNATION_KING = WoW120Spells::Druid::Common::INCARNATION_KING,
// Feral abilities
SHRED = WoW112Spells::Druid::Common::SHRED,
RAKE = WoW112Spells::Druid::Common::RAKE,
RIP = WoW112Spells::Druid::Common::RIP,
FEROCIOUS_BITE = WoW112Spells::Druid::Common::FEROCIOUS_BITE,
SAVAGE_ROAR = WoW112Spells::Druid::Common::SAVAGE_ROAR,
SWIPE_CAT = WoW112Spells::Druid::Common::SWIPE_CAT,
THRASH_CAT = WoW112Spells::Druid::Common::THRASH_CAT,
PRIMAL_WRATH = WoW112Spells::Druid::Common::PRIMAL_WRATH,
SHRED = WoW120Spells::Druid::Common::SHRED,
RAKE = WoW120Spells::Druid::Common::RAKE,
RIP = WoW120Spells::Druid::Common::RIP,
FEROCIOUS_BITE = WoW120Spells::Druid::Common::FEROCIOUS_BITE,
SAVAGE_ROAR = WoW120Spells::Druid::Common::SAVAGE_ROAR,
SWIPE_CAT = WoW120Spells::Druid::Common::SWIPE_CAT,
THRASH_CAT = WoW120Spells::Druid::Common::THRASH_CAT,
PRIMAL_WRATH = WoW120Spells::Druid::Common::PRIMAL_WRATH,
// Guardian abilities
MANGLE_BEAR = WoW112Spells::Druid::Common::MANGLE_BEAR,
MAUL = WoW112Spells::Druid::Common::MAUL,
IRONFUR = WoW112Spells::Druid::Common::IRONFUR,
THRASH_BEAR = WoW112Spells::Druid::Common::THRASH_BEAR,
SWIPE_BEAR = WoW112Spells::Druid::Common::SWIPE_BEAR,
BERSERK_BEAR = WoW112Spells::Druid::Common::BERSERK_BEAR,
INCARNATION_GUARDIAN = WoW112Spells::Druid::Common::INCARNATION_GUARDIAN,
PULVERIZE = WoW112Spells::Druid::Common::PULVERIZE,
MANGLE_BEAR = WoW120Spells::Druid::Common::MANGLE_BEAR,
MAUL = WoW120Spells::Druid::Common::MAUL,
IRONFUR = WoW120Spells::Druid::Common::IRONFUR,
THRASH_BEAR = WoW120Spells::Druid::Common::THRASH_BEAR,
SWIPE_BEAR = WoW120Spells::Druid::Common::SWIPE_BEAR,
BERSERK_BEAR = WoW120Spells::Druid::Common::BERSERK_BEAR,
INCARNATION_GUARDIAN = WoW120Spells::Druid::Common::INCARNATION_GUARDIAN,
PULVERIZE = WoW120Spells::Druid::Common::PULVERIZE,
// Balance abilities
WRATH = WoW112Spells::Druid::Common::WRATH,
STARFIRE = WoW112Spells::Druid::Common::STARFIRE,
MOONFIRE = WoW112Spells::Druid::Common::MOONFIRE,
SUNFIRE = WoW112Spells::Druid::Common::SUNFIRE,
STARSURGE = WoW112Spells::Druid::Common::STARSURGE,
STARFALL = WoW112Spells::Druid::Common::STARFALL,
CELESTIAL_ALIGNMENT = WoW112Spells::Druid::Common::CELESTIAL_ALIGNMENT,
INCARNATION_BALANCE = WoW112Spells::Druid::Common::INCARNATION_BALANCE,
WRATH = WoW120Spells::Druid::Common::WRATH,
STARFIRE = WoW120Spells::Druid::Common::STARFIRE,
MOONFIRE = WoW120Spells::Druid::Common::MOONFIRE,
SUNFIRE = WoW120Spells::Druid::Common::SUNFIRE,
STARSURGE = WoW120Spells::Druid::Common::STARSURGE,
STARFALL = WoW120Spells::Druid::Common::STARFALL,
CELESTIAL_ALIGNMENT = WoW120Spells::Druid::Common::CELESTIAL_ALIGNMENT,
INCARNATION_BALANCE = WoW120Spells::Druid::Common::INCARNATION_BALANCE,
// NOTE: LUNAR_STRIKE and SOLAR_WRATH were removed in WoW 11.x
// They were merged with STARFIRE and WRATH respectively
// Restoration abilities
REJUVENATION = WoW112Spells::Druid::Common::REJUVENATION,
REGROWTH = WoW112Spells::Druid::Common::REGROWTH,
LIFEBLOOM = WoW112Spells::Druid::Common::LIFEBLOOM,
HEALING_TOUCH = WoW112Spells::Druid::Common::HEALING_TOUCH,
WILD_GROWTH = WoW112Spells::Druid::Common::WILD_GROWTH,
SWIFTMEND = WoW112Spells::Druid::Common::SWIFTMEND,
TRANQUILITY = WoW112Spells::Druid::Common::TRANQUILITY,
INCARNATION_TREE = WoW112Spells::Druid::Common::INCARNATION_TREE,
NATURES_SWIFTNESS = WoW112Spells::Druid::Common::NATURES_SWIFTNESS,
EFFLORESCENCE = WoW112Spells::Druid::Common::EFFLORESCENCE,
REJUVENATION = WoW120Spells::Druid::Common::REJUVENATION,
REGROWTH = WoW120Spells::Druid::Common::REGROWTH,
LIFEBLOOM = WoW120Spells::Druid::Common::LIFEBLOOM,
HEALING_TOUCH = WoW120Spells::Druid::Common::HEALING_TOUCH,
WILD_GROWTH = WoW120Spells::Druid::Common::WILD_GROWTH,
SWIFTMEND = WoW120Spells::Druid::Common::SWIFTMEND,
TRANQUILITY = WoW120Spells::Druid::Common::TRANQUILITY,
INCARNATION_TREE = WoW120Spells::Druid::Common::INCARNATION_TREE,
NATURES_SWIFTNESS = WoW120Spells::Druid::Common::NATURES_SWIFTNESS,
EFFLORESCENCE = WoW120Spells::Druid::Common::EFFLORESCENCE,
// Utility
REMOVE_CORRUPTION = WoW112Spells::Druid::Common::REMOVE_CORRUPTION,
NATURES_CURE = WoW112Spells::Druid::Common::NATURES_CURE,
REBIRTH = WoW112Spells::Druid::Common::REBIRTH,
INNERVATE = WoW112Spells::Druid::Common::INNERVATE,
STAMPEDING_ROAR = WoW112Spells::Druid::Common::STAMPEDING_ROAR,
MARK_OF_THE_WILD = WoW112Spells::Druid::MARK_OF_THE_WILD
REMOVE_CORRUPTION = WoW120Spells::Druid::Common::REMOVE_CORRUPTION,
NATURES_CURE = WoW120Spells::Druid::Common::NATURES_CURE,
REBIRTH = WoW120Spells::Druid::Common::REBIRTH,
INNERVATE = WoW120Spells::Druid::Common::INNERVATE,
STAMPEDING_ROAR = WoW120Spells::Druid::Common::STAMPEDING_ROAR,
MARK_OF_THE_WILD = WoW120Spells::Druid::MARK_OF_THE_WILD
};
};
@@ -31,8 +31,8 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Druid namespace
#include "../SpellValidation_WoW112.h"
// Central Spell Registry - See WoW120Spells::Druid namespace
#include "../SpellValidation_WoW120.h"
namespace Playerbot
{
@@ -49,29 +49,29 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Feral Druid Spell IDs
// Using central registry: WoW112Spells::Druid and WoW112Spells::Druid::Feral
constexpr uint32 FERAL_SHRED = WoW112Spells::Druid::Feral::SHRED;
constexpr uint32 FERAL_RAKE = WoW112Spells::Druid::Feral::RAKE;
constexpr uint32 FERAL_RIP = WoW112Spells::Druid::Feral::RIP;
constexpr uint32 FERAL_FEROCIOUS_BITE = WoW112Spells::Druid::Feral::FEROCIOUS_BITE;
constexpr uint32 FERAL_SWIPE_CAT = WoW112Spells::Druid::Feral::SWIPE_CAT;
constexpr uint32 FERAL_THRASH_CAT = WoW112Spells::Druid::Feral::THRASH_CAT;
constexpr uint32 FERAL_BRUTAL_SLASH = WoW112Spells::Druid::Feral::BRUTAL_SLASH;
constexpr uint32 FERAL_PRIMAL_WRATH = WoW112Spells::Druid::Feral::PRIMAL_WRATH;
constexpr uint32 FERAL_MOONFIRE_CAT = WoW112Spells::Druid::Feral::MOONFIRE_FERAL;
constexpr uint32 FERAL_TIGERS_FURY = WoW112Spells::Druid::Feral::TIGERS_FURY;
constexpr uint32 FERAL_BERSERK = WoW112Spells::Druid::Feral::BERSERK;
constexpr uint32 FERAL_INCARNATION_KING = WoW112Spells::Druid::Feral::INCARNATION_FERAL;
constexpr uint32 FERAL_CONVOKE = WoW112Spells::Druid::Feral::CONVOKE_FERAL;
constexpr uint32 FERAL_BLOODTALONS = WoW112Spells::Druid::Feral::BLOODTALONS;
constexpr uint32 FERAL_CAT_FORM = WoW112Spells::Druid::CAT_FORM;
constexpr uint32 FERAL_DASH = WoW112Spells::Druid::DASH;
constexpr uint32 FERAL_STAMPEDING_ROAR = WoW112Spells::Druid::STAMPEDING_ROAR;
constexpr uint32 FERAL_SURVIVAL_INSTINCTS = WoW112Spells::Druid::SURVIVAL_INSTINCTS;
constexpr uint32 FERAL_BARKSKIN = WoW112Spells::Druid::BARKSKIN;
constexpr uint32 FERAL_RENEWAL = WoW112Spells::Druid::RENEWAL;
constexpr uint32 FERAL_REGROWTH = WoW112Spells::Druid::REGROWTH;
// WoW 12.0 (The War Within) - Feral Druid Spell IDs
// Using central registry: WoW120Spells::Druid and WoW120Spells::Druid::Feral
constexpr uint32 FERAL_SHRED = WoW120Spells::Druid::Feral::SHRED;
constexpr uint32 FERAL_RAKE = WoW120Spells::Druid::Feral::RAKE;
constexpr uint32 FERAL_RIP = WoW120Spells::Druid::Feral::RIP;
constexpr uint32 FERAL_FEROCIOUS_BITE = WoW120Spells::Druid::Feral::FEROCIOUS_BITE;
constexpr uint32 FERAL_SWIPE_CAT = WoW120Spells::Druid::Feral::SWIPE_CAT;
constexpr uint32 FERAL_THRASH_CAT = WoW120Spells::Druid::Feral::THRASH_CAT;
constexpr uint32 FERAL_BRUTAL_SLASH = WoW120Spells::Druid::Feral::BRUTAL_SLASH;
constexpr uint32 FERAL_PRIMAL_WRATH = WoW120Spells::Druid::Feral::PRIMAL_WRATH;
constexpr uint32 FERAL_MOONFIRE_CAT = WoW120Spells::Druid::Feral::MOONFIRE_FERAL;
constexpr uint32 FERAL_TIGERS_FURY = WoW120Spells::Druid::Feral::TIGERS_FURY;
constexpr uint32 FERAL_BERSERK = WoW120Spells::Druid::Feral::BERSERK;
constexpr uint32 FERAL_INCARNATION_KING = WoW120Spells::Druid::Feral::INCARNATION_FERAL;
constexpr uint32 FERAL_CONVOKE = WoW120Spells::Druid::Feral::CONVOKE_FERAL;
constexpr uint32 FERAL_BLOODTALONS = WoW120Spells::Druid::Feral::BLOODTALONS;
constexpr uint32 FERAL_CAT_FORM = WoW120Spells::Druid::CAT_FORM;
constexpr uint32 FERAL_DASH = WoW120Spells::Druid::DASH;
constexpr uint32 FERAL_STAMPEDING_ROAR = WoW120Spells::Druid::STAMPEDING_ROAR;
constexpr uint32 FERAL_SURVIVAL_INSTINCTS = WoW120Spells::Druid::SURVIVAL_INSTINCTS;
constexpr uint32 FERAL_BARKSKIN = WoW120Spells::Druid::BARKSKIN;
constexpr uint32 FERAL_RENEWAL = WoW120Spells::Druid::RENEWAL;
constexpr uint32 FERAL_REGROWTH = WoW120Spells::Druid::REGROWTH;
// Feral Druid resource type (Energy + Combo Points)
// Uses distinct type to avoid template instantiation conflicts with Rogue specs
@@ -31,8 +31,8 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Druid namespace
#include "../SpellValidation_WoW112.h"
// Central Spell Registry - See WoW120Spells::Druid namespace
#include "../SpellValidation_WoW120.h"
namespace Playerbot
{
@@ -49,26 +49,26 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Guardian Druid Spell IDs
// Using central registry: WoW112Spells::Druid and WoW112Spells::Druid::Guardian
constexpr uint32 GUARDIAN_MANGLE = WoW112Spells::Druid::Guardian::MANGLE;
constexpr uint32 GUARDIAN_THRASH = WoW112Spells::Druid::Guardian::THRASH_BEAR;
constexpr uint32 GUARDIAN_SWIPE = WoW112Spells::Druid::Guardian::SWIPE_BEAR;
constexpr uint32 GUARDIAN_MAUL = WoW112Spells::Druid::Guardian::MAUL;
constexpr uint32 GUARDIAN_IRONFUR = WoW112Spells::Druid::Guardian::IRONFUR;
constexpr uint32 GUARDIAN_FRENZIED_REGENERATION = WoW112Spells::Druid::Guardian::FRENZIED_REGENERATION;
constexpr uint32 GUARDIAN_BARKSKIN = WoW112Spells::Druid::BARKSKIN;
constexpr uint32 GUARDIAN_SURVIVAL_INSTINCTS = WoW112Spells::Druid::SURVIVAL_INSTINCTS;
constexpr uint32 GUARDIAN_PULVERIZE = WoW112Spells::Druid::Guardian::PULVERIZE;
constexpr uint32 GUARDIAN_INCARNATION_BEAR = WoW112Spells::Druid::Guardian::INCARNATION_GUARDIAN;
constexpr uint32 GUARDIAN_BERSERK = WoW112Spells::Druid::Guardian::BERSERK_GUARDIAN;
constexpr uint32 GUARDIAN_MOONFIRE = WoW112Spells::Druid::Guardian::MOONFIRE_BEAR;
constexpr uint32 GUARDIAN_RAGE_OF_SLEEPER = WoW112Spells::Druid::Guardian::RAGE_OF_THE_SLEEPER;
constexpr uint32 GUARDIAN_BEAR_FORM = WoW112Spells::Druid::BEAR_FORM;
constexpr uint32 GUARDIAN_BRISTLING_FUR = WoW112Spells::Druid::Guardian::BRISTLING_FUR;
constexpr uint32 GUARDIAN_RENEWAL = WoW112Spells::Druid::RENEWAL;
constexpr uint32 GUARDIAN_REGROWTH = WoW112Spells::Druid::REGROWTH;
constexpr uint32 GUARDIAN_GROWL = WoW112Spells::Druid::Guardian::GROWL;
// WoW 12.0 (The War Within) - Guardian Druid Spell IDs
// Using central registry: WoW120Spells::Druid and WoW120Spells::Druid::Guardian
constexpr uint32 GUARDIAN_MANGLE = WoW120Spells::Druid::Guardian::MANGLE;
constexpr uint32 GUARDIAN_THRASH = WoW120Spells::Druid::Guardian::THRASH_BEAR;
constexpr uint32 GUARDIAN_SWIPE = WoW120Spells::Druid::Guardian::SWIPE_BEAR;
constexpr uint32 GUARDIAN_MAUL = WoW120Spells::Druid::Guardian::MAUL;
constexpr uint32 GUARDIAN_IRONFUR = WoW120Spells::Druid::Guardian::IRONFUR;
constexpr uint32 GUARDIAN_FRENZIED_REGENERATION = WoW120Spells::Druid::Guardian::FRENZIED_REGENERATION;
constexpr uint32 GUARDIAN_BARKSKIN = WoW120Spells::Druid::BARKSKIN;
constexpr uint32 GUARDIAN_SURVIVAL_INSTINCTS = WoW120Spells::Druid::SURVIVAL_INSTINCTS;
constexpr uint32 GUARDIAN_PULVERIZE = WoW120Spells::Druid::Guardian::PULVERIZE;
constexpr uint32 GUARDIAN_INCARNATION_BEAR = WoW120Spells::Druid::Guardian::INCARNATION_GUARDIAN;
constexpr uint32 GUARDIAN_BERSERK = WoW120Spells::Druid::Guardian::BERSERK_GUARDIAN;
constexpr uint32 GUARDIAN_MOONFIRE = WoW120Spells::Druid::Guardian::MOONFIRE_BEAR;
constexpr uint32 GUARDIAN_RAGE_OF_SLEEPER = WoW120Spells::Druid::Guardian::RAGE_OF_THE_SLEEPER;
constexpr uint32 GUARDIAN_BEAR_FORM = WoW120Spells::Druid::BEAR_FORM;
constexpr uint32 GUARDIAN_BRISTLING_FUR = WoW120Spells::Druid::Guardian::BRISTLING_FUR;
constexpr uint32 GUARDIAN_RENEWAL = WoW120Spells::Druid::RENEWAL;
constexpr uint32 GUARDIAN_REGROWTH = WoW120Spells::Druid::REGROWTH;
constexpr uint32 GUARDIAN_GROWL = WoW120Spells::Druid::Guardian::GROWL;
// Ironfur stacking tracker
class GuardianIronfurTracker
@@ -31,8 +31,8 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Druid namespace
#include "../SpellValidation_WoW112.h"
// Central Spell Registry - See WoW120Spells::Druid namespace
#include "../SpellValidation_WoW120.h"
namespace Playerbot
{
@@ -49,26 +49,26 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Restoration Druid Spell IDs
// Using central registry: WoW112Spells::Druid and WoW112Spells::Druid::Restoration
constexpr uint32 RESTO_REJUVENATION = WoW112Spells::Druid::REJUVENATION;
constexpr uint32 RESTO_REGROWTH = WoW112Spells::Druid::REGROWTH;
constexpr uint32 RESTO_WILD_GROWTH = WoW112Spells::Druid::WILD_GROWTH;
constexpr uint32 RESTO_SWIFTMEND = WoW112Spells::Druid::SWIFTMEND;
constexpr uint32 RESTO_LIFEBLOOM = WoW112Spells::Druid::Restoration::LIFEBLOOM;
constexpr uint32 RESTO_EFFLORESCENCE = WoW112Spells::Druid::Restoration::EFFLORESCENCE;
constexpr uint32 RESTO_TRANQUILITY = WoW112Spells::Druid::Restoration::TRANQUILITY;
constexpr uint32 RESTO_IRONBARK = WoW112Spells::Druid::Restoration::IRONBARK;
constexpr uint32 RESTO_NATURES_SWIFTNESS = WoW112Spells::Druid::Restoration::NATURES_SWIFTNESS;
constexpr uint32 RESTO_CENARION_WARD = WoW112Spells::Druid::Restoration::CENARION_WARD;
constexpr uint32 RESTO_FLOURISH = WoW112Spells::Druid::Restoration::FLOURISH;
constexpr uint32 RESTO_INCARNATION_TREE = WoW112Spells::Druid::Restoration::INCARNATION_TREE;
constexpr uint32 RESTO_NOURISH = WoW112Spells::Druid::Restoration::NOURISH;
constexpr uint32 RESTO_HEALING_TOUCH = WoW112Spells::Druid::Restoration::HEALING_TOUCH;
constexpr uint32 RESTO_INNERVATE = WoW112Spells::Druid::INNERVATE;
constexpr uint32 RESTO_BARKSKIN = WoW112Spells::Druid::BARKSKIN;
constexpr uint32 RESTO_RENEWAL = WoW112Spells::Druid::RENEWAL;
constexpr uint32 RESTO_MOONFIRE = WoW112Spells::Druid::MOONFIRE;
// WoW 12.0 (The War Within) - Restoration Druid Spell IDs
// Using central registry: WoW120Spells::Druid and WoW120Spells::Druid::Restoration
constexpr uint32 RESTO_REJUVENATION = WoW120Spells::Druid::REJUVENATION;
constexpr uint32 RESTO_REGROWTH = WoW120Spells::Druid::REGROWTH;
constexpr uint32 RESTO_WILD_GROWTH = WoW120Spells::Druid::WILD_GROWTH;
constexpr uint32 RESTO_SWIFTMEND = WoW120Spells::Druid::SWIFTMEND;
constexpr uint32 RESTO_LIFEBLOOM = WoW120Spells::Druid::Restoration::LIFEBLOOM;
constexpr uint32 RESTO_EFFLORESCENCE = WoW120Spells::Druid::Restoration::EFFLORESCENCE;
constexpr uint32 RESTO_TRANQUILITY = WoW120Spells::Druid::Restoration::TRANQUILITY;
constexpr uint32 RESTO_IRONBARK = WoW120Spells::Druid::Restoration::IRONBARK;
constexpr uint32 RESTO_NATURES_SWIFTNESS = WoW120Spells::Druid::Restoration::NATURES_SWIFTNESS;
constexpr uint32 RESTO_CENARION_WARD = WoW120Spells::Druid::Restoration::CENARION_WARD;
constexpr uint32 RESTO_FLOURISH = WoW120Spells::Druid::Restoration::FLOURISH;
constexpr uint32 RESTO_INCARNATION_TREE = WoW120Spells::Druid::Restoration::INCARNATION_TREE;
constexpr uint32 RESTO_NOURISH = WoW120Spells::Druid::Restoration::NOURISH;
constexpr uint32 RESTO_HEALING_TOUCH = WoW120Spells::Druid::Restoration::HEALING_TOUCH;
constexpr uint32 RESTO_INNERVATE = WoW120Spells::Druid::INNERVATE;
constexpr uint32 RESTO_BARKSKIN = WoW120Spells::Druid::BARKSKIN;
constexpr uint32 RESTO_RENEWAL = WoW120Spells::Druid::RENEWAL;
constexpr uint32 RESTO_MOONFIRE = WoW120Spells::Druid::MOONFIRE;
// Mana resource is defined in CombatSpecializationTemplates.h as uint32
// No custom ManaResource struct needed - use ManaResource (uint32 typedef)
@@ -10,7 +10,7 @@
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "Group.h"
#include "Log.h"
@@ -34,29 +34,29 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// AUGMENTATION EVOKER SPELL IDs (WoW 11.2 - The War Within)
// See central registry: WoW112Spells::Evoker and WoW112Spells::Evoker::Augmentation
// AUGMENTATION EVOKER SPELL IDs (WoW 12.0 - The War Within)
// See central registry: WoW120Spells::Evoker and WoW120Spells::Evoker::Augmentation
// ============================================================================
enum AugmentationEvokerSpells
{
// Core Buffs
EBON_MIGHT = WoW112Spells::Evoker::Augmentation::EBON_MIGHT,
PRESCIENCE = WoW112Spells::Evoker::Augmentation::PRESCIENCE,
BLISTERING_SCALES = WoW112Spells::Evoker::Augmentation::BLISTERING_SCALES,
EBON_MIGHT = WoW120Spells::Evoker::Augmentation::EBON_MIGHT,
PRESCIENCE = WoW120Spells::Evoker::Augmentation::PRESCIENCE,
BLISTERING_SCALES = WoW120Spells::Evoker::Augmentation::BLISTERING_SCALES,
// Empowered Abilities
BREATH_OF_EONS = WoW112Spells::Evoker::Augmentation::BREATH_OF_EONS,
BREATH_OF_EONS = WoW120Spells::Evoker::Augmentation::BREATH_OF_EONS,
// Essence Generation
AZURE_STRIKE_AUG = WoW112Spells::Evoker::AZURE_STRIKE,
ERUPTION = WoW112Spells::Evoker::Augmentation::ERUPTION,
AZURE_STRIKE_AUG = WoW120Spells::Evoker::AZURE_STRIKE,
ERUPTION = WoW120Spells::Evoker::Augmentation::ERUPTION,
// Utility (shared with other Evoker specs)
AUG_OBSIDIAN_SCALES = WoW112Spells::Evoker::OBSIDIAN_SCALES,
AUG_RENEWING_BLAZE = WoW112Spells::Evoker::RENEWING_BLAZE,
AUG_QUELL = WoW112Spells::Evoker::QUELL,
AUG_HOVER = WoW112Spells::Evoker::HOVER
AUG_OBSIDIAN_SCALES = WoW120Spells::Evoker::OBSIDIAN_SCALES,
AUG_RENEWING_BLAZE = WoW120Spells::Evoker::RENEWING_BLAZE,
AUG_QUELL = WoW120Spells::Evoker::QUELL,
AUG_HOVER = WoW120Spells::Evoker::HOVER
};
struct EssenceResourceAug
@@ -14,7 +14,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -39,49 +39,49 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// DEVASTATION EVOKER SPELL IDs (WoW 11.2 - The War Within)
// See central registry: WoW112Spells::Evoker and WoW112Spells::Evoker::Devastation
// DEVASTATION EVOKER SPELL IDs (WoW 12.0 - The War Within)
// See central registry: WoW120Spells::Evoker and WoW120Spells::Evoker::Devastation
// ============================================================================
enum DevastationEvokerSpells
{
// Essence Generators
AZURE_STRIKE = WoW112Spells::Evoker::AZURE_STRIKE,
LIVING_FLAME = WoW112Spells::Evoker::LIVING_FLAME,
AZURE_STRIKE = WoW120Spells::Evoker::AZURE_STRIKE,
LIVING_FLAME = WoW120Spells::Evoker::LIVING_FLAME,
// Essence Spenders (Empowered)
FIRE_BREATH = WoW112Spells::Evoker::FIRE_BREATH,
ETERNITY_SURGE = WoW112Spells::Evoker::Devastation::ETERNITY_SURGE,
FIRE_BREATH = WoW120Spells::Evoker::FIRE_BREATH,
ETERNITY_SURGE = WoW120Spells::Evoker::Devastation::ETERNITY_SURGE,
// Direct Damage
DISINTEGRATE = WoW112Spells::Evoker::DISINTEGRATE,
PYRE = WoW112Spells::Evoker::Devastation::PYRE,
SHATTERING_STAR = WoW112Spells::Evoker::Devastation::SHATTERING_STAR,
DISINTEGRATE = WoW120Spells::Evoker::DISINTEGRATE,
PYRE = WoW120Spells::Evoker::Devastation::PYRE,
SHATTERING_STAR = WoW120Spells::Evoker::Devastation::SHATTERING_STAR,
// Major Cooldowns
DRAGONRAGE = WoW112Spells::Evoker::Devastation::DRAGONRAGE,
DEEP_BREATH = WoW112Spells::Evoker::DEEP_BREATH,
TIP_THE_SCALES = WoW112Spells::Evoker::Devastation::TIP_THE_SCALES,
DRAGONRAGE = WoW120Spells::Evoker::Devastation::DRAGONRAGE,
DEEP_BREATH = WoW120Spells::Evoker::DEEP_BREATH,
TIP_THE_SCALES = WoW120Spells::Evoker::Devastation::TIP_THE_SCALES,
// Procs and Buffs
ESSENCE_BURST = WoW112Spells::Evoker::Devastation::ESSENSE_BURST,
BURNOUT = WoW112Spells::Evoker::Devastation::BURNOUT,
IRIDESCENCE_BLUE = WoW112Spells::Evoker::Devastation::IRIDESCENCE_BLUE,
IRIDESCENCE_RED = WoW112Spells::Evoker::Devastation::IRIDESCENCE_RED,
ESSENCE_BURST = WoW120Spells::Evoker::Devastation::ESSENSE_BURST,
BURNOUT = WoW120Spells::Evoker::Devastation::BURNOUT,
IRIDESCENCE_BLUE = WoW120Spells::Evoker::Devastation::IRIDESCENCE_BLUE,
IRIDESCENCE_RED = WoW120Spells::Evoker::Devastation::IRIDESCENCE_RED,
// Utility
HOVER = WoW112Spells::Evoker::HOVER,
OBSIDIAN_SCALES = WoW112Spells::Evoker::OBSIDIAN_SCALES,
RENEWING_BLAZE = WoW112Spells::Evoker::RENEWING_BLAZE,
QUELL = WoW112Spells::Evoker::QUELL,
TAIL_SWIPE = WoW112Spells::Evoker::TAIL_SWIPE,
WING_BUFFET = WoW112Spells::Evoker::WING_BUFFET,
HOVER = WoW120Spells::Evoker::HOVER,
OBSIDIAN_SCALES = WoW120Spells::Evoker::OBSIDIAN_SCALES,
RENEWING_BLAZE = WoW120Spells::Evoker::RENEWING_BLAZE,
QUELL = WoW120Spells::Evoker::QUELL,
TAIL_SWIPE = WoW120Spells::Evoker::TAIL_SWIPE,
WING_BUFFET = WoW120Spells::Evoker::WING_BUFFET,
// Talents
ANIMOSITY = WoW112Spells::Evoker::Devastation::ANIMOSITY,
CATALYZE = WoW112Spells::Evoker::Devastation::CATALYZE,
FEED_THE_FLAMES = WoW112Spells::Evoker::Devastation::FEED_THE_FLAMES,
ONYX_LEGACY = WoW112Spells::Evoker::Devastation::ONYX_LEGACY
ANIMOSITY = WoW120Spells::Evoker::Devastation::ANIMOSITY,
CATALYZE = WoW120Spells::Evoker::Devastation::CATALYZE,
FEED_THE_FLAMES = WoW120Spells::Evoker::Devastation::FEED_THE_FLAMES,
ONYX_LEGACY = WoW120Spells::Evoker::Devastation::ONYX_LEGACY
};
// Essence resource type for Devastation Evoker
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Threading/LockHierarchy.h"
#include "Position.h"
#include <unordered_map>
@@ -22,12 +22,12 @@
namespace Playerbot
{
// Namespace aliases for Evoker spells from central registry (WoW 11.2)
namespace EvokerSpells = WoW112Spells::Evoker;
namespace EvokerDevastation = WoW112Spells::Evoker::Devastation;
namespace EvokerPreservation = WoW112Spells::Evoker::Preservation;
namespace EvokerAugmentation = WoW112Spells::Evoker::Augmentation;
namespace EvokerCommon = WoW112Spells::Evoker::Common;
// Namespace aliases for Evoker spells from central registry (WoW 12.0)
namespace EvokerSpells = WoW120Spells::Evoker;
namespace EvokerDevastation = WoW120Spells::Evoker::Devastation;
namespace EvokerPreservation = WoW120Spells::Evoker::Preservation;
namespace EvokerAugmentation = WoW120Spells::Evoker::Augmentation;
namespace EvokerCommon = WoW120Spells::Evoker::Common;
// Forward declarations for specialization classes (QW-4 FIX)
class DevastationEvokerRefactored;
@@ -134,56 +134,56 @@ public:
explicit EvokerAI(Player* bot);
~EvokerAI();
// Evoker Spell IDs - Using central registry (WoW 11.2)
// Evoker Spell IDs - Using central registry (WoW 12.0)
enum EvokerSpells
{
// Basic abilities
AZURE_STRIKE = WoW112Spells::Evoker::Common::AZURE_STRIKE,
LIVING_FLAME = WoW112Spells::Evoker::Common::LIVING_FLAME,
HOVER = WoW112Spells::Evoker::HOVER,
SOAR = WoW112Spells::Evoker::SOAR,
AZURE_STRIKE = WoW120Spells::Evoker::Common::AZURE_STRIKE,
LIVING_FLAME = WoW120Spells::Evoker::Common::LIVING_FLAME,
HOVER = WoW120Spells::Evoker::HOVER,
SOAR = WoW120Spells::Evoker::SOAR,
// Devastation abilities
ETERNITYS_SURGE = WoW112Spells::Evoker::Common::ETERNITYS_SURGE,
DISINTEGRATE = WoW112Spells::Evoker::Common::DISINTEGRATE,
PYRE = WoW112Spells::Evoker::Devastation::PYRE,
DEEP_BREATH = WoW112Spells::Evoker::Common::DEEP_BREATH,
FIRE_BREATH = WoW112Spells::Evoker::Common::FIRE_BREATH,
AZURE_STRIKE_DEVASTATION = WoW112Spells::Evoker::Common::AZURE_STRIKE,
ETERNITYS_SURGE = WoW120Spells::Evoker::Common::ETERNITYS_SURGE,
DISINTEGRATE = WoW120Spells::Evoker::Common::DISINTEGRATE,
PYRE = WoW120Spells::Evoker::Devastation::PYRE,
DEEP_BREATH = WoW120Spells::Evoker::Common::DEEP_BREATH,
FIRE_BREATH = WoW120Spells::Evoker::Common::FIRE_BREATH,
AZURE_STRIKE_DEVASTATION = WoW120Spells::Evoker::Common::AZURE_STRIKE,
// Preservation abilities
DREAM_BREATH = WoW112Spells::Evoker::Common::DREAM_BREATH,
SPIRIT_BLOOM = WoW112Spells::Evoker::Common::SPIRITBLOOM,
SPIRITBLOOM = WoW112Spells::Evoker::Common::SPIRITBLOOM,
EMERALD_BLOSSOM = WoW112Spells::Evoker::Common::EMERALD_BLOSSOM,
VERDANT_EMBRACE = WoW112Spells::Evoker::Common::VERDANT_EMBRACE,
LIFEBIND = WoW112Spells::Evoker::Common::LIFEBIND,
EMERALD_COMMUNION = WoW112Spells::Evoker::Common::EMERALD_COMMUNION,
TEMPORAL_ANOMALY = WoW112Spells::Evoker::Common::TEMPORAL_ANOMALY,
DREAM_BREATH = WoW120Spells::Evoker::Common::DREAM_BREATH,
SPIRIT_BLOOM = WoW120Spells::Evoker::Common::SPIRITBLOOM,
SPIRITBLOOM = WoW120Spells::Evoker::Common::SPIRITBLOOM,
EMERALD_BLOSSOM = WoW120Spells::Evoker::Common::EMERALD_BLOSSOM,
VERDANT_EMBRACE = WoW120Spells::Evoker::Common::VERDANT_EMBRACE,
LIFEBIND = WoW120Spells::Evoker::Common::LIFEBIND,
EMERALD_COMMUNION = WoW120Spells::Evoker::Common::EMERALD_COMMUNION,
TEMPORAL_ANOMALY = WoW120Spells::Evoker::Common::TEMPORAL_ANOMALY,
// Augmentation abilities
EBON_MIGHT = WoW112Spells::Evoker::Common::EBON_MIGHT,
BREATH_OF_EONS = WoW112Spells::Evoker::Common::BREATH_OF_EONS,
PRESCIENCE = WoW112Spells::Evoker::Common::PRESCIENCE,
BLISTERING_SCALES = WoW112Spells::Evoker::Common::BLISTERING_SCALES,
EBON_MIGHT = WoW120Spells::Evoker::Common::EBON_MIGHT,
BREATH_OF_EONS = WoW120Spells::Evoker::Common::BREATH_OF_EONS,
PRESCIENCE = WoW120Spells::Evoker::Common::PRESCIENCE,
BLISTERING_SCALES = WoW120Spells::Evoker::Common::BLISTERING_SCALES,
// Utility abilities
BLESSING_OF_THE_BRONZE = WoW112Spells::Evoker::Common::BLESSING_OF_THE_BRONZE,
LANDSLIDE = WoW112Spells::Evoker::Common::LANDSLIDE,
TAIL_SWIPE = WoW112Spells::Evoker::Common::TAIL_SWIPE,
WING_BUFFET = WoW112Spells::Evoker::Common::WING_BUFFET,
SLEEP_WALK = WoW112Spells::Evoker::Common::SLEEP_WALK,
SPELL_QUELL = WoW112Spells::Evoker::Common::QUELL,
SPELL_DRAGONRAGE = WoW112Spells::Evoker::Common::DRAGONRAGE,
BLESSING_OF_THE_BRONZE = WoW120Spells::Evoker::Common::BLESSING_OF_THE_BRONZE,
LANDSLIDE = WoW120Spells::Evoker::Common::LANDSLIDE,
TAIL_SWIPE = WoW120Spells::Evoker::Common::TAIL_SWIPE,
WING_BUFFET = WoW120Spells::Evoker::Common::WING_BUFFET,
SLEEP_WALK = WoW120Spells::Evoker::Common::SLEEP_WALK,
SPELL_QUELL = WoW120Spells::Evoker::Common::QUELL,
SPELL_DRAGONRAGE = WoW120Spells::Evoker::Common::DRAGONRAGE,
// Defensive abilities
OBSIDIAN_SCALES = WoW112Spells::Evoker::OBSIDIAN_SCALES,
RENEWING_BLAZE = WoW112Spells::Evoker::RENEWING_BLAZE,
RESCUE = WoW112Spells::Evoker::RESCUE,
OBSIDIAN_SCALES = WoW120Spells::Evoker::OBSIDIAN_SCALES,
RENEWING_BLAZE = WoW120Spells::Evoker::RENEWING_BLAZE,
RESCUE = WoW120Spells::Evoker::RESCUE,
// Movement abilities
DEEP_BREATH_MOVEMENT = WoW112Spells::Evoker::Common::DEEP_BREATH,
SOAR_MOVEMENT = WoW112Spells::Evoker::SOAR,
DEEP_BREATH_MOVEMENT = WoW120Spells::Evoker::Common::DEEP_BREATH,
SOAR_MOVEMENT = WoW120Spells::Evoker::SOAR,
// Additional constants - Using central registry where available
ECHO = EvokerPreservation::ECHO, // Preservation echo mechanic (364343)
@@ -14,7 +14,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "../../Services/HealingTargetSelector.h"
#include "Player.h"
#include "SpellMgr.h"
@@ -41,55 +41,55 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// PRESERVATION EVOKER SPELL IDs (WoW 11.2 - The War Within)
// See central registry: WoW112Spells::Evoker and WoW112Spells::Evoker::Preservation
// PRESERVATION EVOKER SPELL IDs (WoW 12.0 - The War Within)
// See central registry: WoW120Spells::Evoker and WoW120Spells::Evoker::Preservation
// ============================================================================
enum PreservationEvokerSpells
{
// Direct Heals
EMERALD_BLOSSOM = WoW112Spells::Evoker::EMERALD_BLOSSOM,
VERDANT_EMBRACE = WoW112Spells::Evoker::VERDANT_EMBRACE,
LIVING_FLAME_HEAL = WoW112Spells::Evoker::Preservation::LIVING_FLAME_HEAL,
EMERALD_BLOSSOM = WoW120Spells::Evoker::EMERALD_BLOSSOM,
VERDANT_EMBRACE = WoW120Spells::Evoker::VERDANT_EMBRACE,
LIVING_FLAME_HEAL = WoW120Spells::Evoker::Preservation::LIVING_FLAME_HEAL,
// Empowered Heals
DREAM_BREATH = WoW112Spells::Evoker::Preservation::DREAM_BREATH,
SPIRIT_BLOOM = WoW112Spells::Evoker::Preservation::SPIRITBLOOM,
DREAM_BREATH = WoW120Spells::Evoker::Preservation::DREAM_BREATH,
SPIRIT_BLOOM = WoW120Spells::Evoker::Preservation::SPIRITBLOOM,
// Echo System
ECHO = WoW112Spells::Evoker::Preservation::ECHO,
REVERSION = WoW112Spells::Evoker::Preservation::REVERSION,
ECHO = WoW120Spells::Evoker::Preservation::ECHO,
REVERSION = WoW120Spells::Evoker::Preservation::REVERSION,
// Major Cooldowns
EMERALD_COMMUNION = WoW112Spells::Evoker::Preservation::EMERALD_COMMUNION,
TEMPORAL_ANOMALY = WoW112Spells::Evoker::Preservation::TEMPORAL_ANOMALY,
REWIND = WoW112Spells::Evoker::Preservation::REWIND,
EMERALD_COMMUNION = WoW120Spells::Evoker::Preservation::EMERALD_COMMUNION,
TEMPORAL_ANOMALY = WoW120Spells::Evoker::Preservation::TEMPORAL_ANOMALY,
REWIND = WoW120Spells::Evoker::Preservation::REWIND,
// Utility
LIFEBIND = WoW112Spells::Evoker::Preservation::LIFEBIND,
BLESSING_BRONZE = WoW112Spells::Evoker::BLESSING_OF_THE_BRONZE,
TIME_DILATION = WoW112Spells::Evoker::Preservation::TIME_DILATION,
STASIS = WoW112Spells::Evoker::Preservation::STASIS,
RESCUE = WoW112Spells::Evoker::RESCUE,
LIFEBIND = WoW120Spells::Evoker::Preservation::LIFEBIND,
BLESSING_BRONZE = WoW120Spells::Evoker::BLESSING_OF_THE_BRONZE,
TIME_DILATION = WoW120Spells::Evoker::Preservation::TIME_DILATION,
STASIS = WoW120Spells::Evoker::Preservation::STASIS,
RESCUE = WoW120Spells::Evoker::RESCUE,
// Defensive (shared with other Evoker specs)
PRES_OBSIDIAN_SCALES = WoW112Spells::Evoker::OBSIDIAN_SCALES,
PRES_RENEWING_BLAZE = WoW112Spells::Evoker::RENEWING_BLAZE,
TWIN_GUARDIAN = WoW112Spells::Evoker::Preservation::TWIN_GUARDIAN,
PRES_OBSIDIAN_SCALES = WoW120Spells::Evoker::OBSIDIAN_SCALES,
PRES_RENEWING_BLAZE = WoW120Spells::Evoker::RENEWING_BLAZE,
TWIN_GUARDIAN = WoW120Spells::Evoker::Preservation::TWIN_GUARDIAN,
// Essence Generation
AZURE_STRIKE_PRES = WoW112Spells::Evoker::AZURE_STRIKE,
DISINTEGRATE_PRES = WoW112Spells::Evoker::DISINTEGRATE,
AZURE_STRIKE_PRES = WoW120Spells::Evoker::AZURE_STRIKE,
DISINTEGRATE_PRES = WoW120Spells::Evoker::DISINTEGRATE,
// Procs
ESSENCE_BURST_PRES = WoW112Spells::Evoker::Preservation::ESSENCE_BURST_PRES,
CALL_OF_YSERA = WoW112Spells::Evoker::Preservation::CALL_OF_YSERA,
ESSENCE_BURST_PRES = WoW120Spells::Evoker::Preservation::ESSENCE_BURST_PRES,
CALL_OF_YSERA = WoW120Spells::Evoker::Preservation::CALL_OF_YSERA,
// Talents
FIELD_OF_DREAMS = WoW112Spells::Evoker::Preservation::FIELD_OF_DREAMS,
FLOW_STATE = WoW112Spells::Evoker::Preservation::FLOW_STATE,
LIFEFORCE_MENDER = WoW112Spells::Evoker::Preservation::LIFEFORCE_MENDER,
TEMPORAL_COMPRESSION = WoW112Spells::Evoker::Preservation::TEMPORAL_COMPRESSION
FIELD_OF_DREAMS = WoW120Spells::Evoker::Preservation::FIELD_OF_DREAMS,
FLOW_STATE = WoW120Spells::Evoker::Preservation::FLOW_STATE,
LIFEFORCE_MENDER = WoW120Spells::Evoker::Preservation::LIFEFORCE_MENDER,
TEMPORAL_COMPRESSION = WoW120Spells::Evoker::Preservation::TEMPORAL_COMPRESSION
};
// Essence resource (same as Devastation)
@@ -18,7 +18,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Pet.h"
#include "PetDefines.h"
#include "MotionMaster.h"
@@ -53,45 +53,45 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// BEAST MASTERY HUNTER SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// BEAST MASTERY HUNTER SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
enum BeastMasterySpells
{
// Core Abilities - Using central registry: WoW112Spells::Hunter::BeastMastery
SPELL_KILL_COMMAND = WoW112Spells::Hunter::BeastMastery::KILL_COMMAND,
SPELL_BARBED_SHOT = WoW112Spells::Hunter::BeastMastery::BARBED_SHOT,
SPELL_COBRA_SHOT = WoW112Spells::Hunter::BeastMastery::COBRA_SHOT,
SPELL_BESTIAL_WRATH = WoW112Spells::Hunter::BeastMastery::BESTIAL_WRATH,
SPELL_ASPECT_OF_THE_WILD = WoW112Spells::Hunter::BeastMastery::ASPECT_OF_THE_WILD,
SPELL_MULTISHOT = WoW112Spells::Hunter::BeastMastery::MULTI_SHOT_BM,
// Core Abilities - Using central registry: WoW120Spells::Hunter::BeastMastery
SPELL_KILL_COMMAND = WoW120Spells::Hunter::BeastMastery::KILL_COMMAND,
SPELL_BARBED_SHOT = WoW120Spells::Hunter::BeastMastery::BARBED_SHOT,
SPELL_COBRA_SHOT = WoW120Spells::Hunter::BeastMastery::COBRA_SHOT,
SPELL_BESTIAL_WRATH = WoW120Spells::Hunter::BeastMastery::BESTIAL_WRATH,
SPELL_ASPECT_OF_THE_WILD = WoW120Spells::Hunter::BeastMastery::ASPECT_OF_THE_WILD,
SPELL_MULTISHOT = WoW120Spells::Hunter::BeastMastery::MULTI_SHOT_BM,
// Pet Management - Using central registry: WoW112Spells::Hunter
SPELL_CALL_PET_1 = WoW112Spells::Hunter::CALL_PET_1,
SPELL_MEND_PET = WoW112Spells::Hunter::MEND_PET,
SPELL_REVIVE_PET = WoW112Spells::Hunter::REVIVE_PET,
SPELL_PET_ATTACK = WoW112Spells::Hunter::PET_ATTACK,
SPELL_PET_FOLLOW = WoW112Spells::Hunter::PET_FOLLOW,
SPELL_PET_STAY = WoW112Spells::Hunter::PET_STAY,
// Pet Management - Using central registry: WoW120Spells::Hunter
SPELL_CALL_PET_1 = WoW120Spells::Hunter::CALL_PET_1,
SPELL_MEND_PET = WoW120Spells::Hunter::MEND_PET,
SPELL_REVIVE_PET = WoW120Spells::Hunter::REVIVE_PET,
SPELL_PET_ATTACK = WoW120Spells::Hunter::PET_ATTACK,
SPELL_PET_FOLLOW = WoW120Spells::Hunter::PET_FOLLOW,
SPELL_PET_STAY = WoW120Spells::Hunter::PET_STAY,
// Talents/Special - Using central registry: WoW112Spells::Hunter::BeastMastery
SPELL_DIRE_BEAST = WoW112Spells::Hunter::BeastMastery::DIRE_BEAST,
SPELL_BLOODSHED = WoW112Spells::Hunter::BeastMastery::BLOODSHED,
SPELL_WILD_CALL = WoW112Spells::Hunter::BeastMastery::WILD_CALL,
SPELL_ANIMAL_COMPANION = WoW112Spells::Hunter::BeastMastery::ANIMAL_COMPANION,
// Talents/Special - Using central registry: WoW120Spells::Hunter::BeastMastery
SPELL_DIRE_BEAST = WoW120Spells::Hunter::BeastMastery::DIRE_BEAST,
SPELL_BLOODSHED = WoW120Spells::Hunter::BeastMastery::BLOODSHED,
SPELL_WILD_CALL = WoW120Spells::Hunter::BeastMastery::WILD_CALL,
SPELL_ANIMAL_COMPANION = WoW120Spells::Hunter::BeastMastery::ANIMAL_COMPANION,
// Buffs/Debuffs - Using central registry: WoW112Spells::Hunter
SPELL_HUNTERS_MARK = WoW112Spells::Hunter::HUNTERS_MARK,
SPELL_ASPECT_OF_CHEETAH = WoW112Spells::Hunter::ASPECT_OF_THE_CHEETAH,
SPELL_EXHILARATION = WoW112Spells::Hunter::EXHILARATION,
SPELL_PET_FRENZY = WoW112Spells::Hunter::BeastMastery::PET_FRENZY,
// Buffs/Debuffs - Using central registry: WoW120Spells::Hunter
SPELL_HUNTERS_MARK = WoW120Spells::Hunter::HUNTERS_MARK,
SPELL_ASPECT_OF_CHEETAH = WoW120Spells::Hunter::ASPECT_OF_THE_CHEETAH,
SPELL_EXHILARATION = WoW120Spells::Hunter::EXHILARATION,
SPELL_PET_FRENZY = WoW120Spells::Hunter::BeastMastery::PET_FRENZY,
// Utility - Using central registry: WoW112Spells::Hunter
SPELL_COUNTER_SHOT = WoW112Spells::Hunter::COUNTER_SHOT,
SPELL_TRANQUILIZING_SHOT = WoW112Spells::Hunter::TRANQUILIZING_SHOT,
SPELL_TAR_TRAP = WoW112Spells::Hunter::TAR_TRAP,
SPELL_FREEZING_TRAP = WoW112Spells::Hunter::FREEZING_TRAP
// Utility - Using central registry: WoW120Spells::Hunter
SPELL_COUNTER_SHOT = WoW120Spells::Hunter::COUNTER_SHOT,
SPELL_TRANQUILIZING_SHOT = WoW120Spells::Hunter::TRANQUILIZING_SHOT,
SPELL_TAR_TRAP = WoW120Spells::Hunter::TAR_TRAP,
SPELL_FREEZING_TRAP = WoW120Spells::Hunter::FREEZING_TRAP
};
/**
@@ -764,7 +764,7 @@ private:
void UpdatePetManagement() { _petManager.EnsurePetActive(GetBot()->GetVictim()); }
void SummonPet() { _petManager.SummonPet(); }
void MendPetIfNeeded() { _petManager.MendPet(); }
void FeedPetIfNeeded() { /* Feeding not implemented in WoW 11.2 */ }
void FeedPetIfNeeded() { /* Feeding not implemented in WoW 12.0 */ }
bool HasActivePet() const { return _petManager.HasActivePet(); }
::Playerbot::PetInfo GetPetInfo() const
{
@@ -369,7 +369,7 @@ bool HunterAI::HandlePositioning(::Unit* target)
}
// Note: Wing Clip was removed in WoW 11.2
// Note: Wing Clip was removed in WoW 12.0
// Movement will be handled by BotAI movement strategies
Position optimalPos = _combatBehaviors->GetOptimalPosition();
@@ -1277,7 +1277,7 @@ bool HunterAI::ShouldPlaceTarTrap() const
if (!CanPlaceTrap())
return false;
// Place tar trap for slowing multiple enemies (replaces Snake Trap in WoW 11.2)
// Place tar trap for slowing multiple enemies (replaces Snake Trap in WoW 12.0)
return GetNearbyEnemyCount(10.0f) >= 2;
}
@@ -1297,7 +1297,7 @@ uint32 HunterAI::GetBestTrapForSituation() const
return FREEZING_TRAP;
if (ShouldPlaceExplosiveTrap())
return EXPLOSIVE_TRAP;
// TAR_TRAP replaces Snake Trap in WoW 11.2
// TAR_TRAP replaces Snake Trap in WoW 12.0
return TAR_TRAP;
}
// Range management implementation
@@ -1457,13 +1457,13 @@ void HunterAI::ManageAspects()
void HunterAI::UpdateTracking()
{
// Note: Tracking spells were removed in WoW 11.2
// Note: Tracking spells were removed in WoW 12.0
// This function is kept for interface compatibility but does nothing
}
bool HunterAI::HasAnyAspect()
{
// WoW 11.2 only has these aspects
// WoW 12.0 only has these aspects
return HasAura(ASPECT_OF_THE_WILD) ||
HasAura(ASPECT_OF_THE_CHEETAH) ||
HasAura(ASPECT_OF_THE_TURTLE);
@@ -1471,7 +1471,7 @@ bool HunterAI::HasAnyAspect()
uint32 HunterAI::GetCurrentAspect()
{
// WoW 11.2 aspects only
// WoW 12.0 aspects only
if (HasAura(ASPECT_OF_THE_WILD)) return ASPECT_OF_THE_WILD;
if (HasAura(ASPECT_OF_THE_CHEETAH)) return ASPECT_OF_THE_CHEETAH;
if (HasAura(ASPECT_OF_THE_TURTLE)) return ASPECT_OF_THE_TURTLE;
@@ -1480,7 +1480,7 @@ uint32 HunterAI::GetCurrentAspect()
void HunterAI::SwitchToCombatAspect()
{
// WoW 11.2: Aspect of the Wild is the primary combat aspect
// WoW 12.0: Aspect of the Wild is the primary combat aspect
if (!HasAura(ASPECT_OF_THE_WILD) && _bot->HasSpell(ASPECT_OF_THE_WILD))
{
CastSpell(ASPECT_OF_THE_WILD);
@@ -1490,7 +1490,7 @@ void HunterAI::SwitchToCombatAspect()
void HunterAI::SwitchToMovementAspect()
{
// WoW 11.2: Aspect of the Cheetah is the movement aspect (Aspect of the Pack was removed)
// WoW 12.0: Aspect of the Cheetah is the movement aspect (Aspect of the Pack was removed)
if (!HasAura(ASPECT_OF_THE_CHEETAH) && _bot->HasSpell(ASPECT_OF_THE_CHEETAH))
{
CastSpell(ASPECT_OF_THE_CHEETAH);
@@ -1508,7 +1508,7 @@ uint32 HunterAI::GetOptimalAspect() const
{
if (_bot->IsInCombat())
{
// WoW 11.2: Aspect of the Wild is the combat aspect
// WoW 12.0: Aspect of the Wild is the combat aspect
// Note: Aspect of the Viper was removed - focus regenerates passively now
if (_bot->HasSpell(ASPECT_OF_THE_WILD))
return ASPECT_OF_THE_WILD;
@@ -11,7 +11,7 @@
#define TRINITY_HUNTERPLAYERAI_H
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "../../Combat/CombatBehaviorIntegration.h"
#include "Position.h"
#include "ObjectGuid.h"
@@ -267,55 +267,55 @@ private:
public:
// Hunter Spell IDs
// Hunter Spell IDs - Using central registry (WoW 11.2)
// Hunter Spell IDs - Using central registry (WoW 12.0)
enum HunterSpells
{
// Shots and Attacks
STEADY_SHOT = WoW112Spells::Hunter::Common::STEADY_SHOT,
ARCANE_SHOT = WoW112Spells::Hunter::Common::ARCANE_SHOT,
MULTI_SHOT = WoW112Spells::Hunter::Common::MULTI_SHOT,
AIMED_SHOT = WoW112Spells::Hunter::Common::AIMED_SHOT,
KILL_SHOT = WoW112Spells::Hunter::Common::KILL_SHOT,
EXPLOSIVE_SHOT = WoW112Spells::Hunter::Common::EXPLOSIVE_SHOT,
SERPENT_STING = WoW112Spells::Hunter::Common::SERPENT_STING,
CONCUSSIVE_SHOT = WoW112Spells::Hunter::Common::CONCUSSIVE_SHOT,
STEADY_SHOT = WoW120Spells::Hunter::Common::STEADY_SHOT,
ARCANE_SHOT = WoW120Spells::Hunter::Common::ARCANE_SHOT,
MULTI_SHOT = WoW120Spells::Hunter::Common::MULTI_SHOT,
AIMED_SHOT = WoW120Spells::Hunter::Common::AIMED_SHOT,
KILL_SHOT = WoW120Spells::Hunter::Common::KILL_SHOT,
EXPLOSIVE_SHOT = WoW120Spells::Hunter::Common::EXPLOSIVE_SHOT,
SERPENT_STING = WoW120Spells::Hunter::Common::SERPENT_STING,
CONCUSSIVE_SHOT = WoW120Spells::Hunter::Common::CONCUSSIVE_SHOT,
// Pet Abilities
KILL_COMMAND = WoW112Spells::Hunter::Common::KILL_COMMAND,
MEND_PET = WoW112Spells::Hunter::Common::MEND_PET,
REVIVE_PET = WoW112Spells::Hunter::Common::REVIVE_PET,
CALL_PET = WoW112Spells::Hunter::Common::CALL_PET,
MASTER_S_CALL = WoW112Spells::Hunter::Common::MASTERS_CALL,
KILL_COMMAND = WoW120Spells::Hunter::Common::KILL_COMMAND,
MEND_PET = WoW120Spells::Hunter::Common::MEND_PET,
REVIVE_PET = WoW120Spells::Hunter::Common::REVIVE_PET,
CALL_PET = WoW120Spells::Hunter::Common::CALL_PET,
MASTER_S_CALL = WoW120Spells::Hunter::Common::MASTERS_CALL,
// Traps
FREEZING_TRAP = WoW112Spells::Hunter::Common::FREEZING_TRAP,
EXPLOSIVE_TRAP = WoW112Spells::Hunter::Common::EXPLOSIVE_TRAP,
TAR_TRAP = WoW112Spells::Hunter::Common::TAR_TRAP,
FREEZING_TRAP = WoW120Spells::Hunter::Common::FREEZING_TRAP,
EXPLOSIVE_TRAP = WoW120Spells::Hunter::Common::EXPLOSIVE_TRAP,
TAR_TRAP = WoW120Spells::Hunter::Common::TAR_TRAP,
// Defensive/Utility
HUNTER_DISENGAGE = WoW112Spells::Hunter::Common::DISENGAGE,
FEIGN_DEATH = WoW112Spells::Hunter::Common::FEIGN_DEATH,
DETERRENCE = WoW112Spells::Hunter::Common::ASPECT_OF_THE_TURTLE, // Renamed to Aspect of the Turtle in 11.2
EXHILARATION = WoW112Spells::Hunter::Common::EXHILARATION,
SCATTER_SHOT = WoW112Spells::Hunter::Common::SCATTER_SHOT,
COUNTER_SHOT = WoW112Spells::Hunter::Common::COUNTER_SHOT,
HUNTER_DISENGAGE = WoW120Spells::Hunter::Common::DISENGAGE,
FEIGN_DEATH = WoW120Spells::Hunter::Common::FEIGN_DEATH,
DETERRENCE = WoW120Spells::Hunter::Common::ASPECT_OF_THE_TURTLE, // Renamed to Aspect of the Turtle in 11.2
EXHILARATION = WoW120Spells::Hunter::Common::EXHILARATION,
SCATTER_SHOT = WoW120Spells::Hunter::Common::SCATTER_SHOT,
COUNTER_SHOT = WoW120Spells::Hunter::Common::COUNTER_SHOT,
// Aspects (WoW 11.2 only)
ASPECT_OF_THE_WILD = WoW112Spells::Hunter::Common::ASPECT_OF_THE_WILD,
ASPECT_OF_THE_CHEETAH = WoW112Spells::Hunter::Common::ASPECT_OF_THE_CHEETAH,
ASPECT_OF_THE_TURTLE = WoW112Spells::Hunter::Common::ASPECT_OF_THE_TURTLE,
// Aspects (WoW 12.0 only)
ASPECT_OF_THE_WILD = WoW120Spells::Hunter::Common::ASPECT_OF_THE_WILD,
ASPECT_OF_THE_CHEETAH = WoW120Spells::Hunter::Common::ASPECT_OF_THE_CHEETAH,
ASPECT_OF_THE_TURTLE = WoW120Spells::Hunter::Common::ASPECT_OF_THE_TURTLE,
// Marks/Debuffs
HUNTER_S_MARK = WoW112Spells::Hunter::Common::HUNTERS_MARK,
HUNTER_S_MARK = WoW120Spells::Hunter::Common::HUNTERS_MARK,
// Cooldowns
RAPID_FIRE = WoW112Spells::Hunter::Common::RAPID_FIRE,
BESTIAL_WRATH = WoW112Spells::Hunter::Common::BESTIAL_WRATH,
TRUESHOT = WoW112Spells::Hunter::Common::TRUESHOT,
BARRAGE = WoW112Spells::Hunter::Common::BARRAGE,
VOLLEY = WoW112Spells::Hunter::Common::VOLLEY,
RAPID_FIRE = WoW120Spells::Hunter::Common::RAPID_FIRE,
BESTIAL_WRATH = WoW120Spells::Hunter::Common::BESTIAL_WRATH,
TRUESHOT = WoW120Spells::Hunter::Common::TRUESHOT,
BARRAGE = WoW120Spells::Hunter::Common::BARRAGE,
VOLLEY = WoW120Spells::Hunter::Common::VOLLEY,
// Note: Tracking spells were removed in WoW 11.2 - no longer supported
// Note: Tracking spells were removed in WoW 12.0 - no longer supported
};
};
@@ -18,7 +18,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Pet.h"
#include "MotionMaster.h"
#include "CharmInfo.h"
@@ -50,47 +50,47 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// MARKSMANSHIP HUNTER SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// MARKSMANSHIP HUNTER SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
enum MarksmanshipSpells
{
// Core Abilities - Using central registry: WoW112Spells::Hunter::Marksmanship
SPELL_AIMED_SHOT = WoW112Spells::Hunter::Marksmanship::AIMED_SHOT_MM,
SPELL_RAPID_FIRE = WoW112Spells::Hunter::Marksmanship::RAPID_FIRE_MM,
SPELL_STEADY_SHOT = WoW112Spells::Hunter::Marksmanship::STEADY_SHOT_MM,
SPELL_ARCANE_SHOT = WoW112Spells::Hunter::Marksmanship::ARCANE_SHOT_MM,
SPELL_TRUESHOT = WoW112Spells::Hunter::Marksmanship::TRUESHOT,
SPELL_DOUBLE_TAP = WoW112Spells::Hunter::Marksmanship::DOUBLE_TAP,
// Core Abilities - Using central registry: WoW120Spells::Hunter::Marksmanship
SPELL_AIMED_SHOT = WoW120Spells::Hunter::Marksmanship::AIMED_SHOT_MM,
SPELL_RAPID_FIRE = WoW120Spells::Hunter::Marksmanship::RAPID_FIRE_MM,
SPELL_STEADY_SHOT = WoW120Spells::Hunter::Marksmanship::STEADY_SHOT_MM,
SPELL_ARCANE_SHOT = WoW120Spells::Hunter::Marksmanship::ARCANE_SHOT_MM,
SPELL_TRUESHOT = WoW120Spells::Hunter::Marksmanship::TRUESHOT,
SPELL_DOUBLE_TAP = WoW120Spells::Hunter::Marksmanship::DOUBLE_TAP,
// AoE Abilities - Using central registry: WoW112Spells::Hunter
SPELL_MULTISHOT_MM = WoW112Spells::Hunter::MULTI_SHOT,
SPELL_EXPLOSIVE_SHOT = WoW112Spells::Hunter::Marksmanship::EXPLOSIVE_SHOT,
SPELL_VOLLEY = WoW112Spells::Hunter::Marksmanship::VOLLEY,
// AoE Abilities - Using central registry: WoW120Spells::Hunter
SPELL_MULTISHOT_MM = WoW120Spells::Hunter::MULTI_SHOT,
SPELL_EXPLOSIVE_SHOT = WoW120Spells::Hunter::Marksmanship::EXPLOSIVE_SHOT,
SPELL_VOLLEY = WoW120Spells::Hunter::Marksmanship::VOLLEY,
// Procs and Buffs - Using central registry: WoW112Spells::Hunter::Marksmanship
SPELL_PRECISE_SHOTS = WoW112Spells::Hunter::Marksmanship::PRECISE_SHOTS,
SPELL_TRICK_SHOTS = WoW112Spells::Hunter::Marksmanship::TRICK_SHOTS,
SPELL_LETHAL_SHOTS = WoW112Spells::Hunter::Marksmanship::LETHAL_SHOTS,
SPELL_CAREFUL_AIM = WoW112Spells::Hunter::Marksmanship::CAREFUL_AIM,
// Procs and Buffs - Using central registry: WoW120Spells::Hunter::Marksmanship
SPELL_PRECISE_SHOTS = WoW120Spells::Hunter::Marksmanship::PRECISE_SHOTS,
SPELL_TRICK_SHOTS = WoW120Spells::Hunter::Marksmanship::TRICK_SHOTS,
SPELL_LETHAL_SHOTS = WoW120Spells::Hunter::Marksmanship::LETHAL_SHOTS,
SPELL_CAREFUL_AIM = WoW120Spells::Hunter::Marksmanship::CAREFUL_AIM,
// Utility - Using central registry: WoW112Spells::Hunter
SPELL_HUNTERS_MARK_MM = WoW112Spells::Hunter::HUNTERS_MARK,
SPELL_BINDING_SHOT = WoW112Spells::Hunter::Marksmanship::BINDING_SHOT,
SPELL_SCATTER_SHOT = WoW112Spells::Hunter::Marksmanship::SCATTER_SHOT,
SPELL_BURSTING_SHOT = WoW112Spells::Hunter::Marksmanship::BURSTING_SHOT,
SPELL_COUNTER_SHOT_MM = WoW112Spells::Hunter::COUNTER_SHOT,
// Utility - Using central registry: WoW120Spells::Hunter
SPELL_HUNTERS_MARK_MM = WoW120Spells::Hunter::HUNTERS_MARK,
SPELL_BINDING_SHOT = WoW120Spells::Hunter::Marksmanship::BINDING_SHOT,
SPELL_SCATTER_SHOT = WoW120Spells::Hunter::Marksmanship::SCATTER_SHOT,
SPELL_BURSTING_SHOT = WoW120Spells::Hunter::Marksmanship::BURSTING_SHOT,
SPELL_COUNTER_SHOT_MM = WoW120Spells::Hunter::COUNTER_SHOT,
// Defensives - Using central registry: WoW112Spells::Hunter
SPELL_ASPECT_TURTLE = WoW112Spells::Hunter::ASPECT_OF_THE_TURTLE,
SPELL_EXHILARATION_MM = WoW112Spells::Hunter::EXHILARATION,
SPELL_SURVIVAL_TACTICS = WoW112Spells::Hunter::Marksmanship::SURVIVAL_TACTICS,
// Defensives - Using central registry: WoW120Spells::Hunter
SPELL_ASPECT_TURTLE = WoW120Spells::Hunter::ASPECT_OF_THE_TURTLE,
SPELL_EXHILARATION_MM = WoW120Spells::Hunter::EXHILARATION,
SPELL_SURVIVAL_TACTICS = WoW120Spells::Hunter::Marksmanship::SURVIVAL_TACTICS,
// Pet (minimal for MM) - Using central registry: WoW112Spells::Hunter
SPELL_CALL_PET_MM = WoW112Spells::Hunter::CALL_PET_1,
SPELL_DISMISS_PET = WoW112Spells::Hunter::DISMISS_PET,
SPELL_LONE_WOLF = WoW112Spells::Hunter::Marksmanship::LONE_WOLF
// Pet (minimal for MM) - Using central registry: WoW120Spells::Hunter
SPELL_CALL_PET_MM = WoW120Spells::Hunter::CALL_PET_1,
SPELL_DISMISS_PET = WoW120Spells::Hunter::DISMISS_PET,
SPELL_LONE_WOLF = WoW120Spells::Hunter::Marksmanship::LONE_WOLF
};
/**
@@ -16,7 +16,7 @@
#include "../Common/StatusEffectTracker.h"
#include "../Common/CooldownManager.h"
#include "../Common/RotationHelpers.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "ObjectGuid.h"
#include "../../../Spatial/SpatialGridManager.h"
#include "ObjectAccessor.h"
@@ -56,51 +56,51 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// SURVIVAL HUNTER SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// SURVIVAL HUNTER SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
enum SurvivalSpells
{
// Core Melee Abilities - Using central registry: WoW112Spells::Hunter::Survival
SPELL_RAPTOR_STRIKE = WoW112Spells::Hunter::Survival::RAPTOR_STRIKE,
SPELL_MONGOOSE_BITE = WoW112Spells::Hunter::Survival::MONGOOSE_BITE,
SPELL_CARVE = WoW112Spells::Hunter::Survival::CARVE,
SPELL_BUTCHERY = WoW112Spells::Hunter::Survival::BUTCHERY,
SPELL_COORDINATED_ASSAULT = WoW112Spells::Hunter::Survival::COORDINATED_ASSAULT,
SPELL_FLANKING_STRIKE = WoW112Spells::Hunter::Survival::FLANKING_STRIKE,
// Core Melee Abilities - Using central registry: WoW120Spells::Hunter::Survival
SPELL_RAPTOR_STRIKE = WoW120Spells::Hunter::Survival::RAPTOR_STRIKE,
SPELL_MONGOOSE_BITE = WoW120Spells::Hunter::Survival::MONGOOSE_BITE,
SPELL_CARVE = WoW120Spells::Hunter::Survival::CARVE,
SPELL_BUTCHERY = WoW120Spells::Hunter::Survival::BUTCHERY,
SPELL_COORDINATED_ASSAULT = WoW120Spells::Hunter::Survival::COORDINATED_ASSAULT,
SPELL_FLANKING_STRIKE = WoW120Spells::Hunter::Survival::FLANKING_STRIKE,
// Wildfire Bombs - Using central registry: WoW112Spells::Hunter::Survival
SPELL_WILDFIRE_BOMB = WoW112Spells::Hunter::Survival::WILDFIRE_BOMB,
SPELL_SHRAPNEL_BOMB = WoW112Spells::Hunter::Survival::SHRAPNEL_BOMB,
SPELL_PHEROMONE_BOMB = WoW112Spells::Hunter::Survival::PHEROMONE_BOMB,
SPELL_VOLATILE_BOMB = WoW112Spells::Hunter::Survival::VOLATILE_BOMB,
SPELL_WILDFIRE_INFUSION = WoW112Spells::Hunter::Survival::WILDFIRE_INFUSION,
// Wildfire Bombs - Using central registry: WoW120Spells::Hunter::Survival
SPELL_WILDFIRE_BOMB = WoW120Spells::Hunter::Survival::WILDFIRE_BOMB,
SPELL_SHRAPNEL_BOMB = WoW120Spells::Hunter::Survival::SHRAPNEL_BOMB,
SPELL_PHEROMONE_BOMB = WoW120Spells::Hunter::Survival::PHEROMONE_BOMB,
SPELL_VOLATILE_BOMB = WoW120Spells::Hunter::Survival::VOLATILE_BOMB,
SPELL_WILDFIRE_INFUSION = WoW120Spells::Hunter::Survival::WILDFIRE_INFUSION,
// DoTs and Debuffs - Using central registry: WoW112Spells::Hunter::Survival
SPELL_SERPENT_STING = WoW112Spells::Hunter::Survival::SERPENT_STING,
SPELL_INTERNAL_BLEEDING = WoW112Spells::Hunter::Survival::INTERNAL_BLEEDING,
SPELL_BLOODSEEKER = WoW112Spells::Hunter::Survival::BLOODSEEKER,
// DoTs and Debuffs - Using central registry: WoW120Spells::Hunter::Survival
SPELL_SERPENT_STING = WoW120Spells::Hunter::Survival::SERPENT_STING,
SPELL_INTERNAL_BLEEDING = WoW120Spells::Hunter::Survival::INTERNAL_BLEEDING,
SPELL_BLOODSEEKER = WoW120Spells::Hunter::Survival::BLOODSEEKER,
// Focus Management - Using central registry: WoW112Spells::Hunter::Survival
SPELL_KILL_COMMAND_SURV = WoW112Spells::Hunter::Survival::KILL_COMMAND_SURVIVAL,
SPELL_TERMS_OF_ENGAGEMENT = WoW112Spells::Hunter::Survival::TERMS_OF_ENGAGEMENT,
SPELL_HARPOON = WoW112Spells::Hunter::Survival::HARPOON,
// Focus Management - Using central registry: WoW120Spells::Hunter::Survival
SPELL_KILL_COMMAND_SURV = WoW120Spells::Hunter::Survival::KILL_COMMAND_SURVIVAL,
SPELL_TERMS_OF_ENGAGEMENT = WoW120Spells::Hunter::Survival::TERMS_OF_ENGAGEMENT,
SPELL_HARPOON = WoW120Spells::Hunter::Survival::HARPOON,
// Utility - Using central registry: WoW112Spells::Hunter::Survival
SPELL_ASPECT_OF_EAGLE = WoW112Spells::Hunter::Survival::ASPECT_OF_THE_EAGLE,
SPELL_MUZZLE = WoW112Spells::Hunter::Survival::MUZZLE,
SPELL_STEEL_TRAP = WoW112Spells::Hunter::Survival::STEEL_TRAP,
SPELL_GUERRILLA_TACTICS = WoW112Spells::Hunter::Survival::GUERRILLA_TACTICS,
// Utility - Using central registry: WoW120Spells::Hunter::Survival
SPELL_ASPECT_OF_EAGLE = WoW120Spells::Hunter::Survival::ASPECT_OF_THE_EAGLE,
SPELL_MUZZLE = WoW120Spells::Hunter::Survival::MUZZLE,
SPELL_STEEL_TRAP = WoW120Spells::Hunter::Survival::STEEL_TRAP,
SPELL_GUERRILLA_TACTICS = WoW120Spells::Hunter::Survival::GUERRILLA_TACTICS,
// Pet - Using central registry: WoW112Spells::Hunter
SPELL_CALL_PET_SURV = WoW112Spells::Hunter::CALL_PET_1,
SPELL_MEND_PET_SURV = WoW112Spells::Hunter::MEND_PET,
// Pet - Using central registry: WoW120Spells::Hunter
SPELL_CALL_PET_SURV = WoW120Spells::Hunter::CALL_PET_1,
SPELL_MEND_PET_SURV = WoW120Spells::Hunter::MEND_PET,
// Defensives - Using central registry: WoW112Spells::Hunter
SPELL_ASPECT_TURTLE_SURV = WoW112Spells::Hunter::ASPECT_OF_THE_TURTLE,
SPELL_EXHILARATION_SURV = WoW112Spells::Hunter::EXHILARATION,
SPELL_SURVIVAL_OF_FITTEST = WoW112Spells::Hunter::SURVIVAL_OF_THE_FITTEST
// Defensives - Using central registry: WoW120Spells::Hunter
SPELL_ASPECT_TURTLE_SURV = WoW120Spells::Hunter::ASPECT_OF_THE_TURTLE,
SPELL_EXHILARATION_SURV = WoW120Spells::Hunter::EXHILARATION,
SPELL_SURVIVAL_OF_FITTEST = WoW120Spells::Hunter::SURVIVAL_OF_THE_FITTEST
};
/**
@@ -957,7 +957,7 @@ private:
void UpdatePetManagement() { _petManager.EnsurePetActive(GetBot()->GetVictim()); }
void SummonPet() { GetBot()->CastSpell(CastSpellTargetArg(GetBot()), SPELL_CALL_PET_SURV); }
void MendPetIfNeeded() { if (_petManager.HasActivePet()) _petManager.EnsurePetActive(GetBot()->GetVictim()); }
void FeedPetIfNeeded() { /* Feeding not implemented in WoW 11.2 */ }
void FeedPetIfNeeded() { /* Feeding not implemented in WoW 12.0 */ }
bool HasActivePet() const { return _petManager.HasActivePet(); }
::Playerbot::PetInfo GetPetInfo() const
{
@@ -21,7 +21,7 @@
#include "../Common/StatusEffectTracker.h"
#include "../Common/CooldownManager.h"
#include "../Common/RotationHelpers.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellAuras.h"
#include "SpellMgr.h"
@@ -51,29 +51,29 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Arcane Mage Spell IDs
// Use central spell registry (SpellValidation_WoW112.h)
// WoW 12.0 (The War Within) - Arcane Mage Spell IDs
// Use central spell registry (SpellValidation_WoW120.h)
namespace ArcaneMageSpells
{
// Arcane Spec Spells
constexpr uint32 ARCANE_BLAST = WoW112Spells::Mage::Arcane::ARCANE_BLAST;
constexpr uint32 ARCANE_MISSILES = WoW112Spells::Mage::Arcane::ARCANE_MISSILES;
constexpr uint32 ARCANE_BARRAGE = WoW112Spells::Mage::Arcane::ARCANE_BARRAGE;
constexpr uint32 ARCANE_SURGE = WoW112Spells::Mage::Arcane::ARCANE_SURGE;
constexpr uint32 ARCANE_ORB = WoW112Spells::Mage::Arcane::ARCANE_ORB;
constexpr uint32 EVOCATION = WoW112Spells::Mage::Arcane::EVOCATION;
constexpr uint32 TOUCH_OF_MAGE = WoW112Spells::Mage::Arcane::TOUCH_OF_THE_MAGI;
constexpr uint32 ARCANE_FAMILIAR = WoW112Spells::Mage::Arcane::ARCANE_FAMILIAR;
constexpr uint32 PRESENCE_OF_MIND = WoW112Spells::Mage::Arcane::PRESENCE_OF_MIND;
constexpr uint32 ARCANE_EXPLOSION = WoW112Spells::Mage::Arcane::ARCANE_EXPLOSION;
constexpr uint32 SUPERNOVA = WoW112Spells::Mage::Arcane::SUPERNOVA;
constexpr uint32 SHIFTING_POWER = WoW112Spells::Mage::Arcane::SHIFTING_POWER;
constexpr uint32 ARCANE_BLAST = WoW120Spells::Mage::Arcane::ARCANE_BLAST;
constexpr uint32 ARCANE_MISSILES = WoW120Spells::Mage::Arcane::ARCANE_MISSILES;
constexpr uint32 ARCANE_BARRAGE = WoW120Spells::Mage::Arcane::ARCANE_BARRAGE;
constexpr uint32 ARCANE_SURGE = WoW120Spells::Mage::Arcane::ARCANE_SURGE;
constexpr uint32 ARCANE_ORB = WoW120Spells::Mage::Arcane::ARCANE_ORB;
constexpr uint32 EVOCATION = WoW120Spells::Mage::Arcane::EVOCATION;
constexpr uint32 TOUCH_OF_MAGE = WoW120Spells::Mage::Arcane::TOUCH_OF_THE_MAGI;
constexpr uint32 ARCANE_FAMILIAR = WoW120Spells::Mage::Arcane::ARCANE_FAMILIAR;
constexpr uint32 PRESENCE_OF_MIND = WoW120Spells::Mage::Arcane::PRESENCE_OF_MIND;
constexpr uint32 ARCANE_EXPLOSION = WoW120Spells::Mage::Arcane::ARCANE_EXPLOSION;
constexpr uint32 SUPERNOVA = WoW120Spells::Mage::Arcane::SUPERNOVA;
constexpr uint32 SHIFTING_POWER = WoW120Spells::Mage::Arcane::SHIFTING_POWER;
// Common Mage Spells
constexpr uint32 ARCANE_INTELLECT = WoW112Spells::Mage::ARCANE_INTELLECT;
constexpr uint32 ICE_BLOCK = WoW112Spells::Mage::ICE_BLOCK;
constexpr uint32 MIRROR_IMAGE = WoW112Spells::Mage::MIRROR_IMAGE;
constexpr uint32 TIME_WARP = WoW112Spells::Mage::TIME_WARP;
constexpr uint32 ARCANE_INTELLECT = WoW120Spells::Mage::ARCANE_INTELLECT;
constexpr uint32 ICE_BLOCK = WoW120Spells::Mage::ICE_BLOCK;
constexpr uint32 MIRROR_IMAGE = WoW120Spells::Mage::MIRROR_IMAGE;
constexpr uint32 TIME_WARP = WoW120Spells::Mage::TIME_WARP;
}
// Make spells available in the namespace
@@ -21,7 +21,7 @@
#include "../Common/StatusEffectTracker.h"
#include "../Common/CooldownManager.h"
#include "../Common/RotationHelpers.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellAuras.h"
#include "SpellMgr.h"
@@ -49,29 +49,29 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Fire Mage Spell IDs
// Use central spell registry (SpellValidation_WoW112.h)
// WoW 12.0 (The War Within) - Fire Mage Spell IDs
// Use central spell registry (SpellValidation_WoW120.h)
namespace FireMageSpells
{
// Fire Spec Spells
constexpr uint32 FIRE_FIREBALL = WoW112Spells::Mage::FIREBALL;
constexpr uint32 FIRE_PYROBLAST = WoW112Spells::Mage::Fire::PYROBLAST;
constexpr uint32 FIRE_FIRE_BLAST = WoW112Spells::Mage::Fire::FIRE_BLAST;
constexpr uint32 FIRE_FIREBALL = WoW120Spells::Mage::FIREBALL;
constexpr uint32 FIRE_PYROBLAST = WoW120Spells::Mage::Fire::PYROBLAST;
constexpr uint32 FIRE_FIRE_BLAST = WoW120Spells::Mage::Fire::FIRE_BLAST;
constexpr uint32 FIRE_FIREBLAST = FIRE_FIRE_BLAST; // Alias for consistency
constexpr uint32 FIRE_SCORCH = WoW112Spells::Mage::Fire::SCORCH;
constexpr uint32 FIRE_FLAMESTRIKE = WoW112Spells::Mage::Fire::FLAMESTRIKE;
constexpr uint32 FIRE_PHOENIX_FLAMES = WoW112Spells::Mage::Fire::PHOENIX_FLAMES;
constexpr uint32 FIRE_COMBUSTION = WoW112Spells::Mage::Fire::COMBUSTION;
constexpr uint32 FIRE_DRAGON_BREATH = WoW112Spells::Mage::DRAGONS_BREATH;
constexpr uint32 FIRE_METEOR = WoW112Spells::Mage::Fire::METEOR;
constexpr uint32 FIRE_LIVING_BOMB = WoW112Spells::Mage::Fire::LIVING_BOMB;
constexpr uint32 FIRE_BLAZING_BARRIER = WoW112Spells::Mage::Fire::BLAZING_BARRIER;
constexpr uint32 FIRE_SCORCH = WoW120Spells::Mage::Fire::SCORCH;
constexpr uint32 FIRE_FLAMESTRIKE = WoW120Spells::Mage::Fire::FLAMESTRIKE;
constexpr uint32 FIRE_PHOENIX_FLAMES = WoW120Spells::Mage::Fire::PHOENIX_FLAMES;
constexpr uint32 FIRE_COMBUSTION = WoW120Spells::Mage::Fire::COMBUSTION;
constexpr uint32 FIRE_DRAGON_BREATH = WoW120Spells::Mage::DRAGONS_BREATH;
constexpr uint32 FIRE_METEOR = WoW120Spells::Mage::Fire::METEOR;
constexpr uint32 FIRE_LIVING_BOMB = WoW120Spells::Mage::Fire::LIVING_BOMB;
constexpr uint32 FIRE_BLAZING_BARRIER = WoW120Spells::Mage::Fire::BLAZING_BARRIER;
// Common Mage Spells
constexpr uint32 FIRE_ICE_BLOCK = WoW112Spells::Mage::ICE_BLOCK;
constexpr uint32 FIRE_MIRROR_IMAGE = WoW112Spells::Mage::MIRROR_IMAGE;
constexpr uint32 FIRE_SHIFTING_POWER = WoW112Spells::Mage::SHIFTING_POWER_COMMON;
constexpr uint32 FIRE_TIME_WARP = WoW112Spells::Mage::TIME_WARP;
constexpr uint32 FIRE_ICE_BLOCK = WoW120Spells::Mage::ICE_BLOCK;
constexpr uint32 FIRE_MIRROR_IMAGE = WoW120Spells::Mage::MIRROR_IMAGE;
constexpr uint32 FIRE_SHIFTING_POWER = WoW120Spells::Mage::SHIFTING_POWER_COMMON;
constexpr uint32 FIRE_TIME_WARP = WoW120Spells::Mage::TIME_WARP;
}
// Make spells available in the namespace
@@ -21,7 +21,7 @@
#include "../Common/StatusEffectTracker.h"
#include "../Common/CooldownManager.h"
#include "../Common/RotationHelpers.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellAuras.h"
#include "SpellMgr.h"
@@ -50,29 +50,29 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Frost Mage Spell IDs
// Use central spell registry (SpellValidation_WoW112.h)
// WoW 12.0 (The War Within) - Frost Mage Spell IDs
// Use central spell registry (SpellValidation_WoW120.h)
namespace FrostMageSpells
{
// Frost Spec Spells
constexpr uint32 FROST_FROSTBOLT = WoW112Spells::Mage::FROSTBOLT;
constexpr uint32 FROST_ICE_LANCE = WoW112Spells::Mage::Frost::ICE_LANCE;
constexpr uint32 FROST_FLURRY = WoW112Spells::Mage::Frost::FLURRY;
constexpr uint32 FROST_FROZEN_ORB = WoW112Spells::Mage::Frost::FROZEN_ORB;
constexpr uint32 FROST_BLIZZARD = WoW112Spells::Mage::Frost::BLIZZARD;
constexpr uint32 FROST_COMET_STORM = WoW112Spells::Mage::Frost::COMET_STORM;
constexpr uint32 FROST_RAY_OF_FROST = WoW112Spells::Mage::Frost::RAY_OF_FROST;
constexpr uint32 FROST_GLACIAL_SPIKE = WoW112Spells::Mage::Frost::GLACIAL_SPIKE;
constexpr uint32 FROST_ICY_VEINS = WoW112Spells::Mage::Frost::ICY_VEINS;
constexpr uint32 FROST_CONE_OF_COLD = WoW112Spells::Mage::Frost::CONE_OF_COLD;
constexpr uint32 FROST_FREEZE = WoW112Spells::Mage::Frost::FREEZE;
constexpr uint32 FROST_SUMMON_WATER_ELEMENTAL = WoW112Spells::Mage::Frost::SUMMON_WATER_ELEMENTAL;
constexpr uint32 FROST_ICE_BARRIER = WoW112Spells::Mage::Frost::ICE_BARRIER;
constexpr uint32 FROST_FROSTBOLT = WoW120Spells::Mage::FROSTBOLT;
constexpr uint32 FROST_ICE_LANCE = WoW120Spells::Mage::Frost::ICE_LANCE;
constexpr uint32 FROST_FLURRY = WoW120Spells::Mage::Frost::FLURRY;
constexpr uint32 FROST_FROZEN_ORB = WoW120Spells::Mage::Frost::FROZEN_ORB;
constexpr uint32 FROST_BLIZZARD = WoW120Spells::Mage::Frost::BLIZZARD;
constexpr uint32 FROST_COMET_STORM = WoW120Spells::Mage::Frost::COMET_STORM;
constexpr uint32 FROST_RAY_OF_FROST = WoW120Spells::Mage::Frost::RAY_OF_FROST;
constexpr uint32 FROST_GLACIAL_SPIKE = WoW120Spells::Mage::Frost::GLACIAL_SPIKE;
constexpr uint32 FROST_ICY_VEINS = WoW120Spells::Mage::Frost::ICY_VEINS;
constexpr uint32 FROST_CONE_OF_COLD = WoW120Spells::Mage::Frost::CONE_OF_COLD;
constexpr uint32 FROST_FREEZE = WoW120Spells::Mage::Frost::FREEZE;
constexpr uint32 FROST_SUMMON_WATER_ELEMENTAL = WoW120Spells::Mage::Frost::SUMMON_WATER_ELEMENTAL;
constexpr uint32 FROST_ICE_BARRIER = WoW120Spells::Mage::Frost::ICE_BARRIER;
// Common Mage Spells
constexpr uint32 FROST_ICE_BLOCK = WoW112Spells::Mage::ICE_BLOCK;
constexpr uint32 FROST_MIRROR_IMAGE = WoW112Spells::Mage::MIRROR_IMAGE;
constexpr uint32 FROST_SHIFTING_POWER = WoW112Spells::Mage::SHIFTING_POWER_COMMON;
constexpr uint32 FROST_ICE_BLOCK = WoW120Spells::Mage::ICE_BLOCK;
constexpr uint32 FROST_MIRROR_IMAGE = WoW120Spells::Mage::MIRROR_IMAGE;
constexpr uint32 FROST_SHIFTING_POWER = WoW120Spells::Mage::SHIFTING_POWER_COMMON;
}
// Make spells available in the namespace
+42 -42
View File
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Threading/LockHierarchy.h"
#include "Position.h"
#include "../../Combat/BotThreatManager.h"
@@ -194,59 +194,59 @@ private:
}
} _combatMetrics;
// Mage spell IDs - Using central registry (WoW 11.2)
static constexpr uint32 ARCANE_MISSILES = WoW112Spells::Mage::Common::ARCANE_MISSILES;
static constexpr uint32 ARCANE_BLAST = WoW112Spells::Mage::Common::ARCANE_BLAST;
static constexpr uint32 ARCANE_BARRAGE = WoW112Spells::Mage::Common::ARCANE_BARRAGE;
static constexpr uint32 ARCANE_ORB = WoW112Spells::Mage::Common::ARCANE_ORB;
static constexpr uint32 ARCANE_POWER = WoW112Spells::Mage::Common::ARCANE_POWER;
static constexpr uint32 ARCANE_INTELLECT = WoW112Spells::Mage::Common::ARCANE_INTELLECT;
static constexpr uint32 ARCANE_EXPLOSION = WoW112Spells::Mage::Common::ARCANE_EXPLOSION;
// Mage spell IDs - Using central registry (WoW 12.0)
static constexpr uint32 ARCANE_MISSILES = WoW120Spells::Mage::Common::ARCANE_MISSILES;
static constexpr uint32 ARCANE_BLAST = WoW120Spells::Mage::Common::ARCANE_BLAST;
static constexpr uint32 ARCANE_BARRAGE = WoW120Spells::Mage::Common::ARCANE_BARRAGE;
static constexpr uint32 ARCANE_ORB = WoW120Spells::Mage::Common::ARCANE_ORB;
static constexpr uint32 ARCANE_POWER = WoW120Spells::Mage::Common::ARCANE_POWER;
static constexpr uint32 ARCANE_INTELLECT = WoW120Spells::Mage::Common::ARCANE_INTELLECT;
static constexpr uint32 ARCANE_EXPLOSION = WoW120Spells::Mage::Common::ARCANE_EXPLOSION;
// Fire spells
static constexpr uint32 FIREBALL = WoW112Spells::Mage::Common::FIREBALL;
static constexpr uint32 FIRE_BLAST = WoW112Spells::Mage::Common::FIRE_BLAST;
static constexpr uint32 PYROBLAST = WoW112Spells::Mage::Common::PYROBLAST;
static constexpr uint32 FLAMESTRIKE = WoW112Spells::Mage::Common::FLAMESTRIKE;
static constexpr uint32 SCORCH = WoW112Spells::Mage::Common::SCORCH;
static constexpr uint32 COMBUSTION = WoW112Spells::Mage::Common::COMBUSTION;
static constexpr uint32 LIVING_BOMB = WoW112Spells::Mage::Common::LIVING_BOMB;
static constexpr uint32 DRAGON_BREATH = WoW112Spells::Mage::Common::DRAGONS_BREATH;
static constexpr uint32 FIREBALL = WoW120Spells::Mage::Common::FIREBALL;
static constexpr uint32 FIRE_BLAST = WoW120Spells::Mage::Common::FIRE_BLAST;
static constexpr uint32 PYROBLAST = WoW120Spells::Mage::Common::PYROBLAST;
static constexpr uint32 FLAMESTRIKE = WoW120Spells::Mage::Common::FLAMESTRIKE;
static constexpr uint32 SCORCH = WoW120Spells::Mage::Common::SCORCH;
static constexpr uint32 COMBUSTION = WoW120Spells::Mage::Common::COMBUSTION;
static constexpr uint32 LIVING_BOMB = WoW120Spells::Mage::Common::LIVING_BOMB;
static constexpr uint32 DRAGON_BREATH = WoW120Spells::Mage::Common::DRAGONS_BREATH;
// Frost spells
static constexpr uint32 FROSTBOLT = WoW112Spells::Mage::Common::FROSTBOLT;
static constexpr uint32 ICE_LANCE = WoW112Spells::Mage::Common::ICE_LANCE;
static constexpr uint32 FROZEN_ORB = WoW112Spells::Mage::Common::FROZEN_ORB;
static constexpr uint32 BLIZZARD = WoW112Spells::Mage::Common::BLIZZARD;
static constexpr uint32 CONE_OF_COLD = WoW112Spells::Mage::Common::CONE_OF_COLD;
static constexpr uint32 ICY_VEINS = WoW112Spells::Mage::Common::ICY_VEINS;
static constexpr uint32 WATER_ELEMENTAL = WoW112Spells::Mage::Common::SUMMON_WATER_ELEMENTAL;
static constexpr uint32 ICE_BARRIER = WoW112Spells::Mage::Common::ICE_BARRIER;
static constexpr uint32 FROST_NOVA = WoW112Spells::Mage::Common::FROST_NOVA;
static constexpr uint32 FROSTBOLT = WoW120Spells::Mage::Common::FROSTBOLT;
static constexpr uint32 ICE_LANCE = WoW120Spells::Mage::Common::ICE_LANCE;
static constexpr uint32 FROZEN_ORB = WoW120Spells::Mage::Common::FROZEN_ORB;
static constexpr uint32 BLIZZARD = WoW120Spells::Mage::Common::BLIZZARD;
static constexpr uint32 CONE_OF_COLD = WoW120Spells::Mage::Common::CONE_OF_COLD;
static constexpr uint32 ICY_VEINS = WoW120Spells::Mage::Common::ICY_VEINS;
static constexpr uint32 WATER_ELEMENTAL = WoW120Spells::Mage::Common::SUMMON_WATER_ELEMENTAL;
static constexpr uint32 ICE_BARRIER = WoW120Spells::Mage::Common::ICE_BARRIER;
static constexpr uint32 FROST_NOVA = WoW120Spells::Mage::Common::FROST_NOVA;
// Crowd control
static constexpr uint32 POLYMORPH = WoW112Spells::Mage::Common::POLYMORPH;
static constexpr uint32 COUNTERSPELL = WoW112Spells::Mage::Common::COUNTERSPELL;
static constexpr uint32 POLYMORPH = WoW120Spells::Mage::Common::POLYMORPH;
static constexpr uint32 COUNTERSPELL = WoW120Spells::Mage::Common::COUNTERSPELL;
// Defensive abilities
static constexpr uint32 BLINK = WoW112Spells::Mage::Common::BLINK;
static constexpr uint32 SHIMMER = WoW112Spells::Mage::Common::SHIMMER;
static constexpr uint32 INVISIBILITY = WoW112Spells::Mage::Common::INVISIBILITY;
static constexpr uint32 GREATER_INVISIBILITY = WoW112Spells::Mage::Common::GREATER_INVISIBILITY;
static constexpr uint32 ICE_BLOCK = WoW112Spells::Mage::Common::ICE_BLOCK;
static constexpr uint32 BLAZING_BARRIER = WoW112Spells::Mage::Common::BLAZING_BARRIER;
static constexpr uint32 BLINK = WoW120Spells::Mage::Common::BLINK;
static constexpr uint32 SHIMMER = WoW120Spells::Mage::Common::SHIMMER;
static constexpr uint32 INVISIBILITY = WoW120Spells::Mage::Common::INVISIBILITY;
static constexpr uint32 GREATER_INVISIBILITY = WoW120Spells::Mage::Common::GREATER_INVISIBILITY;
static constexpr uint32 ICE_BLOCK = WoW120Spells::Mage::Common::ICE_BLOCK;
static constexpr uint32 BLAZING_BARRIER = WoW120Spells::Mage::Common::BLAZING_BARRIER;
// Utility
static constexpr uint32 MIRROR_IMAGE = WoW112Spells::Mage::MIRROR_IMAGE;
static constexpr uint32 PRESENCE_OF_MIND = WoW112Spells::Mage::Common::PRESENCE_OF_MIND;
static constexpr uint32 TIME_WARP = WoW112Spells::Mage::Common::TIME_WARP;
static constexpr uint32 TELEPORT_STORMWIND = WoW112Spells::Mage::Common::TELEPORT_STORMWIND;
static constexpr uint32 TELEPORT_IRONFORGE = WoW112Spells::Mage::Common::TELEPORT_IRONFORGE;
static constexpr uint32 PORTAL_STORMWIND = WoW112Spells::Mage::Common::PORTAL_STORMWIND;
static constexpr uint32 PORTAL_IRONFORGE = WoW112Spells::Mage::Common::PORTAL_IRONFORGE;
static constexpr uint32 MIRROR_IMAGE = WoW120Spells::Mage::MIRROR_IMAGE;
static constexpr uint32 PRESENCE_OF_MIND = WoW120Spells::Mage::Common::PRESENCE_OF_MIND;
static constexpr uint32 TIME_WARP = WoW120Spells::Mage::Common::TIME_WARP;
static constexpr uint32 TELEPORT_STORMWIND = WoW120Spells::Mage::Common::TELEPORT_STORMWIND;
static constexpr uint32 TELEPORT_IRONFORGE = WoW120Spells::Mage::Common::TELEPORT_IRONFORGE;
static constexpr uint32 PORTAL_STORMWIND = WoW120Spells::Mage::Common::PORTAL_STORMWIND;
static constexpr uint32 PORTAL_IRONFORGE = WoW120Spells::Mage::Common::PORTAL_IRONFORGE;
// Conjure spells
static constexpr uint32 CONJURE_REFRESHMENT = WoW112Spells::Mage::CONJURE_REFRESHMENT;
static constexpr uint32 CONJURE_REFRESHMENT = WoW120Spells::Mage::CONJURE_REFRESHMENT;
// Helper methods
bool IsChanneling();
@@ -16,7 +16,7 @@
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../../Services/ThreatAssistant.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -41,14 +41,14 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// BREWMASTER MONK SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// BREWMASTER MONK SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
namespace BrewmasterMonkSpells
{
// Import from central registry - Monk common spells
using namespace WoW112Spells::Monk;
using namespace WoW120Spells::Monk;
// Chi Generators
constexpr uint32 KEG_SMASH = Brewmaster::KEG_SMASH;
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -42,14 +42,14 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// MISTWEAVER MONK SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// MISTWEAVER MONK SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
namespace MistweaverMonkSpells
{
// Import from central registry - Monk common spells
using namespace WoW112Spells::Monk;
using namespace WoW120Spells::Monk;
// Direct Heals
constexpr uint32 VIVIFY = Mistweaver::VIVIFY;
@@ -89,7 +89,7 @@ namespace MistweaverMonkSpells
constexpr uint32 SPINNING_CRANE_KICK_MIST = Mistweaver::SPINNING_CRANE_KICK_MW;
// Procs and Buffs
constexpr uint32 TEACHINGS_OF_THE_MONASTERY_MW = WoW112Spells::Monk::TEACHINGS_OF_THE_MONASTERY;
constexpr uint32 TEACHINGS_OF_THE_MONASTERY_MW = WoW120Spells::Monk::TEACHINGS_OF_THE_MONASTERY;
constexpr uint32 ANCIENT_TEACHINGS = Mistweaver::ANCIENT_TEACHINGS;
constexpr uint32 FAELINE_STOMP = Mistweaver::FAELINE_STOMP;
@@ -287,7 +287,7 @@ void MonkAI::UpdateBuffs()
return;
// Note: Legacy of the White Tiger / Legacy of the Emperor were removed in modern WoW
// These raid-wide stat buffs are no longer available in WoW 11.2
// These raid-wide stat buffs are no longer available in WoW 12.0
// Specialization-specific buff management
ChrSpecialization spec = bot->GetPrimarySpecialization();
@@ -296,7 +296,7 @@ void MonkAI::UpdateBuffs()
{
case 268: // Brewmaster
{
// Maintain Celestial Brew uptime when tanking (replaced Ironskin Brew in WoW 11.2)
// Maintain Celestial Brew uptime when tanking (replaced Ironskin Brew in WoW 12.0)
if (!bot->HasAura(CELESTIAL_BREW) && bot->IsInCombat())
{
if (bot->HasSpell(CELESTIAL_BREW) && HasEnoughResource(CELESTIAL_BREW))
@@ -1178,7 +1178,7 @@ void MonkAI::ExecuteBrewmasterRotation(::Unit* target)
}
}
// Maintain Celestial Brew (replaced Ironskin Brew in WoW 11.2)
// Maintain Celestial Brew (replaced Ironskin Brew in WoW 12.0)
if (CanUseAbility(CELESTIAL_BREW))
{
if (!GetBot()->HasAura(CELESTIAL_BREW))
+58 -58
View File
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Position.h"
#include "Group.h"
#include "Creature.h"
@@ -750,82 +750,82 @@ private:
static constexpr uint32 TOUCH_OF_DEATH_THRESHOLD = 15; // 15% health
// Spell IDs
// Monk Spell IDs - Using central registry (WoW 11.2)
// All spell IDs now reference WoW112Spells::Monk namespace for consistency
// Monk Spell IDs - Using central registry (WoW 12.0)
// All spell IDs now reference WoW120Spells::Monk namespace for consistency
enum MonkSpells
{
// Chi generators
TIGER_PALM = WoW112Spells::Monk::Common::TIGER_PALM,
EXPEL_HARM = WoW112Spells::Monk::Common::EXPEL_HARM,
CHI_WAVE = WoW112Spells::Monk::Common::CHI_WAVE,
CHI_BURST = WoW112Spells::Monk::Common::CHI_BURST,
TIGER_PALM = WoW120Spells::Monk::Common::TIGER_PALM,
EXPEL_HARM = WoW120Spells::Monk::Common::EXPEL_HARM,
CHI_WAVE = WoW120Spells::Monk::Common::CHI_WAVE,
CHI_BURST = WoW120Spells::Monk::Common::CHI_BURST,
// Basic attacks
BLACKOUT_KICK = WoW112Spells::Monk::Common::BLACKOUT_KICK,
RISING_SUN_KICK = WoW112Spells::Monk::Common::RISING_SUN_KICK,
SPINNING_CRANE_KICK = WoW112Spells::Monk::Common::SPINNING_CRANE_KICK,
BLACKOUT_KICK = WoW120Spells::Monk::Common::BLACKOUT_KICK,
RISING_SUN_KICK = WoW120Spells::Monk::Common::RISING_SUN_KICK,
SPINNING_CRANE_KICK = WoW120Spells::Monk::Common::SPINNING_CRANE_KICK,
// Windwalker abilities
FISTS_OF_FURY = WoW112Spells::Monk::Common::FISTS_OF_FURY,
WHIRLING_DRAGON_PUNCH = WoW112Spells::Monk::Common::WHIRLING_DRAGON_PUNCH,
STORM_EARTH_AND_FIRE = WoW112Spells::Monk::Common::STORM_EARTH_AND_FIRE,
TOUCH_OF_DEATH = WoW112Spells::Monk::Common::TOUCH_OF_DEATH,
FLYING_SERPENT_KICK = WoW112Spells::Monk::Common::FLYING_SERPENT_KICK,
MARK_OF_THE_CRANE = WoW112Spells::Monk::Common::MARK_OF_THE_CRANE,
RUSHING_JADE_WIND = WoW112Spells::Monk::Common::RUSHING_JADE_WIND,
SERENITY = WoW112Spells::Monk::Common::SERENITY,
FISTS_OF_FURY = WoW120Spells::Monk::Common::FISTS_OF_FURY,
WHIRLING_DRAGON_PUNCH = WoW120Spells::Monk::Common::WHIRLING_DRAGON_PUNCH,
STORM_EARTH_AND_FIRE = WoW120Spells::Monk::Common::STORM_EARTH_AND_FIRE,
TOUCH_OF_DEATH = WoW120Spells::Monk::Common::TOUCH_OF_DEATH,
FLYING_SERPENT_KICK = WoW120Spells::Monk::Common::FLYING_SERPENT_KICK,
MARK_OF_THE_CRANE = WoW120Spells::Monk::Common::MARK_OF_THE_CRANE,
RUSHING_JADE_WIND = WoW120Spells::Monk::Common::RUSHING_JADE_WIND,
SERENITY = WoW120Spells::Monk::Common::SERENITY,
// Brewmaster abilities
KEG_SMASH = WoW112Spells::Monk::Common::KEG_SMASH,
BREATH_OF_FIRE = WoW112Spells::Monk::Common::BREATH_OF_FIRE,
CELESTIAL_BREW = WoW112Spells::Monk::Common::CELESTIAL_BREW, // Replaced IRONSKIN_BREW in WoW 11.2
PURIFYING_BREW = WoW112Spells::Monk::Common::PURIFYING_BREW,
FORTIFYING_BREW = WoW112Spells::Monk::Common::FORTIFYING_BREW,
BLACK_OX_BREW = WoW112Spells::Monk::Common::BLACK_OX_BREW,
STAGGER = WoW112Spells::Monk::Common::STAGGER,
STAGGER_HEAVY = WoW112Spells::Monk::Common::STAGGER_HEAVY,
STAGGER_MODERATE = WoW112Spells::Monk::Common::STAGGER_MODERATE,
STAGGER_LIGHT = WoW112Spells::Monk::Common::STAGGER_LIGHT,
ZEN_MEDITATION = WoW112Spells::Monk::Common::ZEN_MEDITATION,
DAMPEN_HARM = WoW112Spells::Monk::Common::DAMPEN_HARM,
KEG_SMASH = WoW120Spells::Monk::Common::KEG_SMASH,
BREATH_OF_FIRE = WoW120Spells::Monk::Common::BREATH_OF_FIRE,
CELESTIAL_BREW = WoW120Spells::Monk::Common::CELESTIAL_BREW, // Replaced IRONSKIN_BREW in WoW 12.0
PURIFYING_BREW = WoW120Spells::Monk::Common::PURIFYING_BREW,
FORTIFYING_BREW = WoW120Spells::Monk::Common::FORTIFYING_BREW,
BLACK_OX_BREW = WoW120Spells::Monk::Common::BLACK_OX_BREW,
STAGGER = WoW120Spells::Monk::Common::STAGGER,
STAGGER_HEAVY = WoW120Spells::Monk::Common::STAGGER_HEAVY,
STAGGER_MODERATE = WoW120Spells::Monk::Common::STAGGER_MODERATE,
STAGGER_LIGHT = WoW120Spells::Monk::Common::STAGGER_LIGHT,
ZEN_MEDITATION = WoW120Spells::Monk::Common::ZEN_MEDITATION,
DAMPEN_HARM = WoW120Spells::Monk::Common::DAMPEN_HARM,
// Mistweaver abilities
RENEWING_MIST = WoW112Spells::Monk::Common::RENEWING_MIST,
ENVELOPING_MIST = WoW112Spells::Monk::Common::ENVELOPING_MIST,
VIVIFY = WoW112Spells::Monk::Common::VIVIFY,
ESSENCE_FONT = WoW112Spells::Monk::Common::ESSENCE_FONT,
SOOTHING_MIST = WoW112Spells::Monk::Common::SOOTHING_MIST,
LIFE_COCOON = WoW112Spells::Monk::Common::LIFE_COCOON,
REVIVAL = WoW112Spells::Monk::Common::REVIVAL,
THUNDER_FOCUS_TEA = WoW112Spells::Monk::Common::THUNDER_FOCUS_TEA,
MANA_TEA = WoW112Spells::Monk::Common::MANA_TEA,
TEACHINGS_OF_THE_MONASTERY = WoW112Spells::Monk::Common::TEACHINGS_OF_THE_MONASTERY,
SHEILUNS_GIFT = WoW112Spells::Monk::Common::SHEILUNS_GIFT, // WoW 11.2 ID: 399491
RENEWING_MIST = WoW120Spells::Monk::Common::RENEWING_MIST,
ENVELOPING_MIST = WoW120Spells::Monk::Common::ENVELOPING_MIST,
VIVIFY = WoW120Spells::Monk::Common::VIVIFY,
ESSENCE_FONT = WoW120Spells::Monk::Common::ESSENCE_FONT,
SOOTHING_MIST = WoW120Spells::Monk::Common::SOOTHING_MIST,
LIFE_COCOON = WoW120Spells::Monk::Common::LIFE_COCOON,
REVIVAL = WoW120Spells::Monk::Common::REVIVAL,
THUNDER_FOCUS_TEA = WoW120Spells::Monk::Common::THUNDER_FOCUS_TEA,
MANA_TEA = WoW120Spells::Monk::Common::MANA_TEA,
TEACHINGS_OF_THE_MONASTERY = WoW120Spells::Monk::Common::TEACHINGS_OF_THE_MONASTERY,
SHEILUNS_GIFT = WoW120Spells::Monk::Common::SHEILUNS_GIFT, // WoW 12.0 ID: 399491
// Mobility
ROLL = WoW112Spells::Monk::Common::ROLL,
CHI_TORPEDO = WoW112Spells::Monk::Common::CHI_TORPEDO,
TRANSCENDENCE = WoW112Spells::Monk::Common::TRANSCENDENCE,
TRANSCENDENCE_TRANSFER = WoW112Spells::Monk::Common::TRANSCENDENCE_TRANSFER,
TIGERS_LUST = WoW112Spells::Monk::Common::TIGERS_LUST,
ROLL = WoW120Spells::Monk::Common::ROLL,
CHI_TORPEDO = WoW120Spells::Monk::Common::CHI_TORPEDO,
TRANSCENDENCE = WoW120Spells::Monk::Common::TRANSCENDENCE,
TRANSCENDENCE_TRANSFER = WoW120Spells::Monk::Common::TRANSCENDENCE_TRANSFER,
TIGERS_LUST = WoW120Spells::Monk::Common::TIGERS_LUST,
// Utility and crowd control
PARALYSIS = WoW112Spells::Monk::Common::PARALYSIS,
LEG_SWEEP = WoW112Spells::Monk::Common::LEG_SWEEP,
SPEAR_HAND_STRIKE = WoW112Spells::Monk::Common::SPEAR_HAND_STRIKE,
RING_OF_PEACE = WoW112Spells::Monk::Common::RING_OF_PEACE,
CRACKLING_JADE_LIGHTNING = WoW112Spells::Monk::Common::CRACKLING_JADE_LIGHTNING,
DETOX = WoW112Spells::Monk::Common::DETOX,
RESUSCITATE = WoW112Spells::Monk::Common::RESUSCITATE,
PROVOKE = WoW112Spells::Monk::Common::PROVOKE, // Taunt
PARALYSIS = WoW120Spells::Monk::Common::PARALYSIS,
LEG_SWEEP = WoW120Spells::Monk::Common::LEG_SWEEP,
SPEAR_HAND_STRIKE = WoW120Spells::Monk::Common::SPEAR_HAND_STRIKE,
RING_OF_PEACE = WoW120Spells::Monk::Common::RING_OF_PEACE,
CRACKLING_JADE_LIGHTNING = WoW120Spells::Monk::Common::CRACKLING_JADE_LIGHTNING,
DETOX = WoW120Spells::Monk::Common::DETOX,
RESUSCITATE = WoW120Spells::Monk::Common::RESUSCITATE,
PROVOKE = WoW120Spells::Monk::Common::PROVOKE, // Taunt
// Defensive cooldowns
TOUCH_OF_KARMA = WoW112Spells::Monk::Common::TOUCH_OF_KARMA,
DIFFUSE_MAGIC = WoW112Spells::Monk::Common::DIFFUSE_MAGIC,
TOUCH_OF_KARMA = WoW120Spells::Monk::Common::TOUCH_OF_KARMA,
DIFFUSE_MAGIC = WoW120Spells::Monk::Common::DIFFUSE_MAGIC,
// Talents - using central registry where available
EYE_OF_THE_TIGER = WoW112Spells::Monk::Common::EYE_OF_THE_TIGER,
ENERGIZING_ELIXIR = WoW112Spells::Monk::Common::ENERGIZING_ELIXIR
EYE_OF_THE_TIGER = WoW120Spells::Monk::Common::EYE_OF_THE_TIGER,
ENERGIZING_ELIXIR = WoW120Spells::Monk::Common::ENERGIZING_ELIXIR
};
// Advanced specialization management methods
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW120.h"
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -40,21 +40,21 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// WINDWALKER MONK SPELL IDs (WoW 11.2 - The War Within)
// Using centralized spell registry from SpellValidation_WoW112.h
// WINDWALKER MONK SPELL IDs (WoW 12.0 - The War Within)
// Using centralized spell registry from SpellValidation_WoW120.h
// ============================================================================
namespace WindwalkerMonkSpells
{
// Import from central registry - Monk common spells
using namespace WoW112Spells::Monk;
using namespace WoW120Spells::Monk;
// Chi Generators
constexpr uint32 TIGER_PALM_WIND = Windwalker::TIGER_PALM_WW;
constexpr uint32 EXPEL_HARM_WIND = EXPEL_HARM;
constexpr uint32 CHI_WAVE_WIND = Windwalker::CHI_WAVE_WW;
constexpr uint32 CHI_BURST_WIND = Windwalker::CHI_BURST_WW;
constexpr uint32 CRACKLING_JADE_LIGHTNING_WW = WoW112Spells::Monk::CRACKLING_JADE_LIGHTNING;
constexpr uint32 CRACKLING_JADE_LIGHTNING_WW = WoW120Spells::Monk::CRACKLING_JADE_LIGHTNING;
// Chi Spenders
constexpr uint32 RISING_SUN_KICK = Windwalker::RISING_SUN_KICK_WW;
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -32,61 +32,61 @@ namespace Playerbot
{
// ============================================================================
// HOLY PALADIN SPELL ALIASES (WoW 11.2 - The War Within)
// HOLY PALADIN SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// ============================================================================
namespace HolyPaladinSpells
{
// Holy Power Generators
constexpr uint32 HOLY_SHOCK = WoW112Spells::Paladin::Holy::HOLY_SHOCK;
constexpr uint32 CRUSADER_STRIKE_HOLY = WoW112Spells::Paladin::CRUSADER_STRIKE;
constexpr uint32 JUDGMENT_HOLY = WoW112Spells::Paladin::Holy::JUDGMENT_HOLY;
constexpr uint32 HOLY_SHOCK = WoW120Spells::Paladin::Holy::HOLY_SHOCK;
constexpr uint32 CRUSADER_STRIKE_HOLY = WoW120Spells::Paladin::CRUSADER_STRIKE;
constexpr uint32 JUDGMENT_HOLY = WoW120Spells::Paladin::Holy::JUDGMENT_HOLY;
// Holy Power Spenders
constexpr uint32 WORD_OF_GLORY = WoW112Spells::Paladin::WORD_OF_GLORY;
constexpr uint32 LIGHT_OF_DAWN = WoW112Spells::Paladin::Holy::LIGHT_OF_DAWN;
constexpr uint32 SHIELD_OF_THE_RIGHTEOUS_HOLY = WoW112Spells::Paladin::Protection::SHIELD_OF_THE_RIGHTEOUS;
constexpr uint32 WORD_OF_GLORY = WoW120Spells::Paladin::WORD_OF_GLORY;
constexpr uint32 LIGHT_OF_DAWN = WoW120Spells::Paladin::Holy::LIGHT_OF_DAWN;
constexpr uint32 SHIELD_OF_THE_RIGHTEOUS_HOLY = WoW120Spells::Paladin::Protection::SHIELD_OF_THE_RIGHTEOUS;
// Direct Heals
constexpr uint32 FLASH_OF_LIGHT = WoW112Spells::Paladin::FLASH_OF_LIGHT;
constexpr uint32 HOLY_LIGHT = WoW112Spells::Paladin::HOLY_LIGHT;
constexpr uint32 DIVINE_TOLL = WoW112Spells::Paladin::Protection::DIVINE_TOLL;
constexpr uint32 FLASH_OF_LIGHT = WoW120Spells::Paladin::FLASH_OF_LIGHT;
constexpr uint32 HOLY_LIGHT = WoW120Spells::Paladin::HOLY_LIGHT;
constexpr uint32 DIVINE_TOLL = WoW120Spells::Paladin::Protection::DIVINE_TOLL;
// AoE Heals
constexpr uint32 LIGHT_OF_THE_MARTYR = WoW112Spells::Paladin::Holy::LIGHT_OF_THE_MARTYR;
constexpr uint32 BEACON_OF_LIGHT = WoW112Spells::Paladin::Holy::BEACON_OF_LIGHT;
constexpr uint32 BEACON_OF_FAITH = WoW112Spells::Paladin::Holy::BEACON_OF_FAITH;
constexpr uint32 BEACON_OF_VIRTUE = WoW112Spells::Paladin::Holy::BEACON_OF_VIRTUE;
constexpr uint32 LIGHT_OF_THE_MARTYR = WoW120Spells::Paladin::Holy::LIGHT_OF_THE_MARTYR;
constexpr uint32 BEACON_OF_LIGHT = WoW120Spells::Paladin::Holy::BEACON_OF_LIGHT;
constexpr uint32 BEACON_OF_FAITH = WoW120Spells::Paladin::Holy::BEACON_OF_FAITH;
constexpr uint32 BEACON_OF_VIRTUE = WoW120Spells::Paladin::Holy::BEACON_OF_VIRTUE;
// Cooldowns
constexpr uint32 AVENGING_WRATH_HOLY = WoW112Spells::Paladin::Holy::AVENGING_WRATH_HOLY;
constexpr uint32 AVENGING_CRUSADER = WoW112Spells::Paladin::Holy::AVENGING_CRUSADER;
constexpr uint32 HOLY_AVENGER = WoW112Spells::Paladin::Holy::HOLY_AVENGER;
constexpr uint32 DIVINE_PROTECTION = WoW112Spells::Paladin::DIVINE_PROTECTION;
constexpr uint32 BLESSING_OF_SACRIFICE = WoW112Spells::Paladin::BLESSING_OF_SACRIFICE;
constexpr uint32 AVENGING_WRATH_HOLY = WoW120Spells::Paladin::Holy::AVENGING_WRATH_HOLY;
constexpr uint32 AVENGING_CRUSADER = WoW120Spells::Paladin::Holy::AVENGING_CRUSADER;
constexpr uint32 HOLY_AVENGER = WoW120Spells::Paladin::Holy::HOLY_AVENGER;
constexpr uint32 DIVINE_PROTECTION = WoW120Spells::Paladin::DIVINE_PROTECTION;
constexpr uint32 BLESSING_OF_SACRIFICE = WoW120Spells::Paladin::BLESSING_OF_SACRIFICE;
// Utility
constexpr uint32 CLEANSE = WoW112Spells::Paladin::CLEANSE;
constexpr uint32 BLESSING_OF_FREEDOM = WoW112Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 BLESSING_OF_PROTECTION = WoW112Spells::Paladin::BLESSING_OF_PROTECTION;
constexpr uint32 LAY_ON_HANDS = WoW112Spells::Paladin::LAY_ON_HANDS;
constexpr uint32 DIVINE_SHIELD = WoW112Spells::Paladin::DIVINE_SHIELD;
constexpr uint32 CLEANSE = WoW120Spells::Paladin::CLEANSE;
constexpr uint32 BLESSING_OF_FREEDOM = WoW120Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 BLESSING_OF_PROTECTION = WoW120Spells::Paladin::BLESSING_OF_PROTECTION;
constexpr uint32 LAY_ON_HANDS = WoW120Spells::Paladin::LAY_ON_HANDS;
constexpr uint32 DIVINE_SHIELD = WoW120Spells::Paladin::DIVINE_SHIELD;
// Buffs/Auras
constexpr uint32 INFUSION_OF_LIGHT = WoW112Spells::Paladin::Holy::INFUSION_OF_LIGHT;
constexpr uint32 GLIMMER_OF_LIGHT = WoW112Spells::Paladin::Holy::GLIMMER_OF_LIGHT;
constexpr uint32 AURA_MASTERY = WoW112Spells::Paladin::Holy::AURA_MASTERY;
constexpr uint32 INFUSION_OF_LIGHT = WoW120Spells::Paladin::Holy::INFUSION_OF_LIGHT;
constexpr uint32 GLIMMER_OF_LIGHT = WoW120Spells::Paladin::Holy::GLIMMER_OF_LIGHT;
constexpr uint32 AURA_MASTERY = WoW120Spells::Paladin::Holy::AURA_MASTERY;
// Auras
constexpr uint32 DEVOTION_AURA = WoW112Spells::Paladin::DEVOTION_AURA;
constexpr uint32 CONCENTRATION_AURA = WoW112Spells::Paladin::CONCENTRATION_AURA;
constexpr uint32 RETRIBUTION_AURA = WoW112Spells::Paladin::RETRIBUTION_AURA;
constexpr uint32 DEVOTION_AURA = WoW120Spells::Paladin::DEVOTION_AURA;
constexpr uint32 CONCENTRATION_AURA = WoW120Spells::Paladin::CONCENTRATION_AURA;
constexpr uint32 RETRIBUTION_AURA = WoW120Spells::Paladin::RETRIBUTION_AURA;
// Talents
constexpr uint32 DIVINE_FAVOR = WoW112Spells::Paladin::Holy::DIVINE_FAVOR;
constexpr uint32 AWAKENING = WoW112Spells::Paladin::Holy::AWAKENING;
constexpr uint32 UNBREAKABLE_SPIRIT = WoW112Spells::Paladin::Holy::UNBREAKABLE_SPIRIT;
constexpr uint32 DIVINE_FAVOR = WoW120Spells::Paladin::Holy::DIVINE_FAVOR;
constexpr uint32 AWAKENING = WoW120Spells::Paladin::Holy::AWAKENING;
constexpr uint32 UNBREAKABLE_SPIRIT = WoW120Spells::Paladin::Holy::UNBREAKABLE_SPIRIT;
}
using namespace HolyPaladinSpells;
@@ -588,7 +588,7 @@ void PaladinAI::UpdateBlessingManagement()
_lastBlessingTime = currentTime;
// WoW 11.2: Most blessings are removed. Paladin now has situational blessings:
// WoW 12.0: Most blessings are removed. Paladin now has situational blessings:
// - Blessing of Freedom (movement utility)
// - Blessing of Protection (physical immunity)
// - Blessing of Sacrifice (damage sharing)
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
#include "Position.h"
#include <memory>
#include <chrono>
@@ -69,73 +69,73 @@ private:
void DelegateToSpecialization(::Unit* target);
// Paladin-specific spell IDs (comprehensive list for all specs)
// Paladin Spell IDs - Using central registry (WoW 11.2 only)
// Paladin Spell IDs - Using central registry (WoW 12.0 only)
enum PaladinSpells
{
// Interrupts
REBUKE = WoW112Spells::Paladin::Common::REBUKE,
HAMMER_OF_JUSTICE = WoW112Spells::Paladin::Common::HAMMER_OF_JUSTICE,
REBUKE = WoW120Spells::Paladin::Common::REBUKE,
HAMMER_OF_JUSTICE = WoW120Spells::Paladin::Common::HAMMER_OF_JUSTICE,
// Defensive Cooldowns
DIVINE_SHIELD = WoW112Spells::Paladin::Common::DIVINE_SHIELD,
SHIELD_OF_VENGEANCE = WoW112Spells::Paladin::Common::SHIELD_OF_VENGEANCE,
BLESSING_OF_PROTECTION = WoW112Spells::Paladin::Common::BLESSING_OF_PROTECTION,
ARDENT_DEFENDER = WoW112Spells::Paladin::Common::ARDENT_DEFENDER,
GUARDIAN_OF_ANCIENT_KINGS = WoW112Spells::Paladin::Common::GUARDIAN_OF_ANCIENT_KINGS,
LAY_ON_HANDS = WoW112Spells::Paladin::Common::LAY_ON_HANDS,
DIVINE_PROTECTION = WoW112Spells::Paladin::Common::DIVINE_PROTECTION,
DIVINE_SHIELD = WoW120Spells::Paladin::Common::DIVINE_SHIELD,
SHIELD_OF_VENGEANCE = WoW120Spells::Paladin::Common::SHIELD_OF_VENGEANCE,
BLESSING_OF_PROTECTION = WoW120Spells::Paladin::Common::BLESSING_OF_PROTECTION,
ARDENT_DEFENDER = WoW120Spells::Paladin::Common::ARDENT_DEFENDER,
GUARDIAN_OF_ANCIENT_KINGS = WoW120Spells::Paladin::Common::GUARDIAN_OF_ANCIENT_KINGS,
LAY_ON_HANDS = WoW120Spells::Paladin::Common::LAY_ON_HANDS,
DIVINE_PROTECTION = WoW120Spells::Paladin::Common::DIVINE_PROTECTION,
// Offensive Cooldowns
AVENGING_WRATH = WoW112Spells::Paladin::Common::AVENGING_WRATH,
CRUSADE = WoW112Spells::Paladin::Common::CRUSADE,
HOLY_AVENGER = WoW112Spells::Paladin::Common::HOLY_AVENGER,
EXECUTION_SENTENCE = WoW112Spells::Paladin::Common::EXECUTION_SENTENCE,
AVENGING_WRATH = WoW120Spells::Paladin::Common::AVENGING_WRATH,
CRUSADE = WoW120Spells::Paladin::Common::CRUSADE,
HOLY_AVENGER = WoW120Spells::Paladin::Common::HOLY_AVENGER,
EXECUTION_SENTENCE = WoW120Spells::Paladin::Common::EXECUTION_SENTENCE,
// Holy Power Generators
CRUSADER_STRIKE = WoW112Spells::Paladin::Common::CRUSADER_STRIKE,
BLADE_OF_JUSTICE = WoW112Spells::Paladin::Common::BLADE_OF_JUSTICE,
HAMMER_OF_THE_RIGHTEOUS = WoW112Spells::Paladin::Common::HAMMER_OF_THE_RIGHTEOUS,
JUDGMENT = WoW112Spells::Paladin::Common::JUDGMENT,
WAKE_OF_ASHES = WoW112Spells::Paladin::Common::WAKE_OF_ASHES,
CRUSADER_STRIKE = WoW120Spells::Paladin::Common::CRUSADER_STRIKE,
BLADE_OF_JUSTICE = WoW120Spells::Paladin::Common::BLADE_OF_JUSTICE,
HAMMER_OF_THE_RIGHTEOUS = WoW120Spells::Paladin::Common::HAMMER_OF_THE_RIGHTEOUS,
JUDGMENT = WoW120Spells::Paladin::Common::JUDGMENT,
WAKE_OF_ASHES = WoW120Spells::Paladin::Common::WAKE_OF_ASHES,
// Holy Power Spenders
TEMPLARS_VERDICT = WoW112Spells::Paladin::Common::TEMPLARS_VERDICT,
FINAL_VERDICT = WoW112Spells::Paladin::Common::FINAL_VERDICT,
DIVINE_STORM = WoW112Spells::Paladin::Common::DIVINE_STORM,
SHIELD_OF_THE_RIGHTEOUS = WoW112Spells::Paladin::Common::SHIELD_OF_THE_RIGHTEOUS,
WORD_OF_GLORY = WoW112Spells::Paladin::Common::WORD_OF_GLORY,
TEMPLARS_VERDICT = WoW120Spells::Paladin::Common::TEMPLARS_VERDICT,
FINAL_VERDICT = WoW120Spells::Paladin::Common::FINAL_VERDICT,
DIVINE_STORM = WoW120Spells::Paladin::Common::DIVINE_STORM,
SHIELD_OF_THE_RIGHTEOUS = WoW120Spells::Paladin::Common::SHIELD_OF_THE_RIGHTEOUS,
WORD_OF_GLORY = WoW120Spells::Paladin::Common::WORD_OF_GLORY,
// AoE Abilities
CONSECRATION = WoW112Spells::Paladin::Common::CONSECRATION,
HAMMER_OF_LIGHT = WoW112Spells::Paladin::Protection::LIGHTS_GUIDANCE, // Hero talent (Templar)
CONSECRATION = WoW120Spells::Paladin::Common::CONSECRATION,
HAMMER_OF_LIGHT = WoW120Spells::Paladin::Protection::LIGHTS_GUIDANCE, // Hero talent (Templar)
// Auras (WoW 11.2)
RETRIBUTION_AURA = WoW112Spells::Paladin::Common::RETRIBUTION_AURA,
DEVOTION_AURA = WoW112Spells::Paladin::Common::DEVOTION_AURA,
CRUSADER_AURA = WoW112Spells::Paladin::Common::CRUSADER_AURA,
CONCENTRATION_AURA = WoW112Spells::Paladin::CONCENTRATION_AURA,
// Auras (WoW 12.0)
RETRIBUTION_AURA = WoW120Spells::Paladin::Common::RETRIBUTION_AURA,
DEVOTION_AURA = WoW120Spells::Paladin::Common::DEVOTION_AURA,
CRUSADER_AURA = WoW120Spells::Paladin::Common::CRUSADER_AURA,
CONCENTRATION_AURA = WoW120Spells::Paladin::CONCENTRATION_AURA,
// Blessings (WoW 11.2)
BLESSING_OF_FREEDOM = WoW112Spells::Paladin::Common::BLESSING_OF_FREEDOM,
BLESSING_OF_SACRIFICE = WoW112Spells::Paladin::BLESSING_OF_SACRIFICE,
// Blessings (WoW 12.0)
BLESSING_OF_FREEDOM = WoW120Spells::Paladin::Common::BLESSING_OF_FREEDOM,
BLESSING_OF_SACRIFICE = WoW120Spells::Paladin::BLESSING_OF_SACRIFICE,
// Healing Abilities (for Holy spec)
FLASH_OF_LIGHT = WoW112Spells::Paladin::Common::FLASH_OF_LIGHT,
HOLY_LIGHT = WoW112Spells::Paladin::Common::HOLY_LIGHT,
HOLY_SHOCK = WoW112Spells::Paladin::Common::HOLY_SHOCK,
LIGHT_OF_DAWN = WoW112Spells::Paladin::Common::LIGHT_OF_DAWN,
BEACON_OF_LIGHT = WoW112Spells::Paladin::Common::BEACON_OF_LIGHT,
FLASH_OF_LIGHT = WoW120Spells::Paladin::Common::FLASH_OF_LIGHT,
HOLY_LIGHT = WoW120Spells::Paladin::Common::HOLY_LIGHT,
HOLY_SHOCK = WoW120Spells::Paladin::Common::HOLY_SHOCK,
LIGHT_OF_DAWN = WoW120Spells::Paladin::Common::LIGHT_OF_DAWN,
BEACON_OF_LIGHT = WoW120Spells::Paladin::Common::BEACON_OF_LIGHT,
// Utility
HAND_OF_RECKONING = WoW112Spells::Paladin::Common::HAND_OF_RECKONING,
CLEANSE = WoW112Spells::Paladin::Common::CLEANSE,
CLEANSE_TOXINS = WoW112Spells::Paladin::CLEANSE_TOXINS,
HAMMER_OF_WRATH = WoW112Spells::Paladin::Common::HAMMER_OF_WRATH,
BLINDING_LIGHT = WoW112Spells::Paladin::Common::BLINDING_LIGHT,
TURN_EVIL = WoW112Spells::Paladin::TURN_EVIL,
HAND_OF_RECKONING = WoW120Spells::Paladin::Common::HAND_OF_RECKONING,
CLEANSE = WoW120Spells::Paladin::Common::CLEANSE,
CLEANSE_TOXINS = WoW120Spells::Paladin::CLEANSE_TOXINS,
HAMMER_OF_WRATH = WoW120Spells::Paladin::Common::HAMMER_OF_WRATH,
BLINDING_LIGHT = WoW120Spells::Paladin::Common::BLINDING_LIGHT,
TURN_EVIL = WoW120Spells::Paladin::TURN_EVIL,
// Movement
DIVINE_STEED = WoW112Spells::Paladin::Common::DIVINE_STEED
DIVINE_STEED = WoW120Spells::Paladin::Common::DIVINE_STEED
};
@@ -15,7 +15,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
#include "Player.h"
#include "SpellMgr.h"
#include "SpellAuraEffects.h"
@@ -31,60 +31,60 @@ namespace Playerbot
{
// ============================================================================
// PROTECTION PALADIN SPELL ALIASES (WoW 11.2 - The War Within)
// PROTECTION PALADIN SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// ============================================================================
namespace ProtectionPaladinSpells
{
// Holy Power Generators
constexpr uint32 JUDGMENT_PROT = WoW112Spells::Paladin::Protection::JUDGMENT_PROT;
constexpr uint32 HAMMER_OF_WRATH_PROT = WoW112Spells::Paladin::HAMMER_OF_WRATH;
constexpr uint32 BLESSED_HAMMER = WoW112Spells::Paladin::Protection::BLESSED_HAMMER;
constexpr uint32 AVENGERS_SHIELD = WoW112Spells::Paladin::Protection::AVENGERS_SHIELD;
constexpr uint32 JUDGMENT_PROT = WoW120Spells::Paladin::Protection::JUDGMENT_PROT;
constexpr uint32 HAMMER_OF_WRATH_PROT = WoW120Spells::Paladin::HAMMER_OF_WRATH;
constexpr uint32 BLESSED_HAMMER = WoW120Spells::Paladin::Protection::BLESSED_HAMMER;
constexpr uint32 AVENGERS_SHIELD = WoW120Spells::Paladin::Protection::AVENGERS_SHIELD;
// Holy Power Spenders
constexpr uint32 SHIELD_OF_THE_RIGHTEOUS = WoW112Spells::Paladin::Protection::SHIELD_OF_THE_RIGHTEOUS;
constexpr uint32 WORD_OF_GLORY_PROT = WoW112Spells::Paladin::WORD_OF_GLORY;
constexpr uint32 LIGHT_OF_THE_PROTECTOR = WoW112Spells::Paladin::Protection::LIGHT_OF_THE_PROTECTOR;
constexpr uint32 SHIELD_OF_THE_RIGHTEOUS = WoW120Spells::Paladin::Protection::SHIELD_OF_THE_RIGHTEOUS;
constexpr uint32 WORD_OF_GLORY_PROT = WoW120Spells::Paladin::WORD_OF_GLORY;
constexpr uint32 LIGHT_OF_THE_PROTECTOR = WoW120Spells::Paladin::Protection::LIGHT_OF_THE_PROTECTOR;
// Threat Generation
constexpr uint32 CONSECRATION = WoW112Spells::Paladin::CONSECRATION;
constexpr uint32 HAMMER_OF_THE_RIGHTEOUS = WoW112Spells::Paladin::Protection::HAMMER_OF_THE_RIGHTEOUS;
constexpr uint32 CONSECRATION = WoW120Spells::Paladin::CONSECRATION;
constexpr uint32 HAMMER_OF_THE_RIGHTEOUS = WoW120Spells::Paladin::Protection::HAMMER_OF_THE_RIGHTEOUS;
// Active Mitigation
constexpr uint32 GUARDIAN_OF_ANCIENT_KINGS = WoW112Spells::Paladin::Protection::GUARDIAN_OF_ANCIENT_KINGS;
constexpr uint32 ARDENT_DEFENDER = WoW112Spells::Paladin::Protection::ARDENT_DEFENDER;
constexpr uint32 DIVINE_PROTECTION_PROT = WoW112Spells::Paladin::DIVINE_PROTECTION;
constexpr uint32 BLESSING_OF_SPELLWARDING = WoW112Spells::Paladin::Protection::BLESSING_OF_SPELLWARDING;
constexpr uint32 GUARDIAN_OF_ANCIENT_KINGS = WoW120Spells::Paladin::Protection::GUARDIAN_OF_ANCIENT_KINGS;
constexpr uint32 ARDENT_DEFENDER = WoW120Spells::Paladin::Protection::ARDENT_DEFENDER;
constexpr uint32 DIVINE_PROTECTION_PROT = WoW120Spells::Paladin::DIVINE_PROTECTION;
constexpr uint32 BLESSING_OF_SPELLWARDING = WoW120Spells::Paladin::Protection::BLESSING_OF_SPELLWARDING;
// Major Cooldowns
constexpr uint32 AVENGING_WRATH_PROT = WoW112Spells::Paladin::AVENGING_WRATH;
constexpr uint32 SENTINEL = WoW112Spells::Paladin::Protection::SENTINEL;
constexpr uint32 FINAL_STAND = WoW112Spells::Paladin::Protection::FINAL_STAND;
constexpr uint32 AVENGING_WRATH_PROT = WoW120Spells::Paladin::AVENGING_WRATH;
constexpr uint32 SENTINEL = WoW120Spells::Paladin::Protection::SENTINEL;
constexpr uint32 FINAL_STAND = WoW120Spells::Paladin::Protection::FINAL_STAND;
// Utility
constexpr uint32 HAND_OF_RECKONING = WoW112Spells::Paladin::HAND_OF_RECKONING;
constexpr uint32 BLESSING_OF_FREEDOM_PROT = WoW112Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 BLESSING_OF_PROTECTION_PROT = WoW112Spells::Paladin::BLESSING_OF_PROTECTION;
constexpr uint32 LAY_ON_HANDS_PROT = WoW112Spells::Paladin::LAY_ON_HANDS;
constexpr uint32 DIVINE_SHIELD_PROT = WoW112Spells::Paladin::DIVINE_SHIELD;
constexpr uint32 CLEANSE_TOXINS = WoW112Spells::Paladin::CLEANSE_TOXINS;
constexpr uint32 HAND_OF_RECKONING = WoW120Spells::Paladin::HAND_OF_RECKONING;
constexpr uint32 BLESSING_OF_FREEDOM_PROT = WoW120Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 BLESSING_OF_PROTECTION_PROT = WoW120Spells::Paladin::BLESSING_OF_PROTECTION;
constexpr uint32 LAY_ON_HANDS_PROT = WoW120Spells::Paladin::LAY_ON_HANDS;
constexpr uint32 DIVINE_SHIELD_PROT = WoW120Spells::Paladin::DIVINE_SHIELD;
constexpr uint32 CLEANSE_TOXINS = WoW120Spells::Paladin::CLEANSE_TOXINS;
// Auras
constexpr uint32 DEVOTION_AURA_PROT = WoW112Spells::Paladin::DEVOTION_AURA;
constexpr uint32 CONCENTRATION_AURA_PROT = WoW112Spells::Paladin::CONCENTRATION_AURA;
constexpr uint32 RETRIBUTION_AURA_PROT = WoW112Spells::Paladin::RETRIBUTION_AURA;
constexpr uint32 DEVOTION_AURA_PROT = WoW120Spells::Paladin::DEVOTION_AURA;
constexpr uint32 CONCENTRATION_AURA_PROT = WoW120Spells::Paladin::CONCENTRATION_AURA;
constexpr uint32 RETRIBUTION_AURA_PROT = WoW120Spells::Paladin::RETRIBUTION_AURA;
// Procs and Buffs
constexpr uint32 GRAND_CRUSADER = WoW112Spells::Paladin::Protection::GRAND_CRUSADER;
constexpr uint32 SHINING_LIGHT = WoW112Spells::Paladin::Protection::SHINING_LIGHT;
constexpr uint32 GRAND_CRUSADER = WoW120Spells::Paladin::Protection::GRAND_CRUSADER;
constexpr uint32 SHINING_LIGHT = WoW120Spells::Paladin::Protection::SHINING_LIGHT;
// Talents
constexpr uint32 SERAPHIM = WoW112Spells::Paladin::Protection::SERAPHIM;
constexpr uint32 BULWARK_OF_RIGHTEOUS_FURY = WoW112Spells::Paladin::Protection::BULWARK_OF_RIGHTEOUS_FURY;
constexpr uint32 MOMENT_OF_GLORY = WoW112Spells::Paladin::Protection::MOMENT_OF_GLORY;
constexpr uint32 FIRST_AVENGER = WoW112Spells::Paladin::Protection::FIRST_AVENGER;
constexpr uint32 SERAPHIM = WoW120Spells::Paladin::Protection::SERAPHIM;
constexpr uint32 BULWARK_OF_RIGHTEOUS_FURY = WoW120Spells::Paladin::Protection::BULWARK_OF_RIGHTEOUS_FURY;
constexpr uint32 MOMENT_OF_GLORY = WoW120Spells::Paladin::Protection::MOMENT_OF_GLORY;
constexpr uint32 FIRST_AVENGER = WoW120Spells::Paladin::Protection::FIRST_AVENGER;
}
using namespace ProtectionPaladinSpells;
@@ -18,7 +18,7 @@
#include "../Common/RotationHelpers.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
// Phase 5 Integration: Decision Systems
#include "../../Decision/ActionPriorityQueue.h"
@@ -29,47 +29,47 @@ namespace Playerbot
{
// ============================================================================
// RETRIBUTION PALADIN SPELL ALIASES (WoW 11.2 - The War Within)
// RETRIBUTION PALADIN SPELL ALIASES (WoW 12.0 - The War Within)
// Consolidated spell IDs from central registry - NO duplicates
// NOTE: Seals, Exorcism, Holy Wrath removed (don't exist in WoW 11.2)
// NOTE: Seals, Exorcism, Holy Wrath removed (don't exist in WoW 12.0)
// ============================================================================
namespace RetributionPaladinSpells
{
// Holy Power Generators
constexpr uint32 SPELL_BLADE_OF_JUSTICE = WoW112Spells::Paladin::Retribution::BLADE_OF_JUSTICE;
constexpr uint32 SPELL_CRUSADER_STRIKE = WoW112Spells::Paladin::CRUSADER_STRIKE;
constexpr uint32 SPELL_JUDGMENT = WoW112Spells::Paladin::JUDGMENT;
constexpr uint32 SPELL_WAKE_OF_ASHES = WoW112Spells::Paladin::Retribution::WAKE_OF_ASHES;
constexpr uint32 SPELL_HAMMER_OF_WRATH = WoW112Spells::Paladin::HAMMER_OF_WRATH;
constexpr uint32 SPELL_BLADE_OF_JUSTICE = WoW120Spells::Paladin::Retribution::BLADE_OF_JUSTICE;
constexpr uint32 SPELL_CRUSADER_STRIKE = WoW120Spells::Paladin::CRUSADER_STRIKE;
constexpr uint32 SPELL_JUDGMENT = WoW120Spells::Paladin::JUDGMENT;
constexpr uint32 SPELL_WAKE_OF_ASHES = WoW120Spells::Paladin::Retribution::WAKE_OF_ASHES;
constexpr uint32 SPELL_HAMMER_OF_WRATH = WoW120Spells::Paladin::HAMMER_OF_WRATH;
// Holy Power Spenders
constexpr uint32 SPELL_TEMPLARS_VERDICT = WoW112Spells::Paladin::Retribution::TEMPLARS_VERDICT;
constexpr uint32 SPELL_FINAL_VERDICT = WoW112Spells::Paladin::Retribution::FINAL_VERDICT;
constexpr uint32 SPELL_DIVINE_STORM = WoW112Spells::Paladin::Retribution::DIVINE_STORM;
constexpr uint32 SPELL_JUSTICARS_VENGEANCE = WoW112Spells::Paladin::Retribution::JUSTICARS_VENGEANCE;
constexpr uint32 SPELL_TEMPLARS_VERDICT = WoW120Spells::Paladin::Retribution::TEMPLARS_VERDICT;
constexpr uint32 SPELL_FINAL_VERDICT = WoW120Spells::Paladin::Retribution::FINAL_VERDICT;
constexpr uint32 SPELL_DIVINE_STORM = WoW120Spells::Paladin::Retribution::DIVINE_STORM;
constexpr uint32 SPELL_JUSTICARS_VENGEANCE = WoW120Spells::Paladin::Retribution::JUSTICARS_VENGEANCE;
// Cooldowns
constexpr uint32 SPELL_AVENGING_WRATH = WoW112Spells::Paladin::AVENGING_WRATH;
constexpr uint32 SPELL_CRUSADE = WoW112Spells::Paladin::Retribution::CRUSADE;
constexpr uint32 SPELL_EXECUTION_SENTENCE = WoW112Spells::Paladin::Retribution::EXECUTION_SENTENCE;
constexpr uint32 SPELL_FINAL_RECKONING = WoW112Spells::Paladin::Retribution::FINAL_RECKONING;
constexpr uint32 SPELL_SHIELD_OF_VENGEANCE = WoW112Spells::Paladin::Retribution::SHIELD_OF_VENGEANCE;
constexpr uint32 SPELL_AVENGING_WRATH = WoW120Spells::Paladin::AVENGING_WRATH;
constexpr uint32 SPELL_CRUSADE = WoW120Spells::Paladin::Retribution::CRUSADE;
constexpr uint32 SPELL_EXECUTION_SENTENCE = WoW120Spells::Paladin::Retribution::EXECUTION_SENTENCE;
constexpr uint32 SPELL_FINAL_RECKONING = WoW120Spells::Paladin::Retribution::FINAL_RECKONING;
constexpr uint32 SPELL_SHIELD_OF_VENGEANCE = WoW120Spells::Paladin::Retribution::SHIELD_OF_VENGEANCE;
// Utility
constexpr uint32 SPELL_CONSECRATION = WoW112Spells::Paladin::CONSECRATION;
constexpr uint32 SPELL_HAMMER_OF_JUSTICE = WoW112Spells::Paladin::HAMMER_OF_JUSTICE;
constexpr uint32 SPELL_REBUKE = WoW112Spells::Paladin::REBUKE;
constexpr uint32 SPELL_BLESSING_OF_FREEDOM = WoW112Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 SPELL_DIVINE_SHIELD = WoW112Spells::Paladin::DIVINE_SHIELD;
constexpr uint32 SPELL_CONSECRATION = WoW120Spells::Paladin::CONSECRATION;
constexpr uint32 SPELL_HAMMER_OF_JUSTICE = WoW120Spells::Paladin::HAMMER_OF_JUSTICE;
constexpr uint32 SPELL_REBUKE = WoW120Spells::Paladin::REBUKE;
constexpr uint32 SPELL_BLESSING_OF_FREEDOM = WoW120Spells::Paladin::BLESSING_OF_FREEDOM;
constexpr uint32 SPELL_DIVINE_SHIELD = WoW120Spells::Paladin::DIVINE_SHIELD;
// Auras
constexpr uint32 SPELL_RETRIBUTION_AURA = WoW112Spells::Paladin::RETRIBUTION_AURA;
constexpr uint32 SPELL_RETRIBUTION_AURA = WoW120Spells::Paladin::RETRIBUTION_AURA;
// Procs
constexpr uint32 SPELL_ART_OF_WAR = WoW112Spells::Paladin::Retribution::ART_OF_WAR;
constexpr uint32 SPELL_DIVINE_PURPOSE = WoW112Spells::Paladin::Retribution::DIVINE_PURPOSE_RET;
constexpr uint32 SPELL_BLADE_OF_WRATH = WoW112Spells::Paladin::Retribution::BLADE_OF_WRATH;
constexpr uint32 SPELL_ART_OF_WAR = WoW120Spells::Paladin::Retribution::ART_OF_WAR;
constexpr uint32 SPELL_DIVINE_PURPOSE = WoW120Spells::Paladin::Retribution::DIVINE_PURPOSE_RET;
constexpr uint32 SPELL_BLADE_OF_WRATH = WoW120Spells::Paladin::Retribution::BLADE_OF_WRATH;
}
using namespace RetributionPaladinSpells;
@@ -145,7 +145,7 @@ public:
{
Player* bot = this->GetBot();
// Maintain Retribution Aura (WoW 11.2)
// Maintain Retribution Aura (WoW 12.0)
if (!bot->HasAura(SPELL_RETRIBUTION_AURA))
{
this->CastSpell(SPELL_RETRIBUTION_AURA, bot);
@@ -161,7 +161,7 @@ protected:
// ========================================================================
/**
* Execute abilities based on priority system (WoW 11.2)
* Execute abilities based on priority system (WoW 12.0)
*/
void ExecutePriorityRotation(::Unit* target)
{
@@ -192,7 +192,7 @@ protected:
}
}
// Blade of Justice - Primary Holy Power generator (WoW 11.2)
// Blade of Justice - Primary Holy Power generator (WoW 12.0)
if (this->CanUseAbility(SPELL_BLADE_OF_JUSTICE))
{
this->CastSpell(SPELL_BLADE_OF_JUSTICE, target);
@@ -200,7 +200,7 @@ protected:
return;
}
// Wake of Ashes - AoE HP generator (WoW 11.2)
// Wake of Ashes - AoE HP generator (WoW 12.0)
if (_hasArtOfWar && this->CanUseAbility(SPELL_WAKE_OF_ASHES))
{
this->CastSpell(SPELL_WAKE_OF_ASHES, this->GetBot());
@@ -234,7 +234,7 @@ protected:
}
/**
* Check for Retribution-specific procs (WoW 11.2)
* Check for Retribution-specific procs (WoW 12.0)
*/
void CheckForProcs()
{
@@ -248,7 +248,7 @@ protected:
}
/**
* NOTE: Seal twisting removed - Seals don't exist in WoW 11.2 (removed in Legion 7.0)
* NOTE: Seal twisting removed - Seals don't exist in WoW 12.0 (removed in Legion 7.0)
* This function is kept as a stub for API compatibility.
*/
void UpdateSealTwisting()
@@ -270,7 +270,7 @@ protected:
void OnCombatStartSpecific(::Unit* target) override
{
// Pop offensive cooldowns at start for burst (WoW 11.2)
// Pop offensive cooldowns at start for burst (WoW 12.0)
if (ShouldUseCooldowns(target))
{
Player* bot = this->GetBot();
@@ -526,7 +526,7 @@ protected:
})
})
}),
// Generate HP (WoW 11.2)
// Generate HP (WoW 12.0)
Sequence("Generate Holy Power", {
Condition("HP < 5", [this](Player* bot, Unit*) {
return this->_holyPower.GetAvailable() < 5;
@@ -573,7 +573,7 @@ protected:
}),
// ================================================================
// TIER 3: COOLDOWN USAGE (WoW 11.2)
// TIER 3: COOLDOWN USAGE (WoW 12.0)
// ================================================================
Sequence("Use Cooldowns", {
Condition("Boss or pack", [this](Player* bot, Unit* target) {
@@ -611,7 +611,7 @@ protected:
}),
// ================================================================
// TIER 4: STANDARD DPS ROTATION (WoW 11.2)
// TIER 4: STANDARD DPS ROTATION (WoW 12.0)
// ================================================================
Sequence("Standard Rotation", {
Selector("Rotation Priority", {
@@ -668,7 +668,7 @@ private:
CooldownManager _cooldowns;
// ========================================================================
// SPELL IDs now defined in RetributionPaladinSpells namespace above
// Legacy spells removed: Seals, Exorcism, Holy Wrath (don't exist in WoW 11.2)
// Legacy spells removed: Seals, Exorcism, Holy Wrath (don't exist in WoW 12.0)
// ========================================================================
// ========================================================================
@@ -33,8 +33,8 @@
#include "../Common/CooldownManager.h"
#include "../../BotAI.h"
// Central Spell Registry - See WoW112Spells::Priest namespace
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Priest namespace
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -51,27 +51,27 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Discipline Priest Spell IDs
// Using central registry: WoW112Spells::Priest and WoW112Spells::Priest::Discipline
constexpr uint32 DISC_SMITE = WoW112Spells::Priest::SMITE;
constexpr uint32 DISC_PENANCE = WoW112Spells::Priest::Discipline::PENANCE;
constexpr uint32 DISC_POWER_WORD_SHIELD = WoW112Spells::Priest::POWER_WORD_SHIELD;
constexpr uint32 DISC_SHADOW_MEND = WoW112Spells::Priest::Discipline::SHADOW_MEND;
constexpr uint32 DISC_PURGE_WICKED = WoW112Spells::Priest::Discipline::PURGE_THE_WICKED;
constexpr uint32 DISC_POWER_WORD_RADIANCE = WoW112Spells::Priest::Discipline::POWER_WORD_RADIANCE;
constexpr uint32 DISC_RAPTURE = WoW112Spells::Priest::Discipline::RAPTURE;
constexpr uint32 DISC_PAIN_SUPPRESSION = WoW112Spells::Priest::Discipline::PAIN_SUPPRESSION;
constexpr uint32 DISC_BARRIER = WoW112Spells::Priest::Discipline::POWER_WORD_BARRIER;
constexpr uint32 DISC_EVANGELISM = WoW112Spells::Priest::Discipline::EVANGELISM;
constexpr uint32 DISC_SCHISM = WoW112Spells::Priest::Discipline::SCHISM;
constexpr uint32 DISC_MINDGAMES = WoW112Spells::Priest::Discipline::MINDGAMES;
constexpr uint32 DISC_SHADOW_COVENANT = WoW112Spells::Priest::Discipline::SHADOW_COVENANT;
constexpr uint32 DISC_POWER_WORD_LIFE = WoW112Spells::Priest::Discipline::POWER_WORD_LIFE;
constexpr uint32 DISC_PURIFY = WoW112Spells::Priest::PURIFY;
constexpr uint32 DISC_SHADOW_WORD_PAIN = WoW112Spells::Priest::SHADOW_WORD_PAIN;
constexpr uint32 DISC_FADE = WoW112Spells::Priest::FADE;
constexpr uint32 DISC_DESPERATE_PRAYER = WoW112Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 DISC_POWER_WORD_FORTITUDE = WoW112Spells::Priest::POWER_WORD_FORTITUDE;
// WoW 12.0 (The War Within) - Discipline Priest Spell IDs
// Using central registry: WoW120Spells::Priest and WoW120Spells::Priest::Discipline
constexpr uint32 DISC_SMITE = WoW120Spells::Priest::SMITE;
constexpr uint32 DISC_PENANCE = WoW120Spells::Priest::Discipline::PENANCE;
constexpr uint32 DISC_POWER_WORD_SHIELD = WoW120Spells::Priest::POWER_WORD_SHIELD;
constexpr uint32 DISC_SHADOW_MEND = WoW120Spells::Priest::Discipline::SHADOW_MEND;
constexpr uint32 DISC_PURGE_WICKED = WoW120Spells::Priest::Discipline::PURGE_THE_WICKED;
constexpr uint32 DISC_POWER_WORD_RADIANCE = WoW120Spells::Priest::Discipline::POWER_WORD_RADIANCE;
constexpr uint32 DISC_RAPTURE = WoW120Spells::Priest::Discipline::RAPTURE;
constexpr uint32 DISC_PAIN_SUPPRESSION = WoW120Spells::Priest::Discipline::PAIN_SUPPRESSION;
constexpr uint32 DISC_BARRIER = WoW120Spells::Priest::Discipline::POWER_WORD_BARRIER;
constexpr uint32 DISC_EVANGELISM = WoW120Spells::Priest::Discipline::EVANGELISM;
constexpr uint32 DISC_SCHISM = WoW120Spells::Priest::Discipline::SCHISM;
constexpr uint32 DISC_MINDGAMES = WoW120Spells::Priest::Discipline::MINDGAMES;
constexpr uint32 DISC_SHADOW_COVENANT = WoW120Spells::Priest::Discipline::SHADOW_COVENANT;
constexpr uint32 DISC_POWER_WORD_LIFE = WoW120Spells::Priest::Discipline::POWER_WORD_LIFE;
constexpr uint32 DISC_PURIFY = WoW120Spells::Priest::PURIFY;
constexpr uint32 DISC_SHADOW_WORD_PAIN = WoW120Spells::Priest::SHADOW_WORD_PAIN;
constexpr uint32 DISC_FADE = WoW120Spells::Priest::FADE;
constexpr uint32 DISC_DESPERATE_PRAYER = WoW120Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 DISC_POWER_WORD_FORTITUDE = WoW120Spells::Priest::POWER_WORD_FORTITUDE;
// Atonement tracker - tracks which allies have Atonement buff for damage-to-healing conversion
class AtonementTracker
@@ -36,8 +36,8 @@
// TrinityCore 11.2 New Priest Talents
#include "PriestTalentEnhancements.h"
// Central Spell Registry - See WoW112Spells::Priest namespace
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Priest namespace
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -54,36 +54,36 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Holy Priest Spell IDs
// Using central registry: WoW112Spells::Priest and WoW112Spells::Priest::HolyPriest
constexpr uint32 HOLY_HEAL = WoW112Spells::Priest::HolyPriest::HEAL;
constexpr uint32 HOLY_FLASH_HEAL = WoW112Spells::Priest::FLASH_HEAL;
constexpr uint32 HOLY_PRAYER_OF_HEALING = WoW112Spells::Priest::HolyPriest::PRAYER_OF_HEALING;
constexpr uint32 HOLY_RENEW = WoW112Spells::Priest::HolyPriest::RENEW;
constexpr uint32 HOLY_PRAYER_OF_MENDING = WoW112Spells::Priest::HolyPriest::PRAYER_OF_MENDING;
constexpr uint32 HOLY_CIRCLE_OF_HEALING = WoW112Spells::Priest::HolyPriest::CIRCLE_OF_HEALING;
constexpr uint32 HOLY_HOLY_WORD_SERENITY = WoW112Spells::Priest::HolyPriest::HOLY_WORD_SERENITY;
constexpr uint32 HOLY_HOLY_WORD_SANCTIFY = WoW112Spells::Priest::HolyPriest::HOLY_WORD_SANCTIFY;
constexpr uint32 HOLY_HOLY_WORD_SALVATION = WoW112Spells::Priest::HolyPriest::HOLY_WORD_SALVATION;
constexpr uint32 HOLY_DIVINE_HYMN = WoW112Spells::Priest::HolyPriest::DIVINE_HYMN;
constexpr uint32 HOLY_GUARDIAN_SPIRIT = WoW112Spells::Priest::HolyPriest::GUARDIAN_SPIRIT;
constexpr uint32 HOLY_APOTHEOSIS = WoW112Spells::Priest::HolyPriest::APOTHEOSIS;
constexpr uint32 HOLY_DIVINE_STAR = WoW112Spells::Priest::Discipline::DIVINE_STAR;
constexpr uint32 HOLY_HALO = WoW112Spells::Priest::Discipline::HALO;
constexpr uint32 HOLY_HOLY_FIRE = WoW112Spells::Priest::HolyPriest::HOLY_FIRE;
constexpr uint32 HOLY_SMITE = WoW112Spells::Priest::SMITE;
constexpr uint32 HOLY_SYMBOL_OF_HOPE = WoW112Spells::Priest::HolyPriest::SYMBOL_OF_HOPE;
constexpr uint32 HOLY_FADE = WoW112Spells::Priest::FADE;
constexpr uint32 HOLY_DESPERATE_PRAYER = WoW112Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 HOLY_POWER_WORD_FORTITUDE = WoW112Spells::Priest::POWER_WORD_FORTITUDE;
constexpr uint32 HOLY_PURIFY = WoW112Spells::Priest::PURIFY;
// WoW 12.0 (The War Within) - Holy Priest Spell IDs
// Using central registry: WoW120Spells::Priest and WoW120Spells::Priest::HolyPriest
constexpr uint32 HOLY_HEAL = WoW120Spells::Priest::HolyPriest::HEAL;
constexpr uint32 HOLY_FLASH_HEAL = WoW120Spells::Priest::FLASH_HEAL;
constexpr uint32 HOLY_PRAYER_OF_HEALING = WoW120Spells::Priest::HolyPriest::PRAYER_OF_HEALING;
constexpr uint32 HOLY_RENEW = WoW120Spells::Priest::HolyPriest::RENEW;
constexpr uint32 HOLY_PRAYER_OF_MENDING = WoW120Spells::Priest::HolyPriest::PRAYER_OF_MENDING;
constexpr uint32 HOLY_CIRCLE_OF_HEALING = WoW120Spells::Priest::HolyPriest::CIRCLE_OF_HEALING;
constexpr uint32 HOLY_HOLY_WORD_SERENITY = WoW120Spells::Priest::HolyPriest::HOLY_WORD_SERENITY;
constexpr uint32 HOLY_HOLY_WORD_SANCTIFY = WoW120Spells::Priest::HolyPriest::HOLY_WORD_SANCTIFY;
constexpr uint32 HOLY_HOLY_WORD_SALVATION = WoW120Spells::Priest::HolyPriest::HOLY_WORD_SALVATION;
constexpr uint32 HOLY_DIVINE_HYMN = WoW120Spells::Priest::HolyPriest::DIVINE_HYMN;
constexpr uint32 HOLY_GUARDIAN_SPIRIT = WoW120Spells::Priest::HolyPriest::GUARDIAN_SPIRIT;
constexpr uint32 HOLY_APOTHEOSIS = WoW120Spells::Priest::HolyPriest::APOTHEOSIS;
constexpr uint32 HOLY_DIVINE_STAR = WoW120Spells::Priest::Discipline::DIVINE_STAR;
constexpr uint32 HOLY_HALO = WoW120Spells::Priest::Discipline::HALO;
constexpr uint32 HOLY_HOLY_FIRE = WoW120Spells::Priest::HolyPriest::HOLY_FIRE;
constexpr uint32 HOLY_SMITE = WoW120Spells::Priest::SMITE;
constexpr uint32 HOLY_SYMBOL_OF_HOPE = WoW120Spells::Priest::HolyPriest::SYMBOL_OF_HOPE;
constexpr uint32 HOLY_FADE = WoW120Spells::Priest::FADE;
constexpr uint32 HOLY_DESPERATE_PRAYER = WoW120Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 HOLY_POWER_WORD_FORTITUDE = WoW120Spells::Priest::POWER_WORD_FORTITUDE;
constexpr uint32 HOLY_PURIFY = WoW120Spells::Priest::PURIFY;
// NEW: TrinityCore 11.2 Talent Spell IDs
// See central registry: WoW112Spells::Priest::HolyPriest
constexpr uint32 HOLY_EMPYREAL_BLAZE = 372616; // -> WoW112Spells::Priest::HolyPriest::EMPYREAL_BLAZE
constexpr uint32 HOLY_EMPYREAL_BLAZE_AURA = 372617; // -> WoW112Spells::Priest::HolyPriest::EMPYREAL_BLAZE_AURA
constexpr uint32 HOLY_POWER_SURGE = 453109; // -> WoW112Spells::Priest::HolyPriest::POWER_SURGE
constexpr uint32 HOLY_POWER_SURGE_PERIODIC = 453112; // -> WoW112Spells::Priest::HolyPriest::POWER_SURGE_PERIODIC
// See central registry: WoW120Spells::Priest::HolyPriest
constexpr uint32 HOLY_EMPYREAL_BLAZE = 372616; // -> WoW120Spells::Priest::HolyPriest::EMPYREAL_BLAZE
constexpr uint32 HOLY_EMPYREAL_BLAZE_AURA = 372617; // -> WoW120Spells::Priest::HolyPriest::EMPYREAL_BLAZE_AURA
constexpr uint32 HOLY_POWER_SURGE = 453109; // -> WoW120Spells::Priest::HolyPriest::POWER_SURGE
constexpr uint32 HOLY_POWER_SURGE_PERIODIC = 453112; // -> WoW120Spells::Priest::HolyPriest::POWER_SURGE_PERIODIC
// Renew HoT tracker
class RenewTracker
@@ -35,10 +35,10 @@ namespace Playerbot
{
// Namespace aliases for central spell registry
namespace PriestCommon = WoW112Spells::Priest::Common;
namespace PriestDiscipline = WoW112Spells::Priest::Discipline;
namespace PriestHoly = WoW112Spells::Priest::HolyPriest;
namespace PriestShadow = WoW112Spells::Priest::Shadow;
namespace PriestCommon = WoW120Spells::Priest::Common;
namespace PriestDiscipline = WoW120Spells::Priest::Discipline;
namespace PriestHoly = WoW120Spells::Priest::HolyPriest;
namespace PriestShadow = WoW120Spells::Priest::Shadow;
// Talent IDs for specialization detection
// NOTE: Renamed to avoid conflict with PriestTalents namespace in PriestTalentEnhancements.h
@@ -642,12 +642,12 @@ void PriestAI::UpdatePriestBuffs()
}
}
// Note: Inner Fire, Divine Spirit, and Shadow Protection were removed in WoW 11.2
// Note: Inner Fire, Divine Spirit, and Shadow Protection were removed in WoW 12.0
}
void PriestAI::CastInnerFire()
{
// Inner Fire was removed in WoW 11.2 - this method is kept for backward compatibility
// Inner Fire was removed in WoW 12.0 - this method is kept for backward compatibility
// but does nothing in modern WoW
(void)_lastInnerFire; // Suppress unused variable warning
}
@@ -778,7 +778,7 @@ void PriestAI::CastDispelMagic()
void PriestAI::CastFearWard()
{
// Fear Ward was removed in WoW 11.2 - this method is kept for backward compatibility
// Fear Ward was removed in WoW 12.0 - this method is kept for backward compatibility
// but does nothing in modern WoW
(void)_lastFearWard; // Suppress unused variable warning
}
@@ -1022,7 +1022,7 @@ uint32 PriestAI::CountUnbuffedGroupMembers(uint32 spellId)
bool PriestAI::IsHealingSpell(uint32 spellId)
{
// Common healing spell IDs - Using central registry (WoW 11.2)
// Common healing spell IDs - Using central registry (WoW 12.0)
return (spellId == PriestHoly::HOLY_WORD_SERENITY || // 2050 - Holy Word: Serenity
spellId == PriestCommon::HEAL || // 2060 - Heal
spellId == PriestCommon::FLASH_HEAL || // 2061 - Flash Heal
@@ -1038,7 +1038,7 @@ bool PriestAI::IsHealingSpell(uint32 spellId)
bool PriestAI::IsDamageSpell(uint32 spellId)
{
// Common damage spell IDs - Using central registry (WoW 11.2)
// Common damage spell IDs - Using central registry (WoW 12.0)
return (spellId == PriestCommon::SHADOW_WORD_PAIN || // 589 - Shadow Word: Pain
spellId == PriestCommon::MIND_BLAST || // 8092 - Mind Blast
spellId == PriestCommon::MIND_FLAY || // 15407 - Mind Flay
@@ -1053,7 +1053,7 @@ bool PriestAI::IsDamageSpell(uint32 spellId)
bool PriestAI::IsEmergencyHeal(uint32 spellId)
{
// Fast heals for emergencies - Using central registry (WoW 11.2)
// Fast heals for emergencies - Using central registry (WoW 12.0)
return (spellId == PriestCommon::FLASH_HEAL || // 2061 - Flash Heal
spellId == PriestCommon::DESPERATE_PRAYER || // 19236 - Desperate Prayer
spellId == PriestHoly::GUARDIAN_SPIRIT || // 47788 - Guardian Spirit
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
#include "../BaselineRotationManager.h"
#include "Position.h"
#include <memory>
@@ -153,66 +153,66 @@ private:
static constexpr uint32 PSYCHIC_SCREAM_COOLDOWN = 30000; // 30 seconds
static constexpr float MANA_CONSERVATION_THRESHOLD = 0.3f; // 30%
static constexpr float EMERGENCY_HEALTH_THRESHOLD = 0.25f; // 25%
// Note: FEAR_WARD_COOLDOWN and INNER_FIRE_DURATION removed - spells no longer exist in WoW 11.2
// Note: FEAR_WARD_COOLDOWN and INNER_FIRE_DURATION removed - spells no longer exist in WoW 12.0
// Spell IDs - Using central registry (WoW 11.2)
// Spell IDs - Using central registry (WoW 12.0)
enum PriestSpells
{
// Utility spells
DISPEL_MAGIC = WoW112Spells::Priest::Common::DISPEL_MAGIC,
MASS_DISPEL = WoW112Spells::Priest::Common::MASS_DISPEL,
PSYCHIC_SCREAM = WoW112Spells::Priest::Common::PSYCHIC_SCREAM,
FADE = WoW112Spells::Priest::Common::FADE,
DESPERATE_PRAYER = WoW112Spells::Priest::Common::DESPERATE_PRAYER,
SILENCE = WoW112Spells::Priest::Common::SILENCE,
PURIFY = WoW112Spells::Priest::Common::PURIFY,
DISPERSION = WoW112Spells::Priest::Common::DISPERSION,
LEAP_OF_FAITH = WoW112Spells::Priest::Common::LEAP_OF_FAITH,
SHACKLE_UNDEAD = WoW112Spells::Priest::Common::SHACKLE_UNDEAD,
DISPEL_MAGIC = WoW120Spells::Priest::Common::DISPEL_MAGIC,
MASS_DISPEL = WoW120Spells::Priest::Common::MASS_DISPEL,
PSYCHIC_SCREAM = WoW120Spells::Priest::Common::PSYCHIC_SCREAM,
FADE = WoW120Spells::Priest::Common::FADE,
DESPERATE_PRAYER = WoW120Spells::Priest::Common::DESPERATE_PRAYER,
SILENCE = WoW120Spells::Priest::Common::SILENCE,
PURIFY = WoW120Spells::Priest::Common::PURIFY,
DISPERSION = WoW120Spells::Priest::Common::DISPERSION,
LEAP_OF_FAITH = WoW120Spells::Priest::Common::LEAP_OF_FAITH,
SHACKLE_UNDEAD = WoW120Spells::Priest::Common::SHACKLE_UNDEAD,
// Buffs
POWER_WORD_FORTITUDE = WoW112Spells::Priest::Common::POWER_WORD_FORTITUDE,
POWER_INFUSION = WoW112Spells::Priest::Common::POWER_INFUSION,
LEVITATE = WoW112Spells::Priest::Common::LEVITATE,
SYMBOL_OF_HOPE = WoW112Spells::Priest::HolyPriest::SYMBOL_OF_HOPE,
POWER_WORD_FORTITUDE = WoW120Spells::Priest::Common::POWER_WORD_FORTITUDE,
POWER_INFUSION = WoW120Spells::Priest::Common::POWER_INFUSION,
LEVITATE = WoW120Spells::Priest::Common::LEVITATE,
SYMBOL_OF_HOPE = WoW120Spells::Priest::HolyPriest::SYMBOL_OF_HOPE,
// Healing spells (Common)
FLASH_HEAL = WoW112Spells::Priest::Common::FLASH_HEAL,
HEAL = WoW112Spells::Priest::Common::HEAL,
RENEW = WoW112Spells::Priest::Common::RENEW,
PRAYER_OF_MENDING = WoW112Spells::Priest::Common::PRAYER_OF_MENDING,
POWER_WORD_SHIELD = WoW112Spells::Priest::Common::POWER_WORD_SHIELD,
FLASH_HEAL = WoW120Spells::Priest::Common::FLASH_HEAL,
HEAL = WoW120Spells::Priest::Common::HEAL,
RENEW = WoW120Spells::Priest::Common::RENEW,
PRAYER_OF_MENDING = WoW120Spells::Priest::Common::PRAYER_OF_MENDING,
POWER_WORD_SHIELD = WoW120Spells::Priest::Common::POWER_WORD_SHIELD,
// Damage spells (Common)
SMITE = WoW112Spells::Priest::Common::SMITE,
SHADOW_WORD_PAIN = WoW112Spells::Priest::Common::SHADOW_WORD_PAIN,
SHADOW_WORD_DEATH = WoW112Spells::Priest::Common::SHADOW_WORD_DEATH,
MIND_BLAST = WoW112Spells::Priest::Common::MIND_BLAST,
HOLY_FIRE = WoW112Spells::Priest::Common::HOLY_FIRE,
VAMPIRIC_TOUCH = WoW112Spells::Priest::Common::VAMPIRIC_TOUCH,
MIND_FLAY = WoW112Spells::Priest::Common::MIND_FLAY,
SMITE = WoW120Spells::Priest::Common::SMITE,
SHADOW_WORD_PAIN = WoW120Spells::Priest::Common::SHADOW_WORD_PAIN,
SHADOW_WORD_DEATH = WoW120Spells::Priest::Common::SHADOW_WORD_DEATH,
MIND_BLAST = WoW120Spells::Priest::Common::MIND_BLAST,
HOLY_FIRE = WoW120Spells::Priest::Common::HOLY_FIRE,
VAMPIRIC_TOUCH = WoW120Spells::Priest::Common::VAMPIRIC_TOUCH,
MIND_FLAY = WoW120Spells::Priest::Common::MIND_FLAY,
// Holy spec
HOLY_WORD_SERENITY = WoW112Spells::Priest::Common::HOLY_WORD_SERENITY,
HOLY_WORD_SANCTIFY = WoW112Spells::Priest::Common::HOLY_WORD_SANCTIFY,
CIRCLE_OF_HEALING = WoW112Spells::Priest::Common::CIRCLE_OF_HEALING,
GUARDIAN_SPIRIT = WoW112Spells::Priest::HolyPriest::GUARDIAN_SPIRIT,
DIVINE_HYMN = WoW112Spells::Priest::HolyPriest::DIVINE_HYMN,
PRAYER_OF_HEALING = WoW112Spells::Priest::HolyPriest::PRAYER_OF_HEALING,
HOLY_WORD_SERENITY = WoW120Spells::Priest::Common::HOLY_WORD_SERENITY,
HOLY_WORD_SANCTIFY = WoW120Spells::Priest::Common::HOLY_WORD_SANCTIFY,
CIRCLE_OF_HEALING = WoW120Spells::Priest::Common::CIRCLE_OF_HEALING,
GUARDIAN_SPIRIT = WoW120Spells::Priest::HolyPriest::GUARDIAN_SPIRIT,
DIVINE_HYMN = WoW120Spells::Priest::HolyPriest::DIVINE_HYMN,
PRAYER_OF_HEALING = WoW120Spells::Priest::HolyPriest::PRAYER_OF_HEALING,
// Discipline spec
PENANCE = WoW112Spells::Priest::Discipline::PENANCE,
SHADOW_MEND = WoW112Spells::Priest::Discipline::SHADOW_MEND,
PAIN_SUPPRESSION = WoW112Spells::Priest::Discipline::PAIN_SUPPRESSION,
POWER_WORD_BARRIER = WoW112Spells::Priest::Discipline::POWER_WORD_BARRIER,
RAPTURE = WoW112Spells::Priest::Discipline::RAPTURE,
PENANCE = WoW120Spells::Priest::Discipline::PENANCE,
SHADOW_MEND = WoW120Spells::Priest::Discipline::SHADOW_MEND,
PAIN_SUPPRESSION = WoW120Spells::Priest::Discipline::PAIN_SUPPRESSION,
POWER_WORD_BARRIER = WoW120Spells::Priest::Discipline::POWER_WORD_BARRIER,
RAPTURE = WoW120Spells::Priest::Discipline::RAPTURE,
// Shadow spec
SHADOWFORM = WoW112Spells::Priest::Common::SHADOWFORM,
DEVOURING_PLAGUE = WoW112Spells::Priest::Common::DEVOURING_PLAGUE,
VAMPIRIC_EMBRACE = WoW112Spells::Priest::Shadow::VAMPIRIC_EMBRACE,
VOID_ERUPTION = WoW112Spells::Priest::Shadow::VOID_ERUPTION,
VOID_BOLT = WoW112Spells::Priest::Shadow::VOID_BOLT
SHADOWFORM = WoW120Spells::Priest::Common::SHADOWFORM,
DEVOURING_PLAGUE = WoW120Spells::Priest::Common::DEVOURING_PLAGUE,
VAMPIRIC_EMBRACE = WoW120Spells::Priest::Shadow::VAMPIRIC_EMBRACE,
VOID_ERUPTION = WoW120Spells::Priest::Shadow::VOID_ERUPTION,
VOID_BOLT = WoW120Spells::Priest::Shadow::VOID_BOLT
};
};
@@ -36,8 +36,8 @@
// TrinityCore 11.2 New Priest Talents
#include "PriestTalentEnhancements.h"
// Central Spell Registry - See WoW112Spells::Priest namespace
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Priest namespace
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -54,33 +54,33 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Shadow Priest Spell IDs
// Using central registry: WoW112Spells::Priest and WoW112Spells::Priest::Shadow
constexpr uint32 SHADOW_MIND_BLAST = WoW112Spells::Priest::Shadow::MIND_BLAST_SHADOW;
constexpr uint32 SHADOW_MIND_FLAY = WoW112Spells::Priest::Shadow::MIND_FLAY;
constexpr uint32 SHADOW_VAMPIRIC_TOUCH = WoW112Spells::Priest::Shadow::VAMPIRIC_TOUCH;
constexpr uint32 SHADOW_SHADOW_WORD_PAIN = WoW112Spells::Priest::SHADOW_WORD_PAIN;
constexpr uint32 SHADOW_DEVOURING_PLAGUE = WoW112Spells::Priest::Shadow::DEVOURING_PLAGUE;
constexpr uint32 SHADOW_VOID_ERUPTION = WoW112Spells::Priest::Shadow::VOID_ERUPTION;
constexpr uint32 SHADOW_VOID_BOLT = WoW112Spells::Priest::Shadow::VOID_BOLT;
constexpr uint32 SHADOW_MIND_SEAR = WoW112Spells::Priest::Shadow::MIND_SEAR;
constexpr uint32 SHADOW_SHADOW_CRASH = WoW112Spells::Priest::Shadow::SHADOW_CRASH;
constexpr uint32 SHADOW_VOID_TORRENT = WoW112Spells::Priest::Shadow::VOID_TORRENT;
constexpr uint32 SHADOW_DARK_ASCENSION = WoW112Spells::Priest::Shadow::DARK_ASCENSION;
constexpr uint32 SHADOW_MINDGAMES = WoW112Spells::Priest::Shadow::MINDGAMES_SHADOW;
constexpr uint32 SHADOW_SHADOW_WORD_DEATH = WoW112Spells::Priest::SHADOW_WORD_DEATH;
constexpr uint32 SHADOW_VAMPIRIC_EMBRACE = WoW112Spells::Priest::Shadow::VAMPIRIC_EMBRACE;
constexpr uint32 SHADOW_DISPERSION = WoW112Spells::Priest::Shadow::DISPERSION;
constexpr uint32 SHADOW_FADE = WoW112Spells::Priest::FADE;
constexpr uint32 SHADOW_DESPERATE_PRAYER = WoW112Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 SHADOW_POWER_WORD_FORTITUDE = WoW112Spells::Priest::POWER_WORD_FORTITUDE;
constexpr uint32 SHADOW_SHADOWFORM = WoW112Spells::Priest::Shadow::SHADOWFORM;
// WoW 12.0 (The War Within) - Shadow Priest Spell IDs
// Using central registry: WoW120Spells::Priest and WoW120Spells::Priest::Shadow
constexpr uint32 SHADOW_MIND_BLAST = WoW120Spells::Priest::Shadow::MIND_BLAST_SHADOW;
constexpr uint32 SHADOW_MIND_FLAY = WoW120Spells::Priest::Shadow::MIND_FLAY;
constexpr uint32 SHADOW_VAMPIRIC_TOUCH = WoW120Spells::Priest::Shadow::VAMPIRIC_TOUCH;
constexpr uint32 SHADOW_SHADOW_WORD_PAIN = WoW120Spells::Priest::SHADOW_WORD_PAIN;
constexpr uint32 SHADOW_DEVOURING_PLAGUE = WoW120Spells::Priest::Shadow::DEVOURING_PLAGUE;
constexpr uint32 SHADOW_VOID_ERUPTION = WoW120Spells::Priest::Shadow::VOID_ERUPTION;
constexpr uint32 SHADOW_VOID_BOLT = WoW120Spells::Priest::Shadow::VOID_BOLT;
constexpr uint32 SHADOW_MIND_SEAR = WoW120Spells::Priest::Shadow::MIND_SEAR;
constexpr uint32 SHADOW_SHADOW_CRASH = WoW120Spells::Priest::Shadow::SHADOW_CRASH;
constexpr uint32 SHADOW_VOID_TORRENT = WoW120Spells::Priest::Shadow::VOID_TORRENT;
constexpr uint32 SHADOW_DARK_ASCENSION = WoW120Spells::Priest::Shadow::DARK_ASCENSION;
constexpr uint32 SHADOW_MINDGAMES = WoW120Spells::Priest::Shadow::MINDGAMES_SHADOW;
constexpr uint32 SHADOW_SHADOW_WORD_DEATH = WoW120Spells::Priest::SHADOW_WORD_DEATH;
constexpr uint32 SHADOW_VAMPIRIC_EMBRACE = WoW120Spells::Priest::Shadow::VAMPIRIC_EMBRACE;
constexpr uint32 SHADOW_DISPERSION = WoW120Spells::Priest::Shadow::DISPERSION;
constexpr uint32 SHADOW_FADE = WoW120Spells::Priest::FADE;
constexpr uint32 SHADOW_DESPERATE_PRAYER = WoW120Spells::Priest::DESPERATE_PRAYER;
constexpr uint32 SHADOW_POWER_WORD_FORTITUDE = WoW120Spells::Priest::POWER_WORD_FORTITUDE;
constexpr uint32 SHADOW_SHADOWFORM = WoW120Spells::Priest::Shadow::SHADOWFORM;
// TrinityCore 11.2 Talent Spell IDs
// Using central registry: WoW112Spells::Priest::Shadow
constexpr uint32 SHADOW_MINDBENDER = WoW112Spells::Priest::Shadow::MINDBENDER;
constexpr uint32 SHADOW_SHADOWFIEND = WoW112Spells::Priest::Shadow::SHADOWFIEND_SHADOW;
constexpr uint32 SHADOW_HALO = WoW112Spells::Priest::Shadow::HALO_SHADOW;
// Using central registry: WoW120Spells::Priest::Shadow
constexpr uint32 SHADOW_MINDBENDER = WoW120Spells::Priest::Shadow::MINDBENDER;
constexpr uint32 SHADOW_SHADOWFIEND = WoW120Spells::Priest::Shadow::SHADOWFIEND_SHADOW;
constexpr uint32 SHADOW_HALO = WoW120Spells::Priest::Shadow::HALO_SHADOW;
// Insanity tracker (Shadow Priest secondary resource - primary is still Mana)
class InsanityTracker
@@ -1292,7 +1292,7 @@ float ResourceCalculator::CalculateManaRegen(Player* player)
if (!player)
return 0.0f;
// WoW 11.2 mana regeneration formula based on intellect and haste
// WoW 12.0 mana regeneration formula based on intellect and haste
// Base mana regen = intellect * coefficient * haste modifier
float intellect = player->GetStat(STAT_INTELLECT);
// Base regeneration scales with max mana pool size
@@ -1389,7 +1389,7 @@ float ResourceCalculator::CalculateEnergyRegen(Player* player)
if (!player)
return 0.0f;
// WoW 11.2 energy regeneration: base 10/second + haste scaling
// WoW 12.0 energy regeneration: base 10/second + haste scaling
constexpr float BASE_ENERGY_REGEN = 10.0f;
float baseRegen = BASE_ENERGY_REGEN;
@@ -1489,7 +1489,7 @@ float ResourceCalculator::CalculateRageDecay(Player* player)
if (!player)
return 0.0f;
// WoW 11.2 rage decay mechanics
// WoW 12.0 rage decay mechanics
// Rage decays at ~1 rage per second out of combat after a delay
// No decay while in combat
@@ -1945,7 +1945,7 @@ uint32 ResourceCalculator::GetComboPointsFromSpell(uint32 spellId)
}
}
// Note: In WoW 11.2, combo point generation is typically handled
// Note: In WoW 12.0, combo point generation is typically handled
// via SPELL_EFFECT_ENERGIZE rather than aura effects
}
@@ -18,9 +18,9 @@ namespace Playerbot
{
/**
* WoW 11.2 (The War Within) Complete Resource Type System
* WoW 12.0 (The War Within) Complete Resource Type System
*
* This file defines all resource types used by the 13 classes in WoW 11.2.
* This file defines all resource types used by the 13 classes in WoW 12.0.
* Each resource type is designed to work with the CombatSpecializationBase template.
*/
@@ -30,9 +30,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Rogue namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Rogue namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -57,16 +57,16 @@ class AssassinationRogueRefactored : public MeleeDpsSpecialization<ComboPointsAs
{
public:
// Assassination Rogue Spell IDs
// Using central registry: WoW112Spells::Rogue and WoW112Spells::Rogue::Assassination
static constexpr uint32 GARROTE = WoW112Spells::Rogue::Assassination::GARROTE;
static constexpr uint32 RUPTURE = WoW112Spells::Rogue::Assassination::RUPTURE;
static constexpr uint32 ENVENOM = WoW112Spells::Rogue::Assassination::ENVENOM;
static constexpr uint32 VENDETTA = WoW112Spells::Rogue::Assassination::VENDETTA;
static constexpr uint32 MUTILATE = WoW112Spells::Rogue::Assassination::MUTILATE;
static constexpr uint32 FAN_OF_KNIVES = WoW112Spells::Rogue::FAN_OF_KNIVES;
static constexpr uint32 CRIMSON_TEMPEST = WoW112Spells::Rogue::Assassination::CRIMSON_TEMPEST;
static constexpr uint32 EXSANGUINATE = WoW112Spells::Rogue::Assassination::EXSANGUINATE;
static constexpr uint32 KINGSBANE = WoW112Spells::Rogue::Assassination::KINGSBANE;
// Using central registry: WoW120Spells::Rogue and WoW120Spells::Rogue::Assassination
static constexpr uint32 GARROTE = WoW120Spells::Rogue::Assassination::GARROTE;
static constexpr uint32 RUPTURE = WoW120Spells::Rogue::Assassination::RUPTURE;
static constexpr uint32 ENVENOM = WoW120Spells::Rogue::Assassination::ENVENOM;
static constexpr uint32 VENDETTA = WoW120Spells::Rogue::Assassination::VENDETTA;
static constexpr uint32 MUTILATE = WoW120Spells::Rogue::Assassination::MUTILATE;
static constexpr uint32 FAN_OF_KNIVES = WoW120Spells::Rogue::FAN_OF_KNIVES;
static constexpr uint32 CRIMSON_TEMPEST = WoW120Spells::Rogue::Assassination::CRIMSON_TEMPEST;
static constexpr uint32 EXSANGUINATE = WoW120Spells::Rogue::Assassination::EXSANGUINATE;
static constexpr uint32 KINGSBANE = WoW120Spells::Rogue::Assassination::KINGSBANE;
public:
@@ -25,9 +25,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Rogue namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Rogue namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -49,36 +49,36 @@ using bot::ai::SpellCategory;
// NOTE: ComboPointsOutlaw is defined in RogueResourceTypes.h (spec-specific resource type)
// ============================================================================
// OUTLAW ROGUE SPELL IDs (WoW 11.2 - The War Within) - UNIQUE ONLY
// See central registry: WoW112Spells::Rogue and WoW112Spells::Rogue::Outlaw
// OUTLAW ROGUE SPELL IDs (WoW 12.0 - The War Within) - UNIQUE ONLY
// See central registry: WoW120Spells::Rogue and WoW120Spells::Rogue::Outlaw
// ============================================================================
enum OutlawSpells
{
// WoW 11.2 Outlaw-specific spells
// Using central registry: WoW112Spells::Rogue and WoW112Spells::Rogue::Outlaw
PISTOL_SHOT = WoW112Spells::Rogue::Outlaw::PISTOL_SHOT,
BETWEEN_THE_EYES = WoW112Spells::Rogue::Outlaw::BETWEEN_THE_EYES,
DISPATCH_OUTLAW = WoW112Spells::Rogue::Outlaw::DISPATCH,
// WoW 12.0 Outlaw-specific spells
// Using central registry: WoW120Spells::Rogue and WoW120Spells::Rogue::Outlaw
PISTOL_SHOT = WoW120Spells::Rogue::Outlaw::PISTOL_SHOT,
BETWEEN_THE_EYES = WoW120Spells::Rogue::Outlaw::BETWEEN_THE_EYES,
DISPATCH_OUTLAW = WoW120Spells::Rogue::Outlaw::DISPATCH,
// Roll the Bones System (Outlaw unique)
ROLL_THE_BONES = WoW112Spells::Rogue::Outlaw::ROLL_THE_BONES,
BUFF_RUTHLESS_PRECISION = WoW112Spells::Rogue::Outlaw::RUTHLESS_PRECISION,
BUFF_GRAND_MELEE = WoW112Spells::Rogue::Outlaw::GRAND_MELEE,
BUFF_BROADSIDE = WoW112Spells::Rogue::Outlaw::BROADSIDE,
BUFF_TRUE_BEARING = WoW112Spells::Rogue::Outlaw::TRUE_BEARING,
BUFF_SKULL_AND_CROSSBONES = WoW112Spells::Rogue::Outlaw::SKULL_AND_CROSSBONES,
BUFF_BURIED_TREASURE = WoW112Spells::Rogue::Outlaw::BURIED_TREASURE,
ROLL_THE_BONES = WoW120Spells::Rogue::Outlaw::ROLL_THE_BONES,
BUFF_RUTHLESS_PRECISION = WoW120Spells::Rogue::Outlaw::RUTHLESS_PRECISION,
BUFF_GRAND_MELEE = WoW120Spells::Rogue::Outlaw::GRAND_MELEE,
BUFF_BROADSIDE = WoW120Spells::Rogue::Outlaw::BROADSIDE,
BUFF_TRUE_BEARING = WoW120Spells::Rogue::Outlaw::TRUE_BEARING,
BUFF_SKULL_AND_CROSSBONES = WoW120Spells::Rogue::Outlaw::SKULL_AND_CROSSBONES,
BUFF_BURIED_TREASURE = WoW120Spells::Rogue::Outlaw::BURIED_TREASURE,
// Talents (Outlaw specific)
BLADE_RUSH = WoW112Spells::Rogue::Outlaw::BLADE_RUSH,
OPPORTUNITY_PROC = WoW112Spells::Rogue::Outlaw::OPPORTUNITY_PROC,
GHOSTLY_STRIKE = WoW112Spells::Rogue::Outlaw::GHOSTLY_STRIKE,
DREADBLADES = WoW112Spells::Rogue::Outlaw::DREADBLADES,
BLADE_RUSH = WoW120Spells::Rogue::Outlaw::BLADE_RUSH,
OPPORTUNITY_PROC = WoW120Spells::Rogue::Outlaw::OPPORTUNITY_PROC,
GHOSTLY_STRIKE = WoW120Spells::Rogue::Outlaw::GHOSTLY_STRIKE,
DREADBLADES = WoW120Spells::Rogue::Outlaw::DREADBLADES,
// Outlaw-specific utility
FEINT_OUTLAW = WoW112Spells::Rogue::FEINT,
MARKED_FOR_DEATH = WoW112Spells::Rogue::MARKED_FOR_DEATH
FEINT_OUTLAW = WoW120Spells::Rogue::FEINT,
MARKED_FOR_DEATH = WoW120Spells::Rogue::MARKED_FOR_DEATH
};
// ============================================================================
@@ -158,7 +158,7 @@ public:
private:
bool IsFinisher(uint32 spellId) const
{
// WoW 11.2 finishers - EXPOSE_ARMOR removed from game
// WoW 12.0 finishers - EXPOSE_ARMOR removed from game
return spellId == RogueAI::SLICE_AND_DICE || spellId == RogueAI::RUPTURE ||
spellId == RogueAI::EVISCERATE || spellId == RogueAI::KIDNEY_SHOT ||
spellId == RogueAI::ENVENOM || spellId == RogueAI::CRIMSON_TEMPEST ||
@@ -661,7 +661,7 @@ void RogueAI::ExecuteRogueBasicRotation(Unit* target)
}
}
// NOTE: EXPOSE_ARMOR removed from WoW 11.2
// NOTE: EXPOSE_ARMOR removed from WoW 12.0
// Armor reduction is now provided by other debuffs (Colossus Smash, etc.)
// Kidney Shot for control
@@ -1146,7 +1146,7 @@ bool RogueAI::BuildComboPoints(Unit* target)
break;
case 2: // Subtlety
// NOTE: HEMORRHAGE removed from WoW 11.2
// NOTE: HEMORRHAGE removed from WoW 12.0
// Subtlety now uses Shadowstrike (from stealth/Shadow Dance) and Backstab
if (CanUseAbility(SHADOWSTRIKE))
{
@@ -1270,7 +1270,7 @@ void RogueAI::ApplyPoisons()
break;
case 2: // Subtlety
// NOTE: MIND_NUMBING_POISON renamed to NUMBING_POISON in WoW 11.2
// NOTE: MIND_NUMBING_POISON renamed to NUMBING_POISON in WoW 12.0
poisonSpell = NUMBING_POISON;
break;
}
@@ -1357,7 +1357,7 @@ bool RogueAI::HasEnoughResource(uint32 spellId)
bool RogueAI::IsFinisher(uint32 spellId) const
{
// WoW 11.2 finishers - EXPOSE_ARMOR and DEADLY_THROW removed from game
// WoW 12.0 finishers - EXPOSE_ARMOR and DEADLY_THROW removed from game
return spellId == SLICE_AND_DICE || spellId == RUPTURE ||
spellId == EVISCERATE || spellId == KIDNEY_SHOT ||
spellId == ENVENOM || spellId == CRIMSON_TEMPEST ||
@@ -11,7 +11,7 @@
#define ROGUE_AI_H
#include "../ClassAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
#include "Position.h"
#include "Unit.h"
#include "../Combat/BotThreatManager.h"
@@ -171,89 +171,89 @@ private:
uint32 _lastPoison;
public:
// Rogue Spell IDs - Using central registry (WoW 11.2)
// See WoW112Spells::Rogue namespace in SpellValidation_WoW112_Part2.h
// Rogue Spell IDs - Using central registry (WoW 12.0)
// See WoW120Spells::Rogue namespace in SpellValidation_WoW120_Part2.h
enum RogueSpells
{
// ====================================================================
// Combo Point Builders - All specs use central registry
// ====================================================================
SINISTER_STRIKE = WoW112Spells::Rogue::Common::SINISTER_STRIKE,
BACKSTAB = WoW112Spells::Rogue::Common::BACKSTAB,
MUTILATE = WoW112Spells::Rogue::Common::MUTILATE,
SHIV = WoW112Spells::Rogue::Common::SHIV,
AMBUSH = WoW112Spells::Rogue::Common::AMBUSH,
GARROTE = WoW112Spells::Rogue::Common::GARROTE,
CHEAP_SHOT = WoW112Spells::Rogue::Common::CHEAP_SHOT,
SHADOWSTRIKE = WoW112Spells::Rogue::Common::SHADOWSTRIKE,
SINISTER_STRIKE = WoW120Spells::Rogue::Common::SINISTER_STRIKE,
BACKSTAB = WoW120Spells::Rogue::Common::BACKSTAB,
MUTILATE = WoW120Spells::Rogue::Common::MUTILATE,
SHIV = WoW120Spells::Rogue::Common::SHIV,
AMBUSH = WoW120Spells::Rogue::Common::AMBUSH,
GARROTE = WoW120Spells::Rogue::Common::GARROTE,
CHEAP_SHOT = WoW120Spells::Rogue::Common::CHEAP_SHOT,
SHADOWSTRIKE = WoW120Spells::Rogue::Common::SHADOWSTRIKE,
// ====================================================================
// Combo Point Finishers - Using central registry
// ====================================================================
SLICE_AND_DICE = WoW112Spells::Rogue::Common::SLICE_AND_DICE,
RUPTURE = WoW112Spells::Rogue::Common::RUPTURE,
EVISCERATE = WoW112Spells::Rogue::Common::EVISCERATE,
KIDNEY_SHOT = WoW112Spells::Rogue::Common::KIDNEY_SHOT,
ENVENOM = WoW112Spells::Rogue::Common::ENVENOM,
CRIMSON_TEMPEST = WoW112Spells::Rogue::Common::CRIMSON_TEMPEST,
BETWEEN_THE_EYES = WoW112Spells::Rogue::Common::BETWEEN_THE_EYES,
SLICE_AND_DICE = WoW120Spells::Rogue::Common::SLICE_AND_DICE,
RUPTURE = WoW120Spells::Rogue::Common::RUPTURE,
EVISCERATE = WoW120Spells::Rogue::Common::EVISCERATE,
KIDNEY_SHOT = WoW120Spells::Rogue::Common::KIDNEY_SHOT,
ENVENOM = WoW120Spells::Rogue::Common::ENVENOM,
CRIMSON_TEMPEST = WoW120Spells::Rogue::Common::CRIMSON_TEMPEST,
BETWEEN_THE_EYES = WoW120Spells::Rogue::Common::BETWEEN_THE_EYES,
// ====================================================================
// Cooldowns - Using central registry
// ====================================================================
BLADE_FLURRY = WoW112Spells::Rogue::Common::BLADE_FLURRY,
ADRENALINE_RUSH = WoW112Spells::Rogue::Common::ADRENALINE_RUSH,
KILLING_SPREE = WoW112Spells::Rogue::Common::KILLING_SPREE,
VENDETTA = WoW112Spells::Rogue::Common::VENDETTA,
SHADOW_BLADES = WoW112Spells::Rogue::Common::SHADOW_BLADES,
COLD_BLOOD = WoW112Spells::Rogue::Common::COLD_BLOOD,
SHADOW_DANCE = WoW112Spells::Rogue::Common::SHADOW_DANCE,
SHADOWSTEP = WoW112Spells::Rogue::Common::SHADOWSTEP,
SYMBOLS_OF_DEATH = WoW112Spells::Rogue::Common::SYMBOLS_OF_DEATH,
MARKED_FOR_DEATH = WoW112Spells::Rogue::Common::MARKED_FOR_DEATH,
BLADE_FLURRY = WoW120Spells::Rogue::Common::BLADE_FLURRY,
ADRENALINE_RUSH = WoW120Spells::Rogue::Common::ADRENALINE_RUSH,
KILLING_SPREE = WoW120Spells::Rogue::Common::KILLING_SPREE,
VENDETTA = WoW120Spells::Rogue::Common::VENDETTA,
SHADOW_BLADES = WoW120Spells::Rogue::Common::SHADOW_BLADES,
COLD_BLOOD = WoW120Spells::Rogue::Common::COLD_BLOOD,
SHADOW_DANCE = WoW120Spells::Rogue::Common::SHADOW_DANCE,
SHADOWSTEP = WoW120Spells::Rogue::Common::SHADOWSTEP,
SYMBOLS_OF_DEATH = WoW120Spells::Rogue::Common::SYMBOLS_OF_DEATH,
MARKED_FOR_DEATH = WoW120Spells::Rogue::Common::MARKED_FOR_DEATH,
// ====================================================================
// Utility - Using central registry
// ====================================================================
KICK = WoW112Spells::Rogue::Common::KICK,
BLIND = WoW112Spells::Rogue::Common::BLIND,
SAP = WoW112Spells::Rogue::Common::SAP,
VANISH = WoW112Spells::Rogue::Common::VANISH,
STEALTH = WoW112Spells::Rogue::Common::STEALTH,
SPRINT = WoW112Spells::Rogue::Common::SPRINT,
CLOAK_OF_SHADOWS = WoW112Spells::Rogue::Common::CLOAK_OF_SHADOWS,
EVASION = WoW112Spells::Rogue::Common::EVASION,
FEINT = WoW112Spells::Rogue::Common::FEINT,
TRICKS_OF_THE_TRADE = WoW112Spells::Rogue::Common::TRICKS_OF_THE_TRADE,
KICK = WoW120Spells::Rogue::Common::KICK,
BLIND = WoW120Spells::Rogue::Common::BLIND,
SAP = WoW120Spells::Rogue::Common::SAP,
VANISH = WoW120Spells::Rogue::Common::VANISH,
STEALTH = WoW120Spells::Rogue::Common::STEALTH,
SPRINT = WoW120Spells::Rogue::Common::SPRINT,
CLOAK_OF_SHADOWS = WoW120Spells::Rogue::Common::CLOAK_OF_SHADOWS,
EVASION = WoW120Spells::Rogue::Common::EVASION,
FEINT = WoW120Spells::Rogue::Common::FEINT,
TRICKS_OF_THE_TRADE = WoW120Spells::Rogue::Common::TRICKS_OF_THE_TRADE,
// ====================================================================
// Poisons - Using central registry
// ====================================================================
DEADLY_POISON = WoW112Spells::Rogue::Common::DEADLY_POISON,
INSTANT_POISON = WoW112Spells::Rogue::Common::INSTANT_POISON,
WOUND_POISON = WoW112Spells::Rogue::Common::WOUND_POISON,
NUMBING_POISON = WoW112Spells::Rogue::NUMBING_POISON,
CRIPPLING_POISON = WoW112Spells::Rogue::Common::CRIPPLING_POISON,
DEADLY_POISON = WoW120Spells::Rogue::Common::DEADLY_POISON,
INSTANT_POISON = WoW120Spells::Rogue::Common::INSTANT_POISON,
WOUND_POISON = WoW120Spells::Rogue::Common::WOUND_POISON,
NUMBING_POISON = WoW120Spells::Rogue::NUMBING_POISON,
CRIPPLING_POISON = WoW120Spells::Rogue::Common::CRIPPLING_POISON,
// ====================================================================
// AoE - Using central registry
// ====================================================================
FAN_OF_KNIVES = WoW112Spells::Rogue::Common::FAN_OF_KNIVES,
FAN_OF_KNIVES = WoW120Spells::Rogue::Common::FAN_OF_KNIVES,
// ====================================================================
// Assassination Spec - Using central registry
// ====================================================================
DEATHMARK = WoW112Spells::Rogue::Assassination::DEATHMARK,
POISONED_KNIFE = WoW112Spells::Rogue::Assassination::POISONED_KNIFE,
DEATHMARK = WoW120Spells::Rogue::Assassination::DEATHMARK,
POISONED_KNIFE = WoW120Spells::Rogue::Assassination::POISONED_KNIFE,
// ====================================================================
// Talents - Using central registry where available
// ====================================================================
VIGOR = 14983, // Passive talent for energy pool (still used in 11.2)
DEEPER_STRATAGEM = WoW112Spells::Rogue::Subtlety::DEEPER_STRATAGEM
DEEPER_STRATAGEM = WoW120Spells::Rogue::Subtlety::DEEPER_STRATAGEM
// ====================================================================
// REMOVED SPELLS (Not in WoW 11.2):
// REMOVED SPELLS (Not in WoW 12.0):
// - HEMORRHAGE (16511) - Removed from game
// - EXPOSE_ARMOR (8647) - Removed from game
// - DEADLY_THROW (26679) - Removed from game
@@ -27,7 +27,7 @@ namespace Playerbot
* Implements ComplexResource concept requirements for template-based specialization system.
*
* @note Shared across Assassination, Outlaw, and Subtlety specializations
* @since WoW 11.2 (The War Within)
* @since WoW 12.0 (The War Within)
*/
struct EnergyComboResource
{
@@ -25,9 +25,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Rogue namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Rogue namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -50,44 +50,44 @@ using bot::ai::SpellCategory;
// NOTE: ComboPointsSubtlety is defined in RogueResourceTypes.h (spec-specific resource type)
// ============================================================================
// SUBTLETY ROGUE SPELL IDs (WoW 11.2 - The War Within)
// See central registry: WoW112Spells::Rogue and WoW112Spells::Rogue::Subtlety
// SUBTLETY ROGUE SPELL IDs (WoW 12.0 - The War Within)
// See central registry: WoW120Spells::Rogue and WoW120Spells::Rogue::Subtlety
// ============================================================================
enum SubtletySpells
{
// NOTE: Shared spells (BACKSTAB, RUPTURE, STEALTH, VANISH, KICK, etc.) are in RogueSpecialization.h
// Only Subtlety-UNIQUE spells defined here to avoid duplicate definitions
// Using central registry: WoW112Spells::Rogue and WoW112Spells::Rogue::Subtlety
// Using central registry: WoW120Spells::Rogue and WoW120Spells::Rogue::Subtlety
// Combo Point Builders (Unique to Subtlety)
SHADOWSTRIKE_SUB = WoW112Spells::Rogue::Subtlety::SHADOWSTRIKE,
SHURIKEN_STORM = WoW112Spells::Rogue::Subtlety::SHURIKEN_STORM,
SHADOWSTRIKE_SUB = WoW120Spells::Rogue::Subtlety::SHADOWSTRIKE,
SHURIKEN_STORM = WoW120Spells::Rogue::Subtlety::SHURIKEN_STORM,
// Combo Point Spenders (Unique to Subtlety)
EVISCERATE_SUB = WoW112Spells::Rogue::Subtlety::EVISCERATE,
BLACK_POWDER = WoW112Spells::Rogue::Subtlety::BLACK_POWDER,
SECRET_TECHNIQUE = WoW112Spells::Rogue::Subtlety::SECRET_TECHNIQUE,
EVISCERATE_SUB = WoW120Spells::Rogue::Subtlety::EVISCERATE,
BLACK_POWDER = WoW120Spells::Rogue::Subtlety::BLACK_POWDER,
SECRET_TECHNIQUE = WoW120Spells::Rogue::Subtlety::SECRET_TECHNIQUE,
// Major Cooldowns
SHADOW_BLADES = WoW112Spells::Rogue::Subtlety::SHADOW_BLADES,
SHURIKEN_TORNADO = WoW112Spells::Rogue::Subtlety::SHURIKEN_TORNADO,
SHADOW_BLADES = WoW120Spells::Rogue::Subtlety::SHADOW_BLADES,
SHURIKEN_TORNADO = WoW120Spells::Rogue::Subtlety::SHURIKEN_TORNADO,
// Shadow Techniques
SHADOW_TECHNIQUES_PROC = WoW112Spells::Rogue::Subtlety::SHADOW_TECHNIQUES,
SHADOW_TECHNIQUES_PROC = WoW120Spells::Rogue::Subtlety::SHADOW_TECHNIQUES,
// Finisher Buffs
SLICE_AND_DICE_SUB = WoW112Spells::Rogue::Outlaw::SLICE_AND_DICE,
SLICE_AND_DICE_SUB = WoW120Spells::Rogue::Outlaw::SLICE_AND_DICE,
// Procs and Buffs
DANSE_MACABRE = WoW112Spells::Rogue::Subtlety::DANSE_MACABRE,
DEEPER_DAGGERS = WoW112Spells::Rogue::Subtlety::DEEPER_DAGGERS,
DANSE_MACABRE = WoW120Spells::Rogue::Subtlety::DANSE_MACABRE,
DEEPER_DAGGERS = WoW120Spells::Rogue::Subtlety::DEEPER_DAGGERS,
// Talents
DARK_SHADOW = WoW112Spells::Rogue::Subtlety::DARK_SHADOW,
DEEPER_STRATAGEM_SUB = WoW112Spells::Rogue::Subtlety::DEEPER_STRATAGEM,
MARKED_FOR_DEATH_SUB = WoW112Spells::Rogue::MARKED_FOR_DEATH,
SHURIKEN_TORNADO_TALENT = WoW112Spells::Rogue::Subtlety::SHURIKEN_TORNADO
DARK_SHADOW = WoW120Spells::Rogue::Subtlety::DARK_SHADOW,
DEEPER_STRATAGEM_SUB = WoW120Spells::Rogue::Subtlety::DEEPER_STRATAGEM,
MARKED_FOR_DEATH_SUB = WoW120Spells::Rogue::MARKED_FOR_DEATH,
SHURIKEN_TORNADO_TALENT = WoW120Spells::Rogue::Subtlety::SHURIKEN_TORNADO
};
// ============================================================================
@@ -31,9 +31,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Shaman namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Shaman namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -50,27 +50,27 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Elemental Shaman Spell IDs
// Using central registry: WoW112Spells::Shaman and WoW112Spells::Shaman::Elemental
constexpr uint32 ELEM_LIGHTNING_BOLT = WoW112Spells::Shaman::LIGHTNING_BOLT;
constexpr uint32 ELEM_LAVA_BURST = WoW112Spells::Shaman::LAVA_BURST;
constexpr uint32 ELEM_FLAME_SHOCK = WoW112Spells::Shaman::FLAME_SHOCK;
constexpr uint32 ELEM_EARTH_SHOCK = WoW112Spells::Shaman::EARTH_SHOCK;
constexpr uint32 ELEM_FROST_SHOCK = WoW112Spells::Shaman::FROST_SHOCK;
constexpr uint32 ELEM_CHAIN_LIGHTNING = WoW112Spells::Shaman::CHAIN_LIGHTNING;
constexpr uint32 ELEM_EARTHQUAKE = WoW112Spells::Shaman::Elemental::EARTHQUAKE;
constexpr uint32 ELEM_FIRE_ELEMENTAL = WoW112Spells::Shaman::Elemental::FIRE_ELEMENTAL;
constexpr uint32 ELEM_STORMKEEPER = WoW112Spells::Shaman::Elemental::STORMKEEPER;
constexpr uint32 ELEM_ASCENDANCE = WoW112Spells::Shaman::Elemental::ASCENDANCE;
constexpr uint32 ELEM_LIQUID_MAGMA_TOTEM = WoW112Spells::Shaman::Elemental::LIQUID_MAGMA_TOTEM;
constexpr uint32 ELEM_ICEFURY = WoW112Spells::Shaman::Elemental::ICEFURY;
constexpr uint32 ELEM_ELEMENTAL_BLAST = WoW112Spells::Shaman::Elemental::ELEMENTAL_BLAST;
constexpr uint32 ELEM_ECHOING_SHOCK = WoW112Spells::Shaman::Elemental::ECHOING_SHOCK;
constexpr uint32 ELEM_PRIMORDIAL_WAVE = WoW112Spells::Shaman::Elemental::PRIMORDIAL_WAVE;
constexpr uint32 ELEM_ASTRAL_SHIFT = WoW112Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 ELEM_EARTH_SHIELD = WoW112Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 ELEM_WIND_SHEAR = WoW112Spells::Shaman::WIND_SHEAR;
constexpr uint32 ELEM_CAPACITOR_TOTEM = WoW112Spells::Shaman::CAPACITOR_TOTEM;
// WoW 12.0 (The War Within) - Elemental Shaman Spell IDs
// Using central registry: WoW120Spells::Shaman and WoW120Spells::Shaman::Elemental
constexpr uint32 ELEM_LIGHTNING_BOLT = WoW120Spells::Shaman::LIGHTNING_BOLT;
constexpr uint32 ELEM_LAVA_BURST = WoW120Spells::Shaman::LAVA_BURST;
constexpr uint32 ELEM_FLAME_SHOCK = WoW120Spells::Shaman::FLAME_SHOCK;
constexpr uint32 ELEM_EARTH_SHOCK = WoW120Spells::Shaman::EARTH_SHOCK;
constexpr uint32 ELEM_FROST_SHOCK = WoW120Spells::Shaman::FROST_SHOCK;
constexpr uint32 ELEM_CHAIN_LIGHTNING = WoW120Spells::Shaman::CHAIN_LIGHTNING;
constexpr uint32 ELEM_EARTHQUAKE = WoW120Spells::Shaman::Elemental::EARTHQUAKE;
constexpr uint32 ELEM_FIRE_ELEMENTAL = WoW120Spells::Shaman::Elemental::FIRE_ELEMENTAL;
constexpr uint32 ELEM_STORMKEEPER = WoW120Spells::Shaman::Elemental::STORMKEEPER;
constexpr uint32 ELEM_ASCENDANCE = WoW120Spells::Shaman::Elemental::ASCENDANCE;
constexpr uint32 ELEM_LIQUID_MAGMA_TOTEM = WoW120Spells::Shaman::Elemental::LIQUID_MAGMA_TOTEM;
constexpr uint32 ELEM_ICEFURY = WoW120Spells::Shaman::Elemental::ICEFURY;
constexpr uint32 ELEM_ELEMENTAL_BLAST = WoW120Spells::Shaman::Elemental::ELEMENTAL_BLAST;
constexpr uint32 ELEM_ECHOING_SHOCK = WoW120Spells::Shaman::Elemental::ECHOING_SHOCK;
constexpr uint32 ELEM_PRIMORDIAL_WAVE = WoW120Spells::Shaman::Elemental::PRIMORDIAL_WAVE;
constexpr uint32 ELEM_ASTRAL_SHIFT = WoW120Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 ELEM_EARTH_SHIELD = WoW120Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 ELEM_WIND_SHEAR = WoW120Spells::Shaman::WIND_SHEAR;
constexpr uint32 ELEM_CAPACITOR_TOTEM = WoW120Spells::Shaman::CAPACITOR_TOTEM;
// ManaResource is already defined in CombatSpecializationTemplates.h
// No need to redefine it here
@@ -31,9 +31,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Shaman namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Shaman namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -50,27 +50,27 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Enhancement Shaman Spell IDs
// Using central registry: WoW112Spells::Shaman and WoW112Spells::Shaman::Enhancement
constexpr uint32 ENH_STORMSTRIKE = WoW112Spells::Shaman::Enhancement::STORMSTRIKE;
constexpr uint32 ENH_LAVA_LASH = WoW112Spells::Shaman::Enhancement::LAVA_LASH;
constexpr uint32 ENH_LIGHTNING_BOLT = WoW112Spells::Shaman::LIGHTNING_BOLT;
constexpr uint32 ENH_FLAME_SHOCK = WoW112Spells::Shaman::FLAME_SHOCK;
constexpr uint32 ENH_FROST_SHOCK = WoW112Spells::Shaman::FROST_SHOCK;
constexpr uint32 ENH_CRASH_LIGHTNING = WoW112Spells::Shaman::Enhancement::CRASH_LIGHTNING;
constexpr uint32 ENH_SUNDERING = WoW112Spells::Shaman::Enhancement::SUNDERING;
constexpr uint32 ENH_FERAL_SPIRIT = WoW112Spells::Shaman::Enhancement::FERAL_SPIRIT;
constexpr uint32 ENH_ASCENDANCE = WoW112Spells::Shaman::Enhancement::ASCENDANCE_ENH;
constexpr uint32 ENH_WINDFURY_TOTEM = WoW112Spells::Shaman::Enhancement::WINDFURY_TOTEM;
constexpr uint32 ENH_WINDSTRIKE = WoW112Spells::Shaman::Enhancement::WINDSTRIKE;
constexpr uint32 ENH_ICE_STRIKE = WoW112Spells::Shaman::Enhancement::ICE_STRIKE;
constexpr uint32 ENH_FIRE_NOVA = WoW112Spells::Shaman::Enhancement::FIRE_NOVA;
constexpr uint32 ENH_ELEMENTAL_BLAST = WoW112Spells::Shaman::Enhancement::ELEMENTAL_BLAST_ENH;
constexpr uint32 ENH_LAVA_BURST = WoW112Spells::Shaman::LAVA_BURST;
constexpr uint32 ENH_ASTRAL_SHIFT = WoW112Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 ENH_EARTH_SHIELD = WoW112Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 ENH_WIND_SHEAR = WoW112Spells::Shaman::WIND_SHEAR;
constexpr uint32 ENH_CAPACITOR_TOTEM = WoW112Spells::Shaman::CAPACITOR_TOTEM;
// WoW 12.0 (The War Within) - Enhancement Shaman Spell IDs
// Using central registry: WoW120Spells::Shaman and WoW120Spells::Shaman::Enhancement
constexpr uint32 ENH_STORMSTRIKE = WoW120Spells::Shaman::Enhancement::STORMSTRIKE;
constexpr uint32 ENH_LAVA_LASH = WoW120Spells::Shaman::Enhancement::LAVA_LASH;
constexpr uint32 ENH_LIGHTNING_BOLT = WoW120Spells::Shaman::LIGHTNING_BOLT;
constexpr uint32 ENH_FLAME_SHOCK = WoW120Spells::Shaman::FLAME_SHOCK;
constexpr uint32 ENH_FROST_SHOCK = WoW120Spells::Shaman::FROST_SHOCK;
constexpr uint32 ENH_CRASH_LIGHTNING = WoW120Spells::Shaman::Enhancement::CRASH_LIGHTNING;
constexpr uint32 ENH_SUNDERING = WoW120Spells::Shaman::Enhancement::SUNDERING;
constexpr uint32 ENH_FERAL_SPIRIT = WoW120Spells::Shaman::Enhancement::FERAL_SPIRIT;
constexpr uint32 ENH_ASCENDANCE = WoW120Spells::Shaman::Enhancement::ASCENDANCE_ENH;
constexpr uint32 ENH_WINDFURY_TOTEM = WoW120Spells::Shaman::Enhancement::WINDFURY_TOTEM;
constexpr uint32 ENH_WINDSTRIKE = WoW120Spells::Shaman::Enhancement::WINDSTRIKE;
constexpr uint32 ENH_ICE_STRIKE = WoW120Spells::Shaman::Enhancement::ICE_STRIKE;
constexpr uint32 ENH_FIRE_NOVA = WoW120Spells::Shaman::Enhancement::FIRE_NOVA;
constexpr uint32 ENH_ELEMENTAL_BLAST = WoW120Spells::Shaman::Enhancement::ELEMENTAL_BLAST_ENH;
constexpr uint32 ENH_LAVA_BURST = WoW120Spells::Shaman::LAVA_BURST;
constexpr uint32 ENH_ASTRAL_SHIFT = WoW120Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 ENH_EARTH_SHIELD = WoW120Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 ENH_WIND_SHEAR = WoW120Spells::Shaman::WIND_SHEAR;
constexpr uint32 ENH_CAPACITOR_TOTEM = WoW120Spells::Shaman::CAPACITOR_TOTEM;
// ManaResource is already defined in CombatSpecializationTemplates.h
// No need to redefine it here
@@ -31,9 +31,9 @@
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
// Central Spell Registry - See WoW112Spells::Shaman namespace
#include "../SpellValidation_WoW112.h"
#include "../SpellValidation_WoW112_Part2.h"
// Central Spell Registry - See WoW120Spells::Shaman namespace
#include "../SpellValidation_WoW120.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -50,27 +50,27 @@ using bot::ai::SpellPriority;
using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// WoW 11.2 (The War Within) - Restoration Shaman Spell IDs
// Using central registry: WoW112Spells::Shaman and WoW112Spells::Shaman::Restoration
constexpr uint32 REST_HEALING_WAVE = WoW112Spells::Shaman::Restoration::HEALING_WAVE;
constexpr uint32 REST_HEALING_SURGE = WoW112Spells::Shaman::Restoration::HEALING_SURGE;
constexpr uint32 REST_CHAIN_HEAL = WoW112Spells::Shaman::Restoration::CHAIN_HEAL;
constexpr uint32 REST_RIPTIDE = WoW112Spells::Shaman::Restoration::RIPTIDE;
constexpr uint32 REST_HEALING_RAIN = WoW112Spells::Shaman::Restoration::HEALING_RAIN;
constexpr uint32 REST_WELLSPRING = WoW112Spells::Shaman::Restoration::WELLSPRING;
constexpr uint32 REST_HEALING_TIDE_TOTEM = WoW112Spells::Shaman::Restoration::HEALING_TIDE_TOTEM;
constexpr uint32 REST_CLOUDBURST_TOTEM = WoW112Spells::Shaman::Restoration::CLOUDBURST_TOTEM;
constexpr uint32 REST_SPIRIT_LINK_TOTEM = WoW112Spells::Shaman::Restoration::SPIRIT_LINK_TOTEM;
constexpr uint32 REST_EARTHEN_WALL_TOTEM = WoW112Spells::Shaman::Restoration::EARTHEN_WALL_TOTEM;
constexpr uint32 REST_ANCESTRAL_PROTECTION_TOTEM = WoW112Spells::Shaman::Restoration::ANCESTRAL_PROTECTION_TOTEM;
constexpr uint32 REST_ASCENDANCE = WoW112Spells::Shaman::Restoration::ASCENDANCE_RESTO;
constexpr uint32 REST_UNLEASH_LIFE = WoW112Spells::Shaman::Restoration::UNLEASH_LIFE;
constexpr uint32 REST_EARTH_SHIELD = WoW112Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 REST_WATER_SHIELD = WoW112Spells::Shaman::Restoration::WATER_SHIELD;
constexpr uint32 REST_PURIFY_SPIRIT = WoW112Spells::Shaman::Restoration::PURIFY_SPIRIT;
constexpr uint32 REST_SPIRITWALKERS_GRACE = WoW112Spells::Shaman::Restoration::SPIRITWALKERS_GRACE;
constexpr uint32 REST_ASTRAL_SHIFT = WoW112Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 REST_WIND_SHEAR = WoW112Spells::Shaman::WIND_SHEAR;
// WoW 12.0 (The War Within) - Restoration Shaman Spell IDs
// Using central registry: WoW120Spells::Shaman and WoW120Spells::Shaman::Restoration
constexpr uint32 REST_HEALING_WAVE = WoW120Spells::Shaman::Restoration::HEALING_WAVE;
constexpr uint32 REST_HEALING_SURGE = WoW120Spells::Shaman::Restoration::HEALING_SURGE;
constexpr uint32 REST_CHAIN_HEAL = WoW120Spells::Shaman::Restoration::CHAIN_HEAL;
constexpr uint32 REST_RIPTIDE = WoW120Spells::Shaman::Restoration::RIPTIDE;
constexpr uint32 REST_HEALING_RAIN = WoW120Spells::Shaman::Restoration::HEALING_RAIN;
constexpr uint32 REST_WELLSPRING = WoW120Spells::Shaman::Restoration::WELLSPRING;
constexpr uint32 REST_HEALING_TIDE_TOTEM = WoW120Spells::Shaman::Restoration::HEALING_TIDE_TOTEM;
constexpr uint32 REST_CLOUDBURST_TOTEM = WoW120Spells::Shaman::Restoration::CLOUDBURST_TOTEM;
constexpr uint32 REST_SPIRIT_LINK_TOTEM = WoW120Spells::Shaman::Restoration::SPIRIT_LINK_TOTEM;
constexpr uint32 REST_EARTHEN_WALL_TOTEM = WoW120Spells::Shaman::Restoration::EARTHEN_WALL_TOTEM;
constexpr uint32 REST_ANCESTRAL_PROTECTION_TOTEM = WoW120Spells::Shaman::Restoration::ANCESTRAL_PROTECTION_TOTEM;
constexpr uint32 REST_ASCENDANCE = WoW120Spells::Shaman::Restoration::ASCENDANCE_RESTO;
constexpr uint32 REST_UNLEASH_LIFE = WoW120Spells::Shaman::Restoration::UNLEASH_LIFE;
constexpr uint32 REST_EARTH_SHIELD = WoW120Spells::Shaman::Restoration::EARTH_SHIELD;
constexpr uint32 REST_WATER_SHIELD = WoW120Spells::Shaman::Restoration::WATER_SHIELD;
constexpr uint32 REST_PURIFY_SPIRIT = WoW120Spells::Shaman::Restoration::PURIFY_SPIRIT;
constexpr uint32 REST_SPIRITWALKERS_GRACE = WoW120Spells::Shaman::Restoration::SPIRITWALKERS_GRACE;
constexpr uint32 REST_ASTRAL_SHIFT = WoW120Spells::Shaman::ASTRAL_SHIFT;
constexpr uint32 REST_WIND_SHEAR = WoW120Spells::Shaman::WIND_SHEAR;
// ManaResource is already defined in CombatSpecializationTemplates.h
// No need to redefine it here
@@ -13,7 +13,7 @@
#include "RestorationShaman.h"
#include "../BaselineRotationManager.h"
#include "../../Combat/CombatBehaviorIntegration.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
#include "Player.h"
#include "Unit.h"
#include "Creature.h"
@@ -39,20 +39,20 @@ namespace Playerbot
{
// ============================================================================
// WoW 11.2 SPELL ID ALIASES - Using Central Registry
// WoW 12.0 SPELL ID ALIASES - Using Central Registry
// ============================================================================
// Import from SpellValidation_WoW112_Part2.h to avoid hardcoded values
// Import from SpellValidation_WoW120_Part2.h to avoid hardcoded values
namespace ShamanSpells = WoW112Spells::Shaman;
namespace ShamanElemental = WoW112Spells::Shaman::Elemental;
namespace ShamanEnhancement = WoW112Spells::Shaman::Enhancement;
namespace ShamanRestoration = WoW112Spells::Shaman::Restoration;
namespace ShamanCommon = WoW112Spells::Shaman::Common;
namespace ShamanSpells = WoW120Spells::Shaman;
namespace ShamanElemental = WoW120Spells::Shaman::Elemental;
namespace ShamanEnhancement = WoW120Spells::Shaman::Enhancement;
namespace ShamanRestoration = WoW120Spells::Shaman::Restoration;
namespace ShamanCommon = WoW120Spells::Shaman::Common;
// Totem spell definitions - WoW 11.2 (many totems removed/consolidated)
// Totem spell definitions - WoW 12.0 (many totems removed/consolidated)
enum TotemSpells : uint32
{
// Active totems in WoW 11.2
// Active totems in WoW 12.0
SPELL_EARTHBIND_TOTEM = ShamanCommon::EARTHBIND_TOTEM, // 2484
SPELL_TREMOR_TOTEM = ShamanCommon::TREMOR_TOTEM, // 8143
SPELL_HEALING_STREAM_TOTEM = ShamanCommon::HEALING_STREAM_TOTEM, // 5394
@@ -71,7 +71,7 @@ enum TotemSpells : uint32
SPELL_CLOUDBURST_TOTEM = ShamanRestoration::CLOUDBURST_TOTEM, // 157153
SPELL_MANA_TIDE_TOTEM = ShamanRestoration::MANA_TIDE_TOTEM, // 16191
// Legacy totems removed in WoW 11.2 (kept as 0 for compatibility checks)
// Legacy totems removed in WoW 12.0 (kept as 0 for compatibility checks)
SPELL_SEARING_TOTEM = 0, // Removed
SPELL_FIRE_NOVA_TOTEM = 0, // Removed
SPELL_MAGMA_TOTEM = 0, // Removed
@@ -94,7 +94,7 @@ enum TotemSpells : uint32
SPELL_SENTRY_TOTEM = 0 // Removed
};
// Shock spell definitions - WoW 11.2
// Shock spell definitions - WoW 12.0
enum ShockSpells : uint32
{
SPELL_EARTH_SHOCK = ShamanCommon::EARTH_SHOCK, // 8042
@@ -103,7 +103,7 @@ enum ShockSpells : uint32
SPELL_WIND_SHEAR = ShamanCommon::WIND_SHEAR // 57994 - Interrupt
};
// Shield spell definitions - WoW 11.2
// Shield spell definitions - WoW 12.0
enum ShieldSpells : uint32
{
SPELL_WATER_SHIELD = ShamanRestoration::WATER_SHIELD, // 52127
@@ -112,19 +112,19 @@ enum ShieldSpells : uint32
SPELL_LIGHTNING_SHIELD = 0 // Removed/reworked
};
// Weapon imbue spell definitions - WoW 11.2
// Weapon imbue spell definitions - WoW 12.0
enum WeaponImbues : uint32
{
SPELL_FLAMETONGUE_WEAPON = ShamanCommon::FLAMETONGUE_WEAPON, // 318038 (updated ID)
SPELL_WINDFURY_WEAPON = ShamanCommon::WINDFURY_WEAPON, // 33757
// Legacy weapon imbues removed in WoW 11.2
// Legacy weapon imbues removed in WoW 12.0
SPELL_ROCKBITER_WEAPON = 0, // Removed
SPELL_FROSTBRAND_WEAPON = 0, // Removed
SPELL_EARTHLIVING_WEAPON = 0 // Removed
};
// Utility spell definitions - WoW 11.2
// Utility spell definitions - WoW 12.0
enum UtilitySpells : uint32
{
SPELL_PURGE = ShamanCommon::PURGE, // 370
@@ -146,7 +146,7 @@ enum UtilitySpells : uint32
SPELL_SHAMANISTIC_RAGE = 0 // Removed (was Enhancement defensive)
};
// Healing spell definitions - WoW 11.2
// Healing spell definitions - WoW 12.0
enum HealingSpells : uint32
{
SPELL_HEALING_WAVE = ShamanCommon::HEALING_WAVE, // 77472 (updated ID)
@@ -167,7 +167,7 @@ enum HealingSpells : uint32
SPELL_SPIRIT_LINK = 0 // Now Spirit Link Totem only
};
// Damage spell definitions - WoW 11.2
// Damage spell definitions - WoW 12.0
enum DamageSpells : uint32
{
SPELL_LIGHTNING_BOLT = ShamanCommon::LIGHTNING_BOLT, // 188196 (updated ID)
@@ -179,7 +179,7 @@ enum DamageSpells : uint32
SPELL_THUNDERSTORM = 0 // 51490 - Removed/reworked in 11.2
};
// Enhancement-specific spells - WoW 11.2
// Enhancement-specific spells - WoW 12.0
enum EnhancementSpells : uint32
{
SPELL_STORMSTRIKE = ShamanCommon::STORMSTRIKE, // 17364
@@ -194,7 +194,7 @@ enum EnhancementSpells : uint32
SPELL_MAELSTROM_WEAPON = ShamanEnhancement::MAELSTROM_WEAPON // 187880
};
// Elemental-specific spells - WoW 11.2
// Elemental-specific spells - WoW 12.0
enum ElementalSpells : uint32
{
SPELL_ASCENDANCE = ShamanCommon::ASCENDANCE, // 114050
@@ -209,7 +209,7 @@ enum ElementalSpells : uint32
SPELL_ELEMENTAL_MASTERY = 0 // Removed/reworked in 11.2
};
// Talent IDs for specialization detection - WoW 11.2
// Talent IDs for specialization detection - WoW 12.0
// Note: Talent detection in 11.2 uses different systems; these are kept for compatibility
enum ShamanTalents : uint32
{
@@ -1,9 +1,9 @@
/*
* Copyright (C) 2024 TrinityCore <https://www.trinitycore.org/>
*
* World of Warcraft 11.2 (The War Within) Spell ID Validation
* World of Warcraft 12.0 (The War Within) Spell ID Validation
*
* This file contains all validated spell IDs for WoW 11.2 including
* This file contains all validated spell IDs for WoW 12.0 including
* Hero Talent abilities for all 39 specializations.
*/
@@ -11,11 +11,11 @@
namespace Playerbot
{
namespace WoW112Spells
namespace WoW120Spells
{
// ============================================================================
// DEATH KNIGHT SPELLS - Updated for 11.2
// DEATH KNIGHT SPELLS - Updated for 12.0
// ============================================================================
namespace DeathKnight
@@ -186,7 +186,7 @@ namespace DeathKnight
}
// ============================================================================
// DEMON HUNTER SPELLS - Updated for 11.2
// DEMON HUNTER SPELLS - Updated for 12.0
// ============================================================================
namespace DemonHunter
@@ -368,7 +368,7 @@ namespace DemonHunter
}
// ============================================================================
// DRUID SPELLS - Updated for 11.2
// DRUID SPELLS - Updated for 12.0
// ============================================================================
namespace Druid
@@ -653,7 +653,7 @@ namespace Druid
}
// ============================================================================
// EVOKER SPELLS - Updated for 11.2
// EVOKER SPELLS - Updated for 12.0
// ============================================================================
namespace Evoker
@@ -839,7 +839,7 @@ namespace Evoker
}
// ============================================================================
// HUNTER SPELLS - Updated for 11.2
// HUNTER SPELLS - Updated for 12.0
// ============================================================================
namespace Hunter
@@ -1058,7 +1058,7 @@ namespace Hunter
}
// ============================================================================
// MAGE SPELLS - Updated for 11.2
// MAGE SPELLS - Updated for 12.0
// ============================================================================
namespace Mage
@@ -1267,7 +1267,7 @@ namespace Mage
}
// ============================================================================
// MONK SPELLS - Updated for 11.2
// MONK SPELLS - Updated for 12.0
// ============================================================================
namespace Monk
@@ -1521,5 +1521,5 @@ namespace Monk
// Continued in next part due to length...
} // namespace WoW112Spells
} // namespace WoW120Spells
} // namespace Playerbot
@@ -3,7 +3,7 @@
*
* World of Warcraft 11.2 (The War Within) Spell ID Validation - Part 2
*
* This file contains validated spell IDs for WoW 11.2 including
* This file contains validated spell IDs for WoW 12.0 including
* Hero Talent abilities for Paladin through Warrior specializations.
*/
@@ -11,11 +11,11 @@
namespace Playerbot
{
namespace WoW112Spells
namespace WoW120Spells
{
// ============================================================================
// PALADIN SPELLS - Updated for 11.2
// PALADIN SPELLS - Updated for 12.0
// ============================================================================
namespace Paladin
@@ -237,7 +237,7 @@ namespace Paladin
}
// ============================================================================
// PRIEST SPELLS - Updated for 11.2
// PRIEST SPELLS - Updated for 12.0
// ============================================================================
namespace Priest
@@ -453,7 +453,7 @@ namespace Priest
}
// ============================================================================
// ROGUE SPELLS - Updated for 11.2
// ROGUE SPELLS - Updated for 12.0
// ============================================================================
namespace Rogue
@@ -677,7 +677,7 @@ namespace Rogue
}
// ============================================================================
// SHAMAN SPELLS - Updated for 11.2
// SHAMAN SPELLS - Updated for 12.0
// ============================================================================
namespace Shaman
@@ -892,7 +892,7 @@ namespace Shaman
}
// ============================================================================
// WARLOCK SPELLS - Updated for 11.2
// WARLOCK SPELLS - Updated for 12.0
// ============================================================================
namespace Warlock
@@ -1130,7 +1130,7 @@ namespace Warlock
}
// ============================================================================
// WARRIOR SPELLS - Updated for 11.2.7 (The War Within)
// WARRIOR SPELLS - Updated for 12.0.7 (The War Within)
// ============================================================================
namespace Warrior
@@ -1353,5 +1353,5 @@ namespace Warrior
}
}
} // namespace WoW112Spells
} // namespace WoW120Spells
} // namespace Playerbot
@@ -25,7 +25,7 @@
#include "../../Decision/ActionPriorityQueue.h"
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
// NOTE: BaselineRotationManager.h no longer needed - baseline rotation check
// is now handled centrally at the dispatch level in ClassAI::OnCombatUpdate()
@@ -45,70 +45,70 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// AFFLICTION WARLOCK SPELL IDs (WoW 11.2 - The War Within)
// Central Registry: WoW112Spells::Warlock::Affliction in SpellValidation_WoW112_Part2.h
// AFFLICTION WARLOCK SPELL IDs (WoW 12.0 - The War Within)
// Central Registry: WoW120Spells::Warlock::Affliction in SpellValidation_WoW120_Part2.h
// ============================================================================
enum AfflictionWarlockSpells
{
// DoT Spells - Using central registry: WoW112Spells::Warlock::Affliction
AGONY = WoW112Spells::Warlock::Affliction::AGONY,
CORRUPTION = WoW112Spells::Warlock::CORRUPTION,
UNSTABLE_AFFLICTION = WoW112Spells::Warlock::Affliction::UNSTABLE_AFFLICTION,
SIPHON_LIFE = WoW112Spells::Warlock::Affliction::SIPHON_LIFE,
HAUNT = WoW112Spells::Warlock::Affliction::HAUNT,
// DoT Spells - Using central registry: WoW120Spells::Warlock::Affliction
AGONY = WoW120Spells::Warlock::Affliction::AGONY,
CORRUPTION = WoW120Spells::Warlock::CORRUPTION,
UNSTABLE_AFFLICTION = WoW120Spells::Warlock::Affliction::UNSTABLE_AFFLICTION,
SIPHON_LIFE = WoW120Spells::Warlock::Affliction::SIPHON_LIFE,
HAUNT = WoW120Spells::Warlock::Affliction::HAUNT,
// Direct Damage - Using central registry: WoW112Spells::Warlock
SHADOW_BOLT_AFF = WoW112Spells::Warlock::SHADOW_BOLT,
DRAIN_SOUL = WoW112Spells::Warlock::Affliction::DRAIN_SOUL,
MALEFIC_RAPTURE = WoW112Spells::Warlock::Affliction::MALEFIC_RAPTURE,
// Direct Damage - Using central registry: WoW120Spells::Warlock
SHADOW_BOLT_AFF = WoW120Spells::Warlock::SHADOW_BOLT,
DRAIN_SOUL = WoW120Spells::Warlock::Affliction::DRAIN_SOUL,
MALEFIC_RAPTURE = WoW120Spells::Warlock::Affliction::MALEFIC_RAPTURE,
// Major Cooldowns - Using central registry: WoW112Spells::Warlock::Affliction
PHANTOM_SINGULARITY = WoW112Spells::Warlock::Affliction::PHANTOM_SINGULARITY,
VILE_TAINT = WoW112Spells::Warlock::Affliction::VILE_TAINT,
SOUL_ROT = WoW112Spells::Warlock::Affliction::SOUL_ROT,
SUMMON_DARKGLARE = WoW112Spells::Warlock::Affliction::SUMMON_DARKGLARE,
DARK_SOUL_MISERY = WoW112Spells::Warlock::Affliction::DARK_SOUL_MISERY,
// Major Cooldowns - Using central registry: WoW120Spells::Warlock::Affliction
PHANTOM_SINGULARITY = WoW120Spells::Warlock::Affliction::PHANTOM_SINGULARITY,
VILE_TAINT = WoW120Spells::Warlock::Affliction::VILE_TAINT,
SOUL_ROT = WoW120Spells::Warlock::Affliction::SOUL_ROT,
SUMMON_DARKGLARE = WoW120Spells::Warlock::Affliction::SUMMON_DARKGLARE,
DARK_SOUL_MISERY = WoW120Spells::Warlock::Affliction::DARK_SOUL_MISERY,
// AoE - Using central registry: WoW112Spells::Warlock::Affliction
SEED_OF_CORRUPTION = WoW112Spells::Warlock::Affliction::SEED_OF_CORRUPTION,
SOULBURN = WoW112Spells::Warlock::Affliction::SOULBURN,
// AoE - Using central registry: WoW120Spells::Warlock::Affliction
SEED_OF_CORRUPTION = WoW120Spells::Warlock::Affliction::SEED_OF_CORRUPTION,
SOULBURN = WoW120Spells::Warlock::Affliction::SOULBURN,
// Pet Management - Using central registry: WoW112Spells::Warlock
SUMMON_IMP_AFF = WoW112Spells::Warlock::SUMMON_IMP,
SUMMON_VOIDWALKER_AFF = WoW112Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_FELHUNTER_AFF = WoW112Spells::Warlock::SUMMON_FELHUNTER,
SUMMON_SUCCUBUS_AFF = WoW112Spells::Warlock::SUMMON_SUCCUBUS,
COMMAND_DEMON_AFF = WoW112Spells::Warlock::COMMAND_DEMON,
// Pet Management - Using central registry: WoW120Spells::Warlock
SUMMON_IMP_AFF = WoW120Spells::Warlock::SUMMON_IMP,
SUMMON_VOIDWALKER_AFF = WoW120Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_FELHUNTER_AFF = WoW120Spells::Warlock::SUMMON_FELHUNTER,
SUMMON_SUCCUBUS_AFF = WoW120Spells::Warlock::SUMMON_SUCCUBUS,
COMMAND_DEMON_AFF = WoW120Spells::Warlock::COMMAND_DEMON,
// Utility - Using central registry: WoW112Spells::Warlock
CURSE_OF_WEAKNESS = WoW112Spells::Warlock::CURSE_OF_WEAKNESS,
CURSE_OF_TONGUES = WoW112Spells::Warlock::CURSE_OF_TONGUES,
CURSE_OF_EXHAUSTION = WoW112Spells::Warlock::CURSE_OF_EXHAUSTION,
UNENDING_RESOLVE = WoW112Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT = WoW112Spells::Warlock::Affliction::DARK_PACT,
MORTAL_COIL = WoW112Spells::Warlock::MORTAL_COIL,
HOWL_OF_TERROR = WoW112Spells::Warlock::HOWL_OF_TERROR,
FEAR = WoW112Spells::Warlock::FEAR,
BANISH = WoW112Spells::Warlock::BANISH,
SOULSTONE = WoW112Spells::Warlock::SOULSTONE,
// Utility - Using central registry: WoW120Spells::Warlock
CURSE_OF_WEAKNESS = WoW120Spells::Warlock::CURSE_OF_WEAKNESS,
CURSE_OF_TONGUES = WoW120Spells::Warlock::CURSE_OF_TONGUES,
CURSE_OF_EXHAUSTION = WoW120Spells::Warlock::CURSE_OF_EXHAUSTION,
UNENDING_RESOLVE = WoW120Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT = WoW120Spells::Warlock::Affliction::DARK_PACT,
MORTAL_COIL = WoW120Spells::Warlock::MORTAL_COIL,
HOWL_OF_TERROR = WoW120Spells::Warlock::HOWL_OF_TERROR,
FEAR = WoW120Spells::Warlock::FEAR,
BANISH = WoW120Spells::Warlock::BANISH,
SOULSTONE = WoW120Spells::Warlock::SOULSTONE,
// Defensives - Using central registry: WoW112Spells::Warlock
HEALTH_FUNNEL = WoW112Spells::Warlock::HEALTH_FUNNEL,
DEMONIC_CIRCLE_TELEPORT = WoW112Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY = WoW112Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH = WoW112Spells::Warlock::BURNING_RUSH,
// Defensives - Using central registry: WoW120Spells::Warlock
HEALTH_FUNNEL = WoW120Spells::Warlock::HEALTH_FUNNEL,
DEMONIC_CIRCLE_TELEPORT = WoW120Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY = WoW120Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH = WoW120Spells::Warlock::BURNING_RUSH,
// Procs and Buffs - Using central registry: WoW112Spells::Warlock::Affliction
NIGHTFALL = WoW112Spells::Warlock::Affliction::NIGHTFALL,
INEVITABLE_DEMISE = WoW112Spells::Warlock::Affliction::INEVITABLE_DEMISE,
TORMENTED_CRESCENDO = WoW112Spells::Warlock::Affliction::TORMENTED_CRESCENDO,
// Procs and Buffs - Using central registry: WoW120Spells::Warlock::Affliction
NIGHTFALL = WoW120Spells::Warlock::Affliction::NIGHTFALL,
INEVITABLE_DEMISE = WoW120Spells::Warlock::Affliction::INEVITABLE_DEMISE,
TORMENTED_CRESCENDO = WoW120Spells::Warlock::Affliction::TORMENTED_CRESCENDO,
// Talents - Using central registry: WoW112Spells::Warlock::Affliction
GRIMOIRE_OF_SACRIFICE = WoW112Spells::Warlock::Affliction::GRIMOIRE_OF_SACRIFICE,
SOUL_CONDUIT = WoW112Spells::Warlock::Affliction::SOUL_CONDUIT,
CREEPING_DEATH = WoW112Spells::Warlock::Affliction::CREEPING_DEATH,
WRITHE_IN_AGONY = WoW112Spells::Warlock::Affliction::WRITHE_IN_AGONY
// Talents - Using central registry: WoW120Spells::Warlock::Affliction
GRIMOIRE_OF_SACRIFICE = WoW120Spells::Warlock::Affliction::GRIMOIRE_OF_SACRIFICE,
SOUL_CONDUIT = WoW120Spells::Warlock::Affliction::SOUL_CONDUIT,
CREEPING_DEATH = WoW120Spells::Warlock::Affliction::CREEPING_DEATH,
WRITHE_IN_AGONY = WoW120Spells::Warlock::Affliction::WRITHE_IN_AGONY
};
// Dual resource type for Warlock (Mana + Soul Shards)
@@ -24,7 +24,7 @@
#include "../../Decision/ActionPriorityQueue.h"
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -42,67 +42,67 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// DEMONOLOGY WARLOCK SPELL IDs (WoW 11.2 - The War Within)
// Central Registry: WoW112Spells::Warlock::Demonology in SpellValidation_WoW112_Part2.h
// DEMONOLOGY WARLOCK SPELL IDs (WoW 12.0 - The War Within)
// Central Registry: WoW120Spells::Warlock::Demonology in SpellValidation_WoW120_Part2.h
// ============================================================================
enum DemonologyWarlockSpells
{
// Core Builders - Using central registry: WoW112Spells::Warlock::Demonology
HAND_OF_GULDAN = WoW112Spells::Warlock::Demonology::HAND_OF_GULDAN,
DEMONBOLT = WoW112Spells::Warlock::Demonology::DEMONBOLT,
SHADOW_BOLT_DEMO = WoW112Spells::Warlock::SHADOW_BOLT,
// Core Builders - Using central registry: WoW120Spells::Warlock::Demonology
HAND_OF_GULDAN = WoW120Spells::Warlock::Demonology::HAND_OF_GULDAN,
DEMONBOLT = WoW120Spells::Warlock::Demonology::DEMONBOLT,
SHADOW_BOLT_DEMO = WoW120Spells::Warlock::SHADOW_BOLT,
// Demon Summoning - Using central registry: WoW112Spells::Warlock::Demonology
CALL_DREADSTALKERS = WoW112Spells::Warlock::Demonology::CALL_DREADSTALKERS,
SUMMON_VILEFIEND = WoW112Spells::Warlock::Demonology::SUMMON_VILEFIEND,
GRIMOIRE_FELGUARD = WoW112Spells::Warlock::Demonology::GRIMOIRE_FELGUARD,
NETHER_PORTAL = WoW112Spells::Warlock::Demonology::NETHER_PORTAL,
SUMMON_DEMONIC_TYRANT = WoW112Spells::Warlock::Demonology::SUMMON_DEMONIC_TYRANT,
// Demon Summoning - Using central registry: WoW120Spells::Warlock::Demonology
CALL_DREADSTALKERS = WoW120Spells::Warlock::Demonology::CALL_DREADSTALKERS,
SUMMON_VILEFIEND = WoW120Spells::Warlock::Demonology::SUMMON_VILEFIEND,
GRIMOIRE_FELGUARD = WoW120Spells::Warlock::Demonology::GRIMOIRE_FELGUARD,
NETHER_PORTAL = WoW120Spells::Warlock::Demonology::NETHER_PORTAL,
SUMMON_DEMONIC_TYRANT = WoW120Spells::Warlock::Demonology::SUMMON_DEMONIC_TYRANT,
// Permanent Pets - Using central registry: WoW112Spells::Warlock
SUMMON_FELGUARD = WoW112Spells::Warlock::SUMMON_FELGUARD,
SUMMON_VOIDWALKER_DEMO = WoW112Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_IMP_DEMO = WoW112Spells::Warlock::SUMMON_IMP,
COMMAND_DEMON_DEMO = WoW112Spells::Warlock::COMMAND_DEMON,
// Permanent Pets - Using central registry: WoW120Spells::Warlock
SUMMON_FELGUARD = WoW120Spells::Warlock::SUMMON_FELGUARD,
SUMMON_VOIDWALKER_DEMO = WoW120Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_IMP_DEMO = WoW120Spells::Warlock::SUMMON_IMP,
COMMAND_DEMON_DEMO = WoW120Spells::Warlock::COMMAND_DEMON,
// Direct Damage - Using central registry: WoW112Spells::Warlock::Demonology
IMPLOSION = WoW112Spells::Warlock::Demonology::IMPLOSION,
DEMONFIRE = WoW112Spells::Warlock::Demonology::DEMONFIRE,
DOOM = WoW112Spells::Warlock::Demonology::DOOM,
// Direct Damage - Using central registry: WoW120Spells::Warlock::Demonology
IMPLOSION = WoW120Spells::Warlock::Demonology::IMPLOSION,
DEMONFIRE = WoW120Spells::Warlock::Demonology::DEMONFIRE,
DOOM = WoW120Spells::Warlock::Demonology::DOOM,
// Buffs and Procs - Using central registry: WoW112Spells::Warlock::Demonology
DEMONIC_CORE = WoW112Spells::Warlock::Demonology::DEMONIC_CORE,
DEMONIC_CALLING = WoW112Spells::Warlock::Demonology::DEMONIC_CALLING,
DEMONIC_STRENGTH = WoW112Spells::Warlock::Demonology::DEMONIC_STRENGTH,
POWER_SIPHON = WoW112Spells::Warlock::Demonology::POWER_SIPHON,
// Buffs and Procs - Using central registry: WoW120Spells::Warlock::Demonology
DEMONIC_CORE = WoW120Spells::Warlock::Demonology::DEMONIC_CORE,
DEMONIC_CALLING = WoW120Spells::Warlock::Demonology::DEMONIC_CALLING,
DEMONIC_STRENGTH = WoW120Spells::Warlock::Demonology::DEMONIC_STRENGTH,
POWER_SIPHON = WoW120Spells::Warlock::Demonology::POWER_SIPHON,
// Major Cooldowns - Using central registry: WoW112Spells::Warlock::Demonology
SUMMON_DEMONIC_TYRANT_CD = WoW112Spells::Warlock::Demonology::SUMMON_DEMONIC_TYRANT,
NETHER_PORTAL_CD = WoW112Spells::Warlock::Demonology::NETHER_PORTAL,
GUILLOTINE = WoW112Spells::Warlock::Demonology::GUILLOTINE,
// Major Cooldowns - Using central registry: WoW120Spells::Warlock::Demonology
SUMMON_DEMONIC_TYRANT_CD = WoW120Spells::Warlock::Demonology::SUMMON_DEMONIC_TYRANT,
NETHER_PORTAL_CD = WoW120Spells::Warlock::Demonology::NETHER_PORTAL,
GUILLOTINE = WoW120Spells::Warlock::Demonology::GUILLOTINE,
// Utility - Using central registry: WoW112Spells::Warlock::Demonology
SOUL_STRIKE = WoW112Spells::Warlock::Demonology::SOUL_STRIKE,
FEL_DOMINATION = WoW112Spells::Warlock::Demonology::FEL_DOMINATION,
HEALTH_FUNNEL_DEMO = WoW112Spells::Warlock::HEALTH_FUNNEL,
BANISH_DEMO = WoW112Spells::Warlock::BANISH,
FEAR_DEMO = WoW112Spells::Warlock::FEAR,
MORTAL_COIL_DEMO = WoW112Spells::Warlock::MORTAL_COIL,
SHADOWFURY = WoW112Spells::Warlock::SHADOWFURY,
// Utility - Using central registry: WoW120Spells::Warlock::Demonology
SOUL_STRIKE = WoW120Spells::Warlock::Demonology::SOUL_STRIKE,
FEL_DOMINATION = WoW120Spells::Warlock::Demonology::FEL_DOMINATION,
HEALTH_FUNNEL_DEMO = WoW120Spells::Warlock::HEALTH_FUNNEL,
BANISH_DEMO = WoW120Spells::Warlock::BANISH,
FEAR_DEMO = WoW120Spells::Warlock::FEAR,
MORTAL_COIL_DEMO = WoW120Spells::Warlock::MORTAL_COIL,
SHADOWFURY = WoW120Spells::Warlock::SHADOWFURY,
// Defensives - Using central registry: WoW112Spells::Warlock
UNENDING_RESOLVE_DEMO = WoW112Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT_DEMO = WoW112Spells::Warlock::Affliction::DARK_PACT,
DEMONIC_CIRCLE_TELEPORT_DEMO = WoW112Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY_DEMO = WoW112Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH_DEMO = WoW112Spells::Warlock::BURNING_RUSH,
// Defensives - Using central registry: WoW120Spells::Warlock
UNENDING_RESOLVE_DEMO = WoW120Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT_DEMO = WoW120Spells::Warlock::Affliction::DARK_PACT,
DEMONIC_CIRCLE_TELEPORT_DEMO = WoW120Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY_DEMO = WoW120Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH_DEMO = WoW120Spells::Warlock::BURNING_RUSH,
// Talents - Using central registry: WoW112Spells::Warlock::Demonology
FROM_THE_SHADOWS = WoW112Spells::Warlock::Demonology::FROM_THE_SHADOWS,
SOUL_CONDUIT_DEMO = WoW112Spells::Warlock::Demonology::SOUL_CONDUIT,
INNER_DEMONS = WoW112Spells::Warlock::Demonology::INNER_DEMONS,
CARNIVOROUS_STALKERS = WoW112Spells::Warlock::Demonology::CARNIVOROUS_STALKERS
// Talents - Using central registry: WoW120Spells::Warlock::Demonology
FROM_THE_SHADOWS = WoW120Spells::Warlock::Demonology::FROM_THE_SHADOWS,
SOUL_CONDUIT_DEMO = WoW120Spells::Warlock::Demonology::SOUL_CONDUIT,
INNER_DEMONS = WoW120Spells::Warlock::Demonology::INNER_DEMONS,
CARNIVOROUS_STALKERS = WoW120Spells::Warlock::Demonology::CARNIVOROUS_STALKERS
};
// Dual resource type for Demonology Warlock
@@ -25,7 +25,7 @@
#include "../../Decision/ActionPriorityQueue.h"
#include "../../Decision/BehaviorTree.h"
#include "../BotAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
namespace Playerbot
{
@@ -43,66 +43,66 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// DESTRUCTION WARLOCK SPELL IDs (WoW 11.2 - The War Within)
// Central Registry: WoW112Spells::Warlock::Destruction in SpellValidation_WoW112_Part2.h
// DESTRUCTION WARLOCK SPELL IDs (WoW 12.0 - The War Within)
// Central Registry: WoW120Spells::Warlock::Destruction in SpellValidation_WoW120_Part2.h
// ============================================================================
enum DestructionWarlockSpells
{
// Core Spells - Using central registry: WoW112Spells::Warlock::Destruction
CHAOS_BOLT = WoW112Spells::Warlock::Destruction::CHAOS_BOLT,
INCINERATE = WoW112Spells::Warlock::Destruction::INCINERATE,
CONFLAGRATE = WoW112Spells::Warlock::Destruction::CONFLAGRATE,
IMMOLATE = WoW112Spells::Warlock::Destruction::IMMOLATE,
// Core Spells - Using central registry: WoW120Spells::Warlock::Destruction
CHAOS_BOLT = WoW120Spells::Warlock::Destruction::CHAOS_BOLT,
INCINERATE = WoW120Spells::Warlock::Destruction::INCINERATE,
CONFLAGRATE = WoW120Spells::Warlock::Destruction::CONFLAGRATE,
IMMOLATE = WoW120Spells::Warlock::Destruction::IMMOLATE,
// AoE Spells - Using central registry: WoW112Spells::Warlock::Destruction
RAIN_OF_FIRE = WoW112Spells::Warlock::Destruction::RAIN_OF_FIRE,
CHANNEL_DEMONFIRE = WoW112Spells::Warlock::Destruction::CHANNEL_DEMONFIRE,
CATACLYSM = WoW112Spells::Warlock::Destruction::CATACLYSM,
HAVOC = WoW112Spells::Warlock::Destruction::HAVOC,
// AoE Spells - Using central registry: WoW120Spells::Warlock::Destruction
RAIN_OF_FIRE = WoW120Spells::Warlock::Destruction::RAIN_OF_FIRE,
CHANNEL_DEMONFIRE = WoW120Spells::Warlock::Destruction::CHANNEL_DEMONFIRE,
CATACLYSM = WoW120Spells::Warlock::Destruction::CATACLYSM,
HAVOC = WoW120Spells::Warlock::Destruction::HAVOC,
// Major Cooldowns - Using central registry: WoW112Spells::Warlock::Destruction
SUMMON_INFERNAL = WoW112Spells::Warlock::Destruction::SUMMON_INFERNAL,
DARK_SOUL_INSTABILITY = WoW112Spells::Warlock::Destruction::DARK_SOUL_INSTABILITY,
SOUL_FIRE = WoW112Spells::Warlock::Destruction::SOUL_FIRE,
// Major Cooldowns - Using central registry: WoW120Spells::Warlock::Destruction
SUMMON_INFERNAL = WoW120Spells::Warlock::Destruction::SUMMON_INFERNAL,
DARK_SOUL_INSTABILITY = WoW120Spells::Warlock::Destruction::DARK_SOUL_INSTABILITY,
SOUL_FIRE = WoW120Spells::Warlock::Destruction::SOUL_FIRE,
// Pet Management - Using central registry: WoW112Spells::Warlock
SUMMON_IMP_DESTRO = WoW112Spells::Warlock::SUMMON_IMP,
SUMMON_VOIDWALKER_DESTRO = WoW112Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_SUCCUBUS_DESTRO = WoW112Spells::Warlock::SUMMON_SUCCUBUS,
SUMMON_FELHUNTER_DESTRO = WoW112Spells::Warlock::SUMMON_FELHUNTER,
COMMAND_DEMON_DESTRO = WoW112Spells::Warlock::COMMAND_DEMON,
// Pet Management - Using central registry: WoW120Spells::Warlock
SUMMON_IMP_DESTRO = WoW120Spells::Warlock::SUMMON_IMP,
SUMMON_VOIDWALKER_DESTRO = WoW120Spells::Warlock::SUMMON_VOIDWALKER,
SUMMON_SUCCUBUS_DESTRO = WoW120Spells::Warlock::SUMMON_SUCCUBUS,
SUMMON_FELHUNTER_DESTRO = WoW120Spells::Warlock::SUMMON_FELHUNTER,
COMMAND_DEMON_DESTRO = WoW120Spells::Warlock::COMMAND_DEMON,
// Utility - Using central registry: WoW112Spells::Warlock
CURSE_OF_TONGUES_DESTRO = WoW112Spells::Warlock::CURSE_OF_TONGUES,
CURSE_OF_WEAKNESS_DESTRO = WoW112Spells::Warlock::CURSE_OF_WEAKNESS,
CURSE_OF_EXHAUSTION_DESTRO = WoW112Spells::Warlock::CURSE_OF_EXHAUSTION,
SHADOWBURN = WoW112Spells::Warlock::Destruction::SHADOWBURN,
BACKDRAFT = WoW112Spells::Warlock::Destruction::BACKDRAFT,
// Utility - Using central registry: WoW120Spells::Warlock
CURSE_OF_TONGUES_DESTRO = WoW120Spells::Warlock::CURSE_OF_TONGUES,
CURSE_OF_WEAKNESS_DESTRO = WoW120Spells::Warlock::CURSE_OF_WEAKNESS,
CURSE_OF_EXHAUSTION_DESTRO = WoW120Spells::Warlock::CURSE_OF_EXHAUSTION,
SHADOWBURN = WoW120Spells::Warlock::Destruction::SHADOWBURN,
BACKDRAFT = WoW120Spells::Warlock::Destruction::BACKDRAFT,
// Defensives - Using central registry: WoW112Spells::Warlock
UNENDING_RESOLVE_DESTRO = WoW112Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT_DESTRO = WoW112Spells::Warlock::Affliction::DARK_PACT,
MORTAL_COIL_DESTRO = WoW112Spells::Warlock::MORTAL_COIL,
HOWL_OF_TERROR_DESTRO = WoW112Spells::Warlock::HOWL_OF_TERROR,
FEAR_DESTRO = WoW112Spells::Warlock::FEAR,
BANISH_DESTRO = WoW112Spells::Warlock::BANISH,
DEMONIC_CIRCLE_TELEPORT_DESTRO = WoW112Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY_DESTRO = WoW112Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH_DESTRO = WoW112Spells::Warlock::BURNING_RUSH,
// Defensives - Using central registry: WoW120Spells::Warlock
UNENDING_RESOLVE_DESTRO = WoW120Spells::Warlock::UNENDING_RESOLVE,
DARK_PACT_DESTRO = WoW120Spells::Warlock::Affliction::DARK_PACT,
MORTAL_COIL_DESTRO = WoW120Spells::Warlock::MORTAL_COIL,
HOWL_OF_TERROR_DESTRO = WoW120Spells::Warlock::HOWL_OF_TERROR,
FEAR_DESTRO = WoW120Spells::Warlock::FEAR,
BANISH_DESTRO = WoW120Spells::Warlock::BANISH,
DEMONIC_CIRCLE_TELEPORT_DESTRO = WoW120Spells::Warlock::DEMONIC_CIRCLE_TELEPORT,
DEMONIC_GATEWAY_DESTRO = WoW120Spells::Warlock::DEMONIC_GATEWAY,
BURNING_RUSH_DESTRO = WoW120Spells::Warlock::BURNING_RUSH,
// Procs and Buffs - Using central registry: WoW112Spells::Warlock::Destruction
BACKDRAFT_BUFF = WoW112Spells::Warlock::Destruction::BACKDRAFT_BUFF,
REVERSE_ENTROPY = WoW112Spells::Warlock::Destruction::REVERSE_ENTROPY,
ERADICATION = WoW112Spells::Warlock::Destruction::ERADICATION,
FLASHOVER = WoW112Spells::Warlock::Destruction::FLASHOVER,
// Procs and Buffs - Using central registry: WoW120Spells::Warlock::Destruction
BACKDRAFT_BUFF = WoW120Spells::Warlock::Destruction::BACKDRAFT_BUFF,
REVERSE_ENTROPY = WoW120Spells::Warlock::Destruction::REVERSE_ENTROPY,
ERADICATION = WoW120Spells::Warlock::Destruction::ERADICATION,
FLASHOVER = WoW120Spells::Warlock::Destruction::FLASHOVER,
// Talents - Using central registry: WoW112Spells::Warlock::Destruction
ROARING_BLAZE = WoW112Spells::Warlock::Destruction::ROARING_BLAZE,
INTERNAL_COMBUSTION = WoW112Spells::Warlock::Destruction::INTERNAL_COMBUSTION,
FIRE_AND_BRIMSTONE = WoW112Spells::Warlock::Destruction::FIRE_AND_BRIMSTONE,
INFERNO = WoW112Spells::Warlock::Destruction::INFERNO,
GRIMOIRE_OF_SUPREMACY = WoW112Spells::Warlock::Destruction::GRIMOIRE_OF_SUPREMACY
// Talents - Using central registry: WoW120Spells::Warlock::Destruction
ROARING_BLAZE = WoW120Spells::Warlock::Destruction::ROARING_BLAZE,
INTERNAL_COMBUSTION = WoW120Spells::Warlock::Destruction::INTERNAL_COMBUSTION,
FIRE_AND_BRIMSTONE = WoW120Spells::Warlock::Destruction::FIRE_AND_BRIMSTONE,
INFERNO = WoW120Spells::Warlock::Destruction::INFERNO,
GRIMOIRE_OF_SUPREMACY = WoW120Spells::Warlock::Destruction::GRIMOIRE_OF_SUPREMACY
};
// Dual resource type for Destruction Warlock
@@ -11,7 +11,7 @@
#include "AfflictionWarlock.h"
#include "DemonologyWarlock.h"
#include "DestructionWarlock.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
#include "GameTime.h"
#include "../../Combat/CombatBehaviorIntegration.h"
#include "Player.h"
@@ -46,16 +46,16 @@ namespace Playerbot
WarlockAI::~WarlockAI() = default;
// ============================================================================
// Warlock Spell IDs - Using Central SpellValidation Registry (WoW 11.2)
// Warlock Spell IDs - Using Central SpellValidation Registry (WoW 12.0)
// ============================================================================
// All spell IDs sourced from SpellValidation_WoW112_Part2.h to maintain single source of truth
// All spell IDs sourced from SpellValidation_WoW120_Part2.h to maintain single source of truth
// Namespace aliases for cleaner code
namespace WarlockSpells = WoW112Spells::Warlock;
namespace WarlockAffliction = WoW112Spells::Warlock::Affliction;
namespace WarlockDemonology = WoW112Spells::Warlock::Demonology;
namespace WarlockDestruction = WoW112Spells::Warlock::Destruction;
namespace WarlockCommon = WoW112Spells::Warlock::Common;
namespace WarlockSpells = WoW120Spells::Warlock;
namespace WarlockAffliction = WoW120Spells::Warlock::Affliction;
namespace WarlockDemonology = WoW120Spells::Warlock::Demonology;
namespace WarlockDestruction = WoW120Spells::Warlock::Destruction;
namespace WarlockCommon = WoW120Spells::Warlock::Common;
// Legacy spell ID aliases for backward compatibility with existing code
// These map old WARLOCK_ prefixed names to the central registry
@@ -383,7 +383,7 @@ bool WarlockAI::HandleDefensives()
return true;
}
// Low health - use moderate defensives (WoW 11.2)
// Low health - use moderate defensives (WoW 12.0)
if (healthPct < 40.0f)
{
// Dark Pact for shield (Affliction)
@@ -479,7 +479,7 @@ bool WarlockAI::HandlePetManagement()
return true;
}
}
// Note: Consume Shadows and Demonic Empowerment removed in WoW 11.2
// Note: Consume Shadows and Demonic Empowerment removed in WoW 12.0
// Command pet to attack if idle
Unit* target = bot->GetVictim();
@@ -605,7 +605,7 @@ bool WarlockAI::SummonPet()
// ========================================================================
// CRITICAL FIX: Basic pet summons do NOT cost soul shards in modern WoW!
// ========================================================================
// In WoW 11.2 (The War Within), Summon Imp/Voidwalker/Succubus/Felhunter
// In WoW 12.0 (The War Within), Summon Imp/Voidwalker/Succubus/Felhunter
// are FREE to cast - they only have a cast time (6 seconds).
// Soul Shards are ONLY used for combat abilities (Chaos Bolt, etc.).
// The previous check for "soulShards >= 10" was blocking ALL pet summons!
@@ -737,7 +737,7 @@ bool WarlockAI::HandleAoERotation(Unit* target)
}
}
// Note: Mannoroth's Fury removed in WoW 11.2
// Note: Mannoroth's Fury removed in WoW 12.0
return false;
}
@@ -1091,7 +1091,7 @@ bool WarlockAI::ApplyCurse(Unit* target)
uint32 curseSpell = 0;
// Choose appropriate curse based on target and situation
// Note: Curse of Elements removed in WoW 11.2
// Note: Curse of Elements removed in WoW 12.0
if (target->GetPowerType() == POWER_MANA)
{
// Curse of Tongues for casters
@@ -1499,7 +1499,7 @@ void WarlockAI::OnNonCombatUpdate(uint32 diff)
TC_LOG_DEBUG("playerbot.warlock", "Warlock {} healing pet with Health Funnel (out of combat)", bot->GetName());
return;
}
// Note: Consume Shadows removed in WoW 11.2
// Note: Consume Shadows removed in WoW 12.0
}
}
@@ -1630,7 +1630,7 @@ void WarlockAI::UpdateWarlockBuffs()
if (bot->HasUnitState(UNIT_STATE_CASTING))
return;
// Note: Demon Armor, Fel Armor, Soul Link, and Dark Intent removed in WoW 11.2
// Note: Demon Armor, Fel Armor, Soul Link, and Dark Intent removed in WoW 12.0
// Warlocks no longer have passive armor buffs - they rely on defensive cooldowns instead
// Soul Link is now a passive talent, not an active ability
}
@@ -1864,7 +1864,7 @@ void WarlockAI::ManageWarlockCooldowns()
uint32 spec = static_cast<uint32>(bot->GetPrimarySpecialization());
// Summon Demonic Tyrant for Demonology (266) - main cooldown in WoW 11.2
// Summon Demonic Tyrant for Demonology (266) - main cooldown in WoW 12.0
// Note: Demonic Empowerment and Metamorphosis removed in 11.2
if (spec == 266)
{
@@ -19,7 +19,7 @@
#include "WarriorAI.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
// Phase 5 Integration
#include "../../Decision/ActionPriorityQueue.h"
#include "../../Decision/BehaviorTree.h"
@@ -43,59 +43,59 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// ARMS WARRIOR SPELL ALIASES - Using Central Registry (WoW 11.2.7)
// ARMS WARRIOR SPELL ALIASES - Using Central Registry (WoW 12.0.7)
// ============================================================================
// All spell IDs from WoW112Spells::Warrior and WoW112Spells::Warrior::Arms
// All spell IDs from WoW120Spells::Warrior and WoW120Spells::Warrior::Arms
namespace ArmsWarriorSpells
{
// Core Warrior spells (from WoW112Spells::Warrior)
using namespace WoW112Spells::Warrior;
// Core Warrior spells (from WoW120Spells::Warrior)
using namespace WoW120Spells::Warrior;
// Arms-specific spells (from WoW112Spells::Warrior::Arms)
// Arms-specific spells (from WoW120Spells::Warrior::Arms)
// Aliased with SPELL_ prefix for consistency
constexpr uint32 SPELL_BATTLE_SHOUT = WoW112Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW112Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW112Spells::Warrior::CHARGE;
constexpr uint32 SPELL_BATTLE_SHOUT = WoW120Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW120Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW120Spells::Warrior::CHARGE;
// Arms Rotation
constexpr uint32 SPELL_MORTAL_STRIKE = WoW112Spells::Warrior::Arms::MORTAL_STRIKE;
constexpr uint32 SPELL_COLOSSUS_SMASH = WoW112Spells::Warrior::Arms::COLOSSUS_SMASH;
constexpr uint32 SPELL_OVERPOWER = WoW112Spells::Warrior::Arms::OVERPOWER;
constexpr uint32 SPELL_EXECUTE = WoW112Spells::Warrior::Arms::EXECUTE;
constexpr uint32 SPELL_WHIRLWIND = WoW112Spells::Warrior::Arms::WHIRLWIND;
constexpr uint32 SPELL_REND = WoW112Spells::Warrior::Arms::REND;
constexpr uint32 SPELL_CLEAVE = WoW112Spells::Warrior::Arms::CLEAVE;
constexpr uint32 SPELL_SLAM = WoW112Spells::Warrior::Arms::SLAM;
constexpr uint32 SPELL_MORTAL_STRIKE = WoW120Spells::Warrior::Arms::MORTAL_STRIKE;
constexpr uint32 SPELL_COLOSSUS_SMASH = WoW120Spells::Warrior::Arms::COLOSSUS_SMASH;
constexpr uint32 SPELL_OVERPOWER = WoW120Spells::Warrior::Arms::OVERPOWER;
constexpr uint32 SPELL_EXECUTE = WoW120Spells::Warrior::Arms::EXECUTE;
constexpr uint32 SPELL_WHIRLWIND = WoW120Spells::Warrior::Arms::WHIRLWIND;
constexpr uint32 SPELL_REND = WoW120Spells::Warrior::Arms::REND;
constexpr uint32 SPELL_CLEAVE = WoW120Spells::Warrior::Arms::CLEAVE;
constexpr uint32 SPELL_SLAM = WoW120Spells::Warrior::Arms::SLAM;
// Arms Cooldowns
constexpr uint32 SPELL_WARBREAKER = WoW112Spells::Warrior::Arms::WARBREAKER;
constexpr uint32 SPELL_SWEEPING_STRIKES = WoW112Spells::Warrior::Arms::SWEEPING_STRIKES;
constexpr uint32 SPELL_BLADESTORM = WoW112Spells::Warrior::Arms::BLADESTORM;
constexpr uint32 SPELL_AVATAR = WoW112Spells::Warrior::Arms::AVATAR;
constexpr uint32 SPELL_DIE_BY_THE_SWORD = WoW112Spells::Warrior::Arms::DIE_BY_THE_SWORD;
constexpr uint32 SPELL_DEFENSIVE_STANCE = WoW112Spells::Warrior::Arms::DEFENSIVE_STANCE;
constexpr uint32 SPELL_SKULLSPLITTER = WoW112Spells::Warrior::Arms::SKULLSPLITTER;
constexpr uint32 SPELL_RAVAGER = WoW112Spells::Warrior::Arms::RAVAGER;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW112Spells::Warrior::Arms::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW112Spells::Warrior::Arms::CHAMPIONS_SPEAR;
constexpr uint32 SPELL_WARBREAKER = WoW120Spells::Warrior::Arms::WARBREAKER;
constexpr uint32 SPELL_SWEEPING_STRIKES = WoW120Spells::Warrior::Arms::SWEEPING_STRIKES;
constexpr uint32 SPELL_BLADESTORM = WoW120Spells::Warrior::Arms::BLADESTORM;
constexpr uint32 SPELL_AVATAR = WoW120Spells::Warrior::Arms::AVATAR;
constexpr uint32 SPELL_DIE_BY_THE_SWORD = WoW120Spells::Warrior::Arms::DIE_BY_THE_SWORD;
constexpr uint32 SPELL_DEFENSIVE_STANCE = WoW120Spells::Warrior::Arms::DEFENSIVE_STANCE;
constexpr uint32 SPELL_SKULLSPLITTER = WoW120Spells::Warrior::Arms::SKULLSPLITTER;
constexpr uint32 SPELL_RAVAGER = WoW120Spells::Warrior::Arms::RAVAGER;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW120Spells::Warrior::Arms::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW120Spells::Warrior::Arms::CHAMPIONS_SPEAR;
// Deep Wounds (DoT)
constexpr uint32 SPELL_DEEP_WOUNDS = WoW112Spells::Warrior::Arms::DEEP_WOUNDS;
constexpr uint32 SPELL_DEEP_WOUNDS_DEBUFF = WoW112Spells::Warrior::Arms::DEEP_WOUNDS_DEBUFF;
constexpr uint32 SPELL_DEEP_WOUNDS = WoW120Spells::Warrior::Arms::DEEP_WOUNDS;
constexpr uint32 SPELL_DEEP_WOUNDS_DEBUFF = WoW120Spells::Warrior::Arms::DEEP_WOUNDS_DEBUFF;
// Procs (from central registry)
constexpr uint32 SPELL_OVERPOWER_PROC = WoW112Spells::Warrior::OVERPOWER_PROC;
constexpr uint32 SPELL_SUDDEN_DEATH_PROC = WoW112Spells::Warrior::SUDDEN_DEATH_PROC;
constexpr uint32 SPELL_OVERPOWER_PROC = WoW120Spells::Warrior::OVERPOWER_PROC;
constexpr uint32 SPELL_SUDDEN_DEATH_PROC = WoW120Spells::Warrior::SUDDEN_DEATH_PROC;
// Hero Talents - Slayer
constexpr uint32 SPELL_SLAYERS_STRIKE = WoW112Spells::Warrior::Arms::SLAYERS_STRIKE;
constexpr uint32 SPELL_OVERWHELMING_BLADES = WoW112Spells::Warrior::Arms::OVERWHELMING_BLADES;
constexpr uint32 SPELL_SLAYERS_DOMINANCE = WoW112Spells::Warrior::Arms::SLAYERS_DOMINANCE;
constexpr uint32 SPELL_SLAYERS_STRIKE = WoW120Spells::Warrior::Arms::SLAYERS_STRIKE;
constexpr uint32 SPELL_OVERWHELMING_BLADES = WoW120Spells::Warrior::Arms::OVERWHELMING_BLADES;
constexpr uint32 SPELL_SLAYERS_DOMINANCE = WoW120Spells::Warrior::Arms::SLAYERS_DOMINANCE;
// Hero Talents - Colossus
constexpr uint32 SPELL_DEMOLISH = WoW112Spells::Warrior::Arms::DEMOLISH;
constexpr uint32 SPELL_COLOSSAL_MIGHT = WoW112Spells::Warrior::Arms::COLOSSAL_MIGHT;
constexpr uint32 SPELL_MARTIAL_PROWESS = WoW112Spells::Warrior::Arms::MARTIAL_PROWESS;
constexpr uint32 SPELL_DEMOLISH = WoW120Spells::Warrior::Arms::DEMOLISH;
constexpr uint32 SPELL_COLOSSAL_MIGHT = WoW120Spells::Warrior::Arms::COLOSSAL_MIGHT;
constexpr uint32 SPELL_MARTIAL_PROWESS = WoW120Spells::Warrior::Arms::MARTIAL_PROWESS;
}
/**
@@ -105,8 +105,8 @@ namespace ArmsWarriorSpells
* - Inherits from MeleeDpsSpecialization<RageResource> for role defaults
* - Automatically gets UpdateCooldowns, CanUseAbility, OnCombatStart/End
* - Uses specialized rage management as primary resource
* - Uses central spell registry (SpellValidation_WoW112_Part2.h)
* - WoW 11.2.7 (The War Within) spell IDs
* - Uses central spell registry (SpellValidation_WoW120_Part2.h)
* - WoW 12.0.7 (The War Within) spell IDs
*/
class ArmsWarriorRefactored : public MeleeDpsSpecialization<RageResource>
{
@@ -19,7 +19,7 @@
#include "WarriorAI.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
// Phase 5 Integration
#include "../../Decision/ActionPriorityQueue.h"
#include "../../Decision/BehaviorTree.h"
@@ -45,40 +45,40 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// FURY WARRIOR SPELL ALIASES - Using Central Registry (WoW 11.2.7)
// FURY WARRIOR SPELL ALIASES - Using Central Registry (WoW 12.0.7)
// ============================================================================
namespace FuryWarriorSpells
{
// Core Warrior spells (from WoW112Spells::Warrior)
constexpr uint32 SPELL_BATTLE_SHOUT = WoW112Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW112Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW112Spells::Warrior::CHARGE;
constexpr uint32 SPELL_BERSERKER_RAGE = WoW112Spells::Warrior::BERSERKER_RAGE;
// Core Warrior spells (from WoW120Spells::Warrior)
constexpr uint32 SPELL_BATTLE_SHOUT = WoW120Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW120Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW120Spells::Warrior::CHARGE;
constexpr uint32 SPELL_BERSERKER_RAGE = WoW120Spells::Warrior::BERSERKER_RAGE;
// Fury Core Rotation
constexpr uint32 SPELL_BLOODTHIRST = WoW112Spells::Warrior::Fury::BLOODTHIRST;
constexpr uint32 SPELL_RAMPAGE = WoW112Spells::Warrior::Fury::RAMPAGE;
constexpr uint32 SPELL_RAGING_BLOW = WoW112Spells::Warrior::Fury::RAGING_BLOW;
constexpr uint32 SPELL_EXECUTE = WoW112Spells::Warrior::Fury::EXECUTE;
constexpr uint32 SPELL_WHIRLWIND = WoW112Spells::Warrior::Fury::WHIRLWIND;
constexpr uint32 SPELL_ONSLAUGHT = WoW112Spells::Warrior::Fury::ONSLAUGHT;
constexpr uint32 SPELL_BLOODTHIRST = WoW120Spells::Warrior::Fury::BLOODTHIRST;
constexpr uint32 SPELL_RAMPAGE = WoW120Spells::Warrior::Fury::RAMPAGE;
constexpr uint32 SPELL_RAGING_BLOW = WoW120Spells::Warrior::Fury::RAGING_BLOW;
constexpr uint32 SPELL_EXECUTE = WoW120Spells::Warrior::Fury::EXECUTE;
constexpr uint32 SPELL_WHIRLWIND = WoW120Spells::Warrior::Fury::WHIRLWIND;
constexpr uint32 SPELL_ONSLAUGHT = WoW120Spells::Warrior::Fury::ONSLAUGHT;
// Fury Cooldowns
constexpr uint32 SPELL_RECKLESSNESS = WoW112Spells::Warrior::Fury::RECKLESSNESS;
constexpr uint32 SPELL_ENRAGED_REGENERATION = WoW112Spells::Warrior::Fury::ENRAGED_REGENERATION;
constexpr uint32 SPELL_BLADESTORM = WoW112Spells::Warrior::Fury::BLADESTORM;
constexpr uint32 SPELL_RAVAGER = WoW112Spells::Warrior::Fury::RAVAGER;
constexpr uint32 SPELL_ODYN_FURY = WoW112Spells::Warrior::Fury::ODYN_FURY;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW112Spells::Warrior::Fury::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW112Spells::Warrior::Fury::CHAMPIONS_SPEAR;
constexpr uint32 SPELL_RECKLESSNESS = WoW120Spells::Warrior::Fury::RECKLESSNESS;
constexpr uint32 SPELL_ENRAGED_REGENERATION = WoW120Spells::Warrior::Fury::ENRAGED_REGENERATION;
constexpr uint32 SPELL_BLADESTORM = WoW120Spells::Warrior::Fury::BLADESTORM;
constexpr uint32 SPELL_RAVAGER = WoW120Spells::Warrior::Fury::RAVAGER;
constexpr uint32 SPELL_ODYN_FURY = WoW120Spells::Warrior::Fury::ODYN_FURY;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW120Spells::Warrior::Fury::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW120Spells::Warrior::Fury::CHAMPIONS_SPEAR;
// Enrage and Buffs
constexpr uint32 SPELL_ENRAGE = WoW112Spells::Warrior::Fury::ENRAGE;
constexpr uint32 SPELL_WHIRLWIND_BUFF = WoW112Spells::Warrior::Fury::WHIRLWIND_BUFF;
constexpr uint32 SPELL_ENRAGE = WoW120Spells::Warrior::Fury::ENRAGE;
constexpr uint32 SPELL_WHIRLWIND_BUFF = WoW120Spells::Warrior::Fury::WHIRLWIND_BUFF;
// Hero Talents
constexpr uint32 SPELL_SLAYERS_STRIKE = WoW112Spells::Warrior::Fury::SLAYERS_STRIKE;
constexpr uint32 SPELL_THUNDER_BLAST = WoW112Spells::Warrior::Fury::THUNDER_BLAST;
constexpr uint32 SPELL_SLAYERS_STRIKE = WoW120Spells::Warrior::Fury::SLAYERS_STRIKE;
constexpr uint32 SPELL_THUNDER_BLAST = WoW120Spells::Warrior::Fury::THUNDER_BLAST;
}
/**
@@ -19,7 +19,7 @@
#include "WarriorAI.h"
#include "../CombatSpecializationTemplates.h"
#include "../ResourceTypes.h"
#include "../SpellValidation_WoW112_Part2.h" // Central spell registry
#include "../SpellValidation_WoW120_Part2.h" // Central spell registry
#include "Item.h"
#include "ItemDefines.h"
#include "../../Services/ThreatAssistant.h" // Phase 5C: Unified threat service
@@ -48,39 +48,39 @@ using bot::ai::SpellCategory;
// Note: bot::ai::Action() conflicts with Playerbot::Action, use bot::ai::Action() explicitly
// ============================================================================
// PROTECTION WARRIOR SPELL ALIASES - Using Central Registry (WoW 11.2.7)
// PROTECTION WARRIOR SPELL ALIASES - Using Central Registry (WoW 12.0.7)
// ============================================================================
namespace ProtectionWarriorSpells
{
// Core Warrior spells (from WoW112Spells::Warrior)
constexpr uint32 SPELL_BATTLE_SHOUT = WoW112Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW112Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW112Spells::Warrior::CHARGE;
constexpr uint32 SPELL_TAUNT = WoW112Spells::Warrior::TAUNT;
constexpr uint32 SPELL_RALLYING_CRY = WoW112Spells::Warrior::RALLYING_CRY;
constexpr uint32 SPELL_SPELL_REFLECTION = WoW112Spells::Warrior::SPELL_REFLECTION;
// Core Warrior spells (from WoW120Spells::Warrior)
constexpr uint32 SPELL_BATTLE_SHOUT = WoW120Spells::Warrior::BATTLE_SHOUT;
constexpr uint32 SPELL_COMMANDING_SHOUT = WoW120Spells::Warrior::COMMANDING_SHOUT;
constexpr uint32 SPELL_CHARGE = WoW120Spells::Warrior::CHARGE;
constexpr uint32 SPELL_TAUNT = WoW120Spells::Warrior::TAUNT;
constexpr uint32 SPELL_RALLYING_CRY = WoW120Spells::Warrior::RALLYING_CRY;
constexpr uint32 SPELL_SPELL_REFLECTION = WoW120Spells::Warrior::SPELL_REFLECTION;
// Protection Core Rotation
constexpr uint32 SPELL_SHIELD_SLAM = WoW112Spells::Warrior::Protection::SHIELD_SLAM;
constexpr uint32 SPELL_THUNDER_CLAP = WoW112Spells::Warrior::Protection::THUNDER_CLAP;
constexpr uint32 SPELL_REVENGE = WoW112Spells::Warrior::Protection::REVENGE;
constexpr uint32 SPELL_DEVASTATE = WoW112Spells::Warrior::Protection::DEVASTATE;
constexpr uint32 SPELL_SHIELD_BLOCK = WoW112Spells::Warrior::Protection::SHIELD_BLOCK;
constexpr uint32 SPELL_IGNORE_PAIN = WoW112Spells::Warrior::Protection::IGNORE_PAIN;
constexpr uint32 SPELL_DEMORALIZING_SHOUT = WoW112Spells::Warrior::Protection::DEMORALIZING_SHOUT;
constexpr uint32 SPELL_CHALLENGING_SHOUT = WoW112Spells::Warrior::Protection::CHALLENGING_SHOUT;
constexpr uint32 SPELL_SHIELD_SLAM = WoW120Spells::Warrior::Protection::SHIELD_SLAM;
constexpr uint32 SPELL_THUNDER_CLAP = WoW120Spells::Warrior::Protection::THUNDER_CLAP;
constexpr uint32 SPELL_REVENGE = WoW120Spells::Warrior::Protection::REVENGE;
constexpr uint32 SPELL_DEVASTATE = WoW120Spells::Warrior::Protection::DEVASTATE;
constexpr uint32 SPELL_SHIELD_BLOCK = WoW120Spells::Warrior::Protection::SHIELD_BLOCK;
constexpr uint32 SPELL_IGNORE_PAIN = WoW120Spells::Warrior::Protection::IGNORE_PAIN;
constexpr uint32 SPELL_DEMORALIZING_SHOUT = WoW120Spells::Warrior::Protection::DEMORALIZING_SHOUT;
constexpr uint32 SPELL_CHALLENGING_SHOUT = WoW120Spells::Warrior::Protection::CHALLENGING_SHOUT;
// Protection Cooldowns
constexpr uint32 SPELL_LAST_STAND = WoW112Spells::Warrior::Protection::LAST_STAND;
constexpr uint32 SPELL_SHIELD_WALL = WoW112Spells::Warrior::Protection::SHIELD_WALL;
constexpr uint32 SPELL_AVATAR = WoW112Spells::Warrior::Protection::AVATAR;
constexpr uint32 SPELL_RAVAGER = WoW112Spells::Warrior::Protection::RAVAGER;
constexpr uint32 SPELL_SHIELD_CHARGE = WoW112Spells::Warrior::Protection::SHIELD_CHARGE;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW112Spells::Warrior::Protection::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW112Spells::Warrior::Protection::CHAMPIONS_SPEAR;
constexpr uint32 SPELL_LAST_STAND = WoW120Spells::Warrior::Protection::LAST_STAND;
constexpr uint32 SPELL_SHIELD_WALL = WoW120Spells::Warrior::Protection::SHIELD_WALL;
constexpr uint32 SPELL_AVATAR = WoW120Spells::Warrior::Protection::AVATAR;
constexpr uint32 SPELL_RAVAGER = WoW120Spells::Warrior::Protection::RAVAGER;
constexpr uint32 SPELL_SHIELD_CHARGE = WoW120Spells::Warrior::Protection::SHIELD_CHARGE;
constexpr uint32 SPELL_THUNDEROUS_ROAR = WoW120Spells::Warrior::Protection::THUNDEROUS_ROAR;
constexpr uint32 SPELL_CHAMPIONS_SPEAR = WoW120Spells::Warrior::Protection::CHAMPIONS_SPEAR;
// Procs
constexpr uint32 SPELL_REVENGE_PROC = WoW112Spells::Warrior::REVENGE_PROC;
constexpr uint32 SPELL_REVENGE_PROC = WoW120Spells::Warrior::REVENGE_PROC;
}
// Make Protection Warrior spell constants available in the class below
@@ -532,7 +532,7 @@ protected:
_threatPriority.pop();
// Note: Stances removed in WoW 11.2.7 (Legion 7.0+)
// Note: Stances removed in WoW 12.0.7 (Legion 7.0+)
// Protection Warriors automatically have passive tank benefits
// Initial Shield Block
@@ -10,7 +10,7 @@
#pragma once
#include "../ClassAI.h"
#include "../SpellValidation_WoW112_Part2.h"
#include "../SpellValidation_WoW120_Part2.h"
#include "Position.h"
#include "../../Combat/BotThreatManager.h"
#include "../../Combat/TargetSelector.h"
@@ -230,62 +230,62 @@ private:
static constexpr float MULTI_TARGET_THRESHOLD = 3.0f; // 3+ enemies
static constexpr uint32 FORMATION_CHECK_INTERVAL = 2000; // 2 seconds
// Spell IDs - Using central registry (WoW 11.2)
// Spell IDs - Using central registry (WoW 12.0)
enum WarriorSpells
{
// Stances
BATTLE_STANCE = WoW112Spells::Warrior::Common::BATTLE_STANCE,
DEFENSIVE_STANCE = WoW112Spells::Warrior::Common::DEFENSIVE_STANCE,
BERSERKER_STANCE = WoW112Spells::Warrior::Common::BERSERKER_STANCE,
BATTLE_STANCE = WoW120Spells::Warrior::Common::BATTLE_STANCE,
DEFENSIVE_STANCE = WoW120Spells::Warrior::Common::DEFENSIVE_STANCE,
BERSERKER_STANCE = WoW120Spells::Warrior::Common::BERSERKER_STANCE,
// Basic attacks
HEROIC_STRIKE = WoW112Spells::Warrior::Common::HEROIC_STRIKE,
CLEAVE = WoW112Spells::Warrior::Common::CLEAVE,
WHIRLWIND = WoW112Spells::Warrior::Common::WHIRLWIND,
HEROIC_STRIKE = WoW120Spells::Warrior::Common::HEROIC_STRIKE,
CLEAVE = WoW120Spells::Warrior::Common::CLEAVE,
WHIRLWIND = WoW120Spells::Warrior::Common::WHIRLWIND,
// Arms abilities
MORTAL_STRIKE = WoW112Spells::Warrior::Common::MORTAL_STRIKE,
COLOSSUS_SMASH = WoW112Spells::Warrior::Common::COLOSSUS_SMASH,
OVERPOWER = WoW112Spells::Warrior::Common::OVERPOWER,
REND = WoW112Spells::Warrior::Common::REND,
MORTAL_STRIKE = WoW120Spells::Warrior::Common::MORTAL_STRIKE,
COLOSSUS_SMASH = WoW120Spells::Warrior::Common::COLOSSUS_SMASH,
OVERPOWER = WoW120Spells::Warrior::Common::OVERPOWER,
REND = WoW120Spells::Warrior::Common::REND,
// Fury abilities
BLOODTHIRST = WoW112Spells::Warrior::Common::BLOODTHIRST,
RAMPAGE = WoW112Spells::Warrior::Common::RAMPAGE,
RAGING_BLOW = WoW112Spells::Warrior::Common::RAGING_BLOW,
EXECUTE = WoW112Spells::Warrior::Common::EXECUTE,
BLOODTHIRST = WoW120Spells::Warrior::Common::BLOODTHIRST,
RAMPAGE = WoW120Spells::Warrior::Common::RAMPAGE,
RAGING_BLOW = WoW120Spells::Warrior::Common::RAGING_BLOW,
EXECUTE = WoW120Spells::Warrior::Common::EXECUTE,
// Protection abilities
SHIELD_SLAM = WoW112Spells::Warrior::Common::SHIELD_SLAM,
THUNDER_CLAP = WoW112Spells::Warrior::Common::THUNDER_CLAP,
REVENGE = WoW112Spells::Warrior::Common::REVENGE,
DEVASTATE = WoW112Spells::Warrior::Common::DEVASTATE,
SHIELD_BLOCK = WoW112Spells::Warrior::Common::SHIELD_BLOCK,
SHIELD_SLAM = WoW120Spells::Warrior::Common::SHIELD_SLAM,
THUNDER_CLAP = WoW120Spells::Warrior::Common::THUNDER_CLAP,
REVENGE = WoW120Spells::Warrior::Common::REVENGE,
DEVASTATE = WoW120Spells::Warrior::Common::DEVASTATE,
SHIELD_BLOCK = WoW120Spells::Warrior::Common::SHIELD_BLOCK,
// Defensive cooldowns
SHIELD_WALL = WoW112Spells::Warrior::Common::SHIELD_WALL,
LAST_STAND = WoW112Spells::Warrior::Common::LAST_STAND,
SPELL_REFLECTION = WoW112Spells::Warrior::Common::SPELL_REFLECTION,
SHIELD_WALL = WoW120Spells::Warrior::Common::SHIELD_WALL,
LAST_STAND = WoW120Spells::Warrior::Common::LAST_STAND,
SPELL_REFLECTION = WoW120Spells::Warrior::Common::SPELL_REFLECTION,
// Offensive cooldowns
RECKLESSNESS = WoW112Spells::Warrior::Common::RECKLESSNESS,
BLADESTORM = WoW112Spells::Warrior::Common::BLADESTORM,
AVATAR = WoW112Spells::Warrior::Common::AVATAR,
RECKLESSNESS = WoW120Spells::Warrior::Common::RECKLESSNESS,
BLADESTORM = WoW120Spells::Warrior::Common::BLADESTORM,
AVATAR = WoW120Spells::Warrior::Common::AVATAR,
// Movement abilities
CHARGE = WoW112Spells::Warrior::Common::CHARGE,
INTERCEPT = WoW112Spells::Warrior::Common::INTERVENE, // INTERCEPT merged with INTERVENE in 11.2
HEROIC_LEAP = WoW112Spells::Warrior::Common::HEROIC_LEAP,
CHARGE = WoW120Spells::Warrior::Common::CHARGE,
INTERCEPT = WoW120Spells::Warrior::Common::INTERVENE, // INTERCEPT merged with INTERVENE in 11.2
HEROIC_LEAP = WoW120Spells::Warrior::Common::HEROIC_LEAP,
// Utility
PUMMEL = WoW112Spells::Warrior::Common::PUMMEL,
PUMMEL = WoW120Spells::Warrior::Common::PUMMEL,
DISARM = 676, // Removed in modern WoW, keeping legacy ID
TAUNT = WoW112Spells::Warrior::Common::TAUNT,
TAUNT = WoW120Spells::Warrior::Common::TAUNT,
SUNDER_ARMOR = 7386, // Removed in modern WoW, keeping legacy ID
// Buffs
BATTLE_SHOUT = WoW112Spells::Warrior::Common::BATTLE_SHOUT,
COMMANDING_SHOUT = WoW112Spells::Warrior::Common::COMMANDING_SHOUT,
BATTLE_SHOUT = WoW120Spells::Warrior::Common::BATTLE_SHOUT,
COMMANDING_SHOUT = WoW120Spells::Warrior::Common::COMMANDING_SHOUT,
// Weapon buffs (if applicable)
WEAPON_MASTER = 16538 // Passive talent, no spell ID needed
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2024 TrinityCore <https://www.trinitycore.org/>
*
* WoW 11.2 Interrupt Database Implementation
* WoW 12.0 Interrupt Database Implementation
*/
#include "InterruptDatabase.h"
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2024 TrinityCore <https://www.trinitycore.org/>
*
* WoW 11.2 (The War Within) Interrupt Priority Database
* WoW 12.0 (The War Within) Interrupt Priority Database
* Comprehensive spell interrupt priorities and configurations
*/
@@ -15,7 +15,7 @@
namespace Playerbot
{
// WoW 11.2 Spell Categories for interrupt prioritization
// WoW 12.0 Spell Categories for interrupt prioritization
enum class SpellCategory : uint8
{
// Healing
@@ -81,7 +81,7 @@ struct SpellInterruptConfig
class TC_GAME_API InterruptDatabase
{
public:
// Initialize the database with WoW 11.2 spell data
// Initialize the database with WoW 12.0 spell data
static void Initialize();
// Query methods
@@ -109,7 +109,7 @@ private:
static bool _initialized;
};
// WoW 11.2 Class Interrupt Abilities
// WoW 12.0 Class Interrupt Abilities
struct ClassInterruptAbility
{
uint32 spellId;
@@ -137,7 +137,7 @@ struct ClassInterruptAbility
resourceCost(resCost), offGCD(gcd), charges(chr) {}
};
// WoW 11.2 Interrupt ability database
// WoW 12.0 Interrupt ability database
namespace InterruptAbilities
{
// Death Knight
@@ -227,7 +227,7 @@ namespace InterruptAbilities
uint32 GetSchoolLockoutDuration(uint32 spellId);
}
// WoW 11.2 Critical Spells Database (must interrupt)
// WoW 12.0 Critical Spells Database (must interrupt)
namespace CriticalSpells
{
// Dungeon spells
@@ -305,7 +305,7 @@ namespace CriticalSpells
}
}
// WoW 11.2 Mythic+ scaling configurations
// WoW 12.0 Mythic+ scaling configurations
struct MythicPlusConfig
{
uint8 level;
@@ -30,7 +30,7 @@ class SpellInfo;
namespace Playerbot
{
// Interrupt priority levels for WoW 11.2 encounters
// Interrupt priority levels for WoW 12.0 encounters
enum class InterruptPriority : uint8
{
CRITICAL = 0, // Must interrupt immediately (healing, fear, etc.)
@@ -76,7 +76,7 @@ enum class InterruptMethod : uint8
FEAR = 7 // Fear to interrupt
};
// Interrupt target information for WoW 11.2
// Interrupt target information for WoW 12.0
struct InterruptTarget
{
ObjectGuid guid;
@@ -98,7 +98,7 @@ struct InterruptTarget
::std::string spellName;
::std::string targetName;
// WoW 11.2 specific fields
// WoW 12.0 specific fields
bool isMythicPlus;
uint8 mythicLevel;
bool hasInterruptImmunity;
@@ -120,7 +120,7 @@ struct InterruptTarget
assignmentStatus(InterruptAssignment::UNASSIGNED) {}
};
// Interrupt capability information for WoW 11.2 abilities
// Interrupt capability information for WoW 12.0 abilities
struct InterruptCapability
{
uint32 spellId;
@@ -140,7 +140,7 @@ struct InterruptCapability
InterruptPriority minPriority;
::std::vector<InterruptType> effectiveAgainst;
// WoW 11.2 specific fields
// WoW 12.0 specific fields
uint32 lockoutDuration; // Duration of spell school lockout
uint32 schoolMask; // Which schools this locks out
bool isHeroTalent; // Hero talent ability
@@ -319,7 +319,7 @@ public:
bool CanInterruptInTime(const InterruptTarget& target, InterruptMethod method);
uint32 GetOptimalInterruptTiming(const InterruptTarget& target);
// Group coordination for WoW 11.2
// Group coordination for WoW 12.0
void CoordinateInterruptsWithGroup(const ::std::vector<Player*>& groupMembers);
bool ShouldLetOthersInterrupt(const InterruptTarget& target);
void RegisterInterruptAttempt(const InterruptTarget& target);
@@ -345,7 +345,7 @@ public:
bool HandleInterruptFailure(const InterruptTarget& target, const InterruptResult& result);
void RequestEmergencyAssist(const InterruptTarget& target);
// Advanced interrupt strategies for WoW 11.2
// Advanced interrupt strategies for WoW 12.0
void HandleMultipleInterruptTargets();
void OptimizeInterruptRotation();
void ManageInterruptCooldowns();
@@ -437,7 +437,7 @@ private:
::std::vector<InterruptTarget> _trackedTargets;
::std::vector<InterruptCapability> _interruptCapabilities;
// WoW 11.2 specific tracking
// WoW 12.0 specific tracking
::std::unordered_map<uint32, uint32> _schoolLockouts; // School mask -> expiry time
::std::unordered_map<ObjectGuid, uint32> _targetImmunities; // Target -> immunity expiry
GroupInterruptData _groupData;
@@ -480,7 +480,7 @@ private:
// Solution: Use std::recursive_mutex to allow same thread to acquire lock multiple times
mutable Playerbot::OrderedRecursiveMutex<Playerbot::LockOrder::BOT_AI_STATE> _mutex;
// Constants for WoW 11.2
// Constants for WoW 12.0
static constexpr uint32 DEFAULT_REACTION_TIME = 250; // 250ms reaction time
static constexpr float DEFAULT_MAX_RANGE = 30.0f; // 30 yards max interrupt range
static constexpr uint32 DEFAULT_SCAN_INTERVAL = 100; // 100ms scan interval
@@ -1454,7 +1454,7 @@ float MechanicDatabase::GetSpellAngle(uint32 spellId) const
void MechanicDatabase::LoadMechanicData()
{
// Load WoW 11.2 mechanic data
// Load WoW 12.0 mechanic data
// This would be populated from database or configuration
// Example entries for common mechanics
@@ -1468,13 +1468,13 @@ void MechanicDatabase::LoadMechanicData()
void MechanicDatabase::LoadDungeonMechanics()
{
// Load dungeon-specific mechanics
// Would be populated with actual WoW 11.2 dungeon mechanics
// Would be populated with actual WoW 12.0 dungeon mechanics
}
void MechanicDatabase::LoadRaidMechanics()
{
// Load raid-specific mechanics
// Would be populated with actual WoW 11.2 raid mechanics
// Would be populated with actual WoW 12.0 raid mechanics
}
} // namespace Playerbot
@@ -421,7 +421,7 @@ public:
float GetSpellRadius(uint32 spellId) const;
float GetSpellAngle(uint32 spellId) const;
// Load WoW 11.2 mechanic data
// Load WoW 12.0 mechanic data
void LoadMechanicData();
void LoadDungeonMechanics();
void LoadRaidMechanics();
@@ -55,7 +55,7 @@ struct ThreatAbilityData
isPassive(passive), minLevel(level), name(n) {}
};
// WoW 11.2 Threat Abilities Database
// WoW 12.0 Threat Abilities Database
class TC_GAME_API ThreatAbilitiesDB
{
public:
@@ -82,7 +82,7 @@ private:
::std::unordered_map<Classes, ::std::vector<uint32>> _classAbilities;
};
// WoW 11.2 Spell IDs for threat abilities
// WoW 12.0 Spell IDs for threat abilities
namespace ThreatSpells
{
// === WARRIOR ===
@@ -70,13 +70,13 @@ bool UnifiedInterruptSystem::Initialize()
if (_initialized)
return true;
// Initialize InterruptDatabase (WoW 11.2 spell data)
// Initialize InterruptDatabase (WoW 12.0 spell data)
InterruptDatabase::Initialize();
_initTime = ::std::chrono::system_clock::now();
_initialized = true;
TC_LOG_INFO("playerbot.interrupt", "UnifiedInterruptSystem initialized with WoW 11.2 spell database");
TC_LOG_INFO("playerbot.interrupt", "UnifiedInterruptSystem initialized with WoW 12.0 spell database");
return true;
}
@@ -295,7 +295,7 @@ void UnifiedInterruptSystem::OnEnemyCastComplete(ObjectGuid casterGuid, uint32 s
InterruptPriority UnifiedInterruptSystem::GetSpellPriority(uint32 spellId, uint8 mythicLevel)
{
// Query InterruptDatabase for WoW 11.2 spell priority with M+ scaling
// Query InterruptDatabase for WoW 12.0 spell priority with M+ scaling
return InterruptDatabase::GetSpellPriority(spellId, mythicLevel);
}
@@ -237,7 +237,7 @@ struct BotInterruptStats
*
* Features:
* - Thread-safe coordination for 5000+ bots (from InterruptCoordinator)
* - Comprehensive spell database with WoW 11.2 data (from InterruptDatabase)
* - Comprehensive spell database with WoW 12.0 data (from InterruptDatabase)
* - Sophisticated plan-based decision-making (from InterruptManager)
* - Rotation fairness system (from InterruptRotationManager)
* - Fallback logic with 6 alternative methods (from InterruptRotationManager)
@@ -1213,7 +1213,7 @@ void CooldownStackingOptimizer::InitializeDeathKnightCooldowns()
void CooldownStackingOptimizer::InitializeMonkCooldowns()
{
// WoW 11.2 Monk cooldowns - full spec support
// WoW 12.0 Monk cooldowns - full spec support
// ========== BREWMASTER (Tank) ==========
// Invoke Niuzao, the Black Ox - Major defensive/DPS cooldown
@@ -1364,7 +1364,7 @@ void CooldownStackingOptimizer::InitializeMonkCooldowns()
void CooldownStackingOptimizer::InitializeDemonHunterCooldowns()
{
// WoW 11.2 Demon Hunter cooldowns - full spec support
// WoW 12.0 Demon Hunter cooldowns - full spec support
// ========== HAVOC (DPS) ==========
// Metamorphosis - Major DPS cooldown
@@ -62,7 +62,7 @@ struct ClassPopularity
* Bot Character Distribution System
*
* Features:
* - Database-driven realistic race/class distribution based on WoW 11.2 statistics
* - Database-driven realistic race/class distribution based on WoW 12.0 statistics
* - Gender distribution with race-specific preferences
* - Class popularity tracking (PvE, PvP, M+, Raid)
* - Cumulative distribution for O(log n) random selection
@@ -121,7 +121,7 @@ struct LevelBracket
bool SupportsDualSpec() const
{
return minLevel >= 10; // WoW 11.2: Dual-spec unlocks at level 10
return minLevel >= 10; // WoW 12.0: Dual-spec unlocks at level 10
}
bool IsEndgame() const
@@ -656,7 +656,7 @@ bool MountManager::UpdateRidingForLevel()
bool learnedAnything = false;
// ========================================================================
// RIDING SKILL PROGRESSION (WoW 11.2 Thresholds)
// RIDING SKILL PROGRESSION (WoW 12.0 Thresholds)
// ========================================================================
// Level 10: Apprentice Riding (60% ground) - skill 75
// Level 20: Journeyman Riding (100% ground) - still skill 75, faster mounts
@@ -25,7 +25,7 @@ namespace Playerbot
{
/**
* @brief Mount types based on WoW 11.2 mount system
* @brief Mount types based on WoW 12.0 mount system
*/
enum class MountType : uint8
{
@@ -197,7 +197,7 @@ RidingSkillLevel RidingManager::GetNextSkillLevel() const
uint32 level = _bot->GetLevel();
RidingSkillLevel current = GetCurrentSkillLevel();
// Determine next skill based on level thresholds (WoW 11.2)
// Determine next skill based on level thresholds (WoW 12.0)
if (level >= 80 && current < RidingSkillLevel::MASTER)
return RidingSkillLevel::MASTER;
if (level >= 40 && current < RidingSkillLevel::ARTISAN)
@@ -386,7 +386,7 @@ private:
static constexpr float INTERACTION_RANGE = 5.0f; // Must be within 5 yards of NPC
static constexpr float ARRIVAL_THRESHOLD = 10.0f; // Consider arrived within 10 yards
// Riding skill spell IDs (WoW 11.2)
// Riding skill spell IDs (WoW 12.0)
static constexpr uint32 SPELL_APPRENTICE_RIDING = 33388;
static constexpr uint32 SPELL_JOURNEYMAN_RIDING = 33391;
static constexpr uint32 SPELL_EXPERT_RIDING = 34090;
@@ -395,7 +395,7 @@ private:
static constexpr uint32 SPELL_COLD_WEATHER_FLYING = 54197;
static constexpr uint32 SPELL_FLIGHT_MASTERS_LICENSE = 90267;
// Gold costs in copper (WoW 11.2 - significantly reduced from earlier expansions)
// Gold costs in copper (WoW 12.0 - significantly reduced from earlier expansions)
static constexpr uint64 COST_APPRENTICE = 40000; // 4 gold
static constexpr uint64 COST_JOURNEYMAN = 500000; // 50 gold
static constexpr uint64 COST_EXPERT = 2500000; // 250 gold
@@ -30,7 +30,7 @@ struct RaceClassCombination;
/**
* @brief Interface for Bot Character Distribution
*
* Manages realistic race/class distribution based on WoW 11.2 statistics with:
* Manages realistic race/class distribution based on WoW 12.0 statistics with:
* - Database-driven race/class distribution
* - Gender distribution with race-specific preferences
* - Class popularity tracking
@@ -186,7 +186,7 @@ public:
/**
* Check if level supports dual-spec
* WoW 11.2: Dual-spec unlocks at level 10
* WoW 12.0: Dual-spec unlocks at level 10
*/
virtual bool SupportsDualSpec(uint32 level) const = 0;
@@ -216,7 +216,7 @@ public:
/**
* Check if level supports hero talents
* WoW 11.2: Hero talents unlock at level 71
* WoW 12.0: Hero talents unlock at level 71
*/
virtual bool SupportsHeroTalents(uint32 level) const = 0;
@@ -21,7 +21,7 @@ namespace Playerbot
{
/**
* @brief Riding skill levels matching WoW 11.2
* @brief Riding skill levels matching WoW 12.0
*
* These represent the actual skill values, not spell IDs.
*/
@@ -18,7 +18,7 @@ namespace Dragonriding
{
// ============================================================================
// RETAIL SPELL IDS (from wowhead.com - WoW 11.2.7)
// RETAIL SPELL IDS (from wowhead.com - WoW 12.0.7)
// ============================================================================
// Using REAL retail spell IDs ensures:
// - Client already has icons, names, tooltips, animations
@@ -101,7 +101,7 @@ constexpr uint32 FLIGHT_CAPABILITY_NORMAL = 0; // Normal flying (no drago
// ============================================================================
// RETAIL-ACCURATE BASE VALUES
// These match WoW 11.2.7 dragonriding mechanics
// These match WoW 12.0.7 dragonriding mechanics
// ============================================================================
// Vigor/Charges (now called "Skyriding Charges" in 11.2.7)
@@ -12,7 +12,7 @@
*
* ENTERPRISE-GRADE RETAIL SPELL INTEGRATION
*
* This module uses REAL retail spell IDs (from wowhead.com WoW 11.2.7):
* This module uses REAL retail spell IDs (from wowhead.com WoW 12.0.7):
* 369536 = Soar (Dracthyr racial - initiates dragonriding)
* 372608 = Surge Forward (primary forward burst)
* 372610 = Skyward Ascent (upward burst)
@@ -36,7 +36,7 @@
* # Default: 5
* Playerbot.Auction.DefaultStrategy = 5
*
* # Enable commodity trading (WoW 11.2 region-wide market)
* # Enable commodity trading (WoW 12.0 region-wide market)
* # Default: 1 (enabled)
* Playerbot.Auction.CommodityEnabled = 1
*
@@ -275,7 +275,7 @@ bool BotGearFactory::ApplyGearSet(Player* player, GearSet const& gearSet)
continue;
}
// Create and equip item with WoW 11.2 ItemContext system
// Create and equip item with WoW 12.0 ItemContext system
// Use ITEM_CONTEXT_NONE for standard bot gear (not from dungeons/raids)
Item* newItem = player->EquipNewItem(equipDest, itemEntry, ItemContext::NONE, true);
@@ -37,7 +37,7 @@ namespace Playerbot
{
/**
* @brief Stat types for item comparison based on WoW 11.2 itemMods
* @brief Stat types for item comparison based on WoW 12.0 itemMods
*/
enum class StatType : uint8
{
@@ -639,7 +639,7 @@ void TrainerInteractionManager::InitializeEssentialSpellsCache()
m_essentialSpellsCache.clear();
// Add class-specific essential spells
// These are placeholder spell IDs - should be replaced with actual WoW 11.2 spell IDs
// These are placeholder spell IDs - should be replaced with actual WoW 12.0 spell IDs
uint8 classId = m_bot->GetClass();
switch (classId)
@@ -596,7 +596,7 @@ bool VendorInteractionManager::FitsWithinBudget(uint64 goldCost, PurchasePriorit
return reagents;
uint32 classId = m_bot->GetClass();
// Class-specific reagents (WoW 11.2 item IDs)
// Class-specific reagents (WoW 12.0 item IDs)
// Note: These are examples - actual item IDs should be verified in game DB
switch (classId)
{
@@ -56,7 +56,7 @@ BotCharacterCreator::CreateResult BotCharacterCreator::CreateBotCharacter(
bool BotCharacterCreator::IsValidRaceClassCombination(uint8 race, uint8 classId)
{
// Check using WoW 11.2 data
// Check using WoW 12.0 data
for (auto const& combo : CharacterCreation::VALID_COMBINATIONS)
{
if (combo.race == static_cast<Races>(race) &&
@@ -161,7 +161,7 @@ BotCharacterCreator::CreateResult BotCharacterCreator::ValidateCreationRequest(
// 1. Validate race/class combination
if (!IsValidRaceClassCombination(race, classId))
{
outErrorMsg = "Invalid race/class combination for WoW 11.2";
outErrorMsg = "Invalid race/class combination for WoW 12.0";
return CreateResult::INVALID_RACE_CLASS_COMBO;
}
@@ -69,7 +69,7 @@ public:
/**
* @brief Validate race/class combination
* @return true if combination is valid in WoW 11.2
* @return true if combination is valid in WoW 12.0
*/
static bool IsValidRaceClassCombination(uint8 race, uint8 classId);
@@ -983,7 +983,7 @@ GearSetTemplate const* BotPostLoginConfigurator::SelectGearSet(BotTemplate const
}
// ============================================================================
// SPELL LEARNING VERIFICATION - Modern WoW 11.2 Approach
// SPELL LEARNING VERIFICATION - Modern WoW 12.0 Approach
// ============================================================================
// In modern WoW (since Patch 5.0.4 / MoP 2012), ALL combat spells are learned
// automatically on level up. Class trainers no longer exist for combat abilities.
@@ -1622,7 +1622,7 @@ std::vector<uint8> BotTemplateRepository::GetValidRaces(uint8 playerClass, Facti
{
std::vector<uint8> races;
// WoW 11.2 (The War Within) class/race combinations
// WoW 12.0 (The War Within) class/race combinations
// This is a comprehensive list including all allied races
//
// NOTE (2026-01-12): Earthen races (85=Alliance, 84=Horde) are DISABLED
@@ -23,7 +23,7 @@ void ParseTypedAuraUpdate(WorldSession* session, WorldPackets::Spells::AuraUpdat
for (auto const& auraInfo : packet.Auras)
{
// WoW 11.2: AuraInfo structure changed
// WoW 12.0: AuraInfo structure changed
// - AuraDataChanged → AuraData.has_value() (Optional<AuraDataInfo>)
// - SpellID → AuraData->SpellID (nested in AuraDataInfo)
@@ -21,7 +21,7 @@ namespace Playerbot
// ================================================================================================
// TYPED PACKET HANDLERS - COMBAT CATEGORY
// These handlers receive TYPED packet objects before serialization (WoW 11.2 Solution)
// These handlers receive TYPED packet objects before serialization (WoW 12.0 Solution)
// ================================================================================================
/**
@@ -37,7 +37,7 @@ void ParseTypedSpellStart(WorldSession* session, WorldPackets::Spells::SpellStar
if (!bot)
return;
// WoW 11.2: TargetGUID removed, extract from Target.Unit or HitTargets[0]
// WoW 12.0: TargetGUID removed, extract from Target.Unit or HitTargets[0]
ObjectGuid targetGuid = packet.Cast.Target.Unit;
if (targetGuid.IsEmpty() && !packet.Cast.HitTargets.empty())
targetGuid = packet.Cast.HitTargets[0];
@@ -68,7 +68,7 @@ void ParseTypedSpellGo(WorldSession* session, WorldPackets::Spells::SpellGo cons
if (!bot)
return;
// WoW 11.2: TargetGUID removed, extract from Target.Unit or HitTargets[0]
// WoW 12.0: TargetGUID removed, extract from Target.Unit or HitTargets[0]
ObjectGuid targetGuid = packet.Cast.Target.Unit;
if (targetGuid.IsEmpty() && !packet.Cast.HitTargets.empty())
targetGuid = packet.Cast.HitTargets[0];
@@ -195,7 +195,7 @@ void ParseTypedSpellInterrupt(WorldSession* session, WorldPackets::CombatLog::Sp
packet.Caster,
packet.Victim,
packet.InterruptedSpellID,
packet.SpellID // WoW 11.2: Field is SpellID, not InterruptingSpellID
packet.SpellID // WoW 12.0: Field is SpellID, not InterruptingSpellID
);
CombatEventBus::instance()->PublishEvent(event);
@@ -223,7 +223,7 @@ void ParseTypedSpellDispel(WorldSession* session, WorldPackets::CombatLog::Spell
CombatEvent event;
event.type = CombatEventType::SPELL_DISPELLED;
event.priority = CombatEventPriority::HIGH;
event.casterGuid = packet.CasterGUID; // WoW 11.2: Field is CasterGUID, not DispellerGUID
event.casterGuid = packet.CasterGUID; // WoW 12.0: Field is CasterGUID, not DispellerGUID
event.targetGuid = packet.TargetGUID;
event.victimGuid = packet.TargetGUID;
event.spellId = packet.DispelledBySpellID;
@@ -266,7 +266,7 @@ void ParseTypedAttackStart(WorldSession* session, WorldPackets::Combat::AttackSt
/**
* Attack Stop - Typed Handler
* WoW 11.2: Server packet is SAttackStop, not AttackStop (which is client packet)
* WoW 12.0: Server packet is SAttackStop, not AttackStop (which is client packet)
*/
void ParseTypedAttackStop(WorldSession* session, WorldPackets::Combat::SAttackStop const& packet)
{
@@ -277,11 +277,11 @@ void ParseTypedAttackStop(WorldSession* session, WorldPackets::Combat::SAttackSt
if (!bot)
return;
// WoW 11.2: SAttackStop only has Attacker and Victim, no NowDead field
// WoW 12.0: SAttackStop only has Attacker and Victim, no NowDead field
CombatEvent event = CombatEvent::AttackStop(
packet.Attacker,
packet.Victim,
false // NowDead field doesn't exist in WoW 11.2
false // NowDead field doesn't exist in WoW 12.0
);
CombatEventBus::instance()->PublishEvent(event);
@@ -337,7 +337,7 @@ void RegisterCombatPacketHandlers()
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::CombatLog::SpellInterruptLog>(&ParseTypedSpellInterrupt);
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::CombatLog::SpellDispellLog>(&ParseTypedSpellDispel);
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::Combat::AttackStart>(&ParseTypedAttackStart);
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::Combat::SAttackStop>(&ParseTypedAttackStop); // WoW 11.2: SAttackStop is server packet
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::Combat::SAttackStop>(&ParseTypedAttackStop); // WoW 12.0: SAttackStop is server packet
PlayerbotPacketSniffer::RegisterTypedHandler<WorldPackets::Combat::AIReaction>(&ParseTypedAIReaction);
TC_LOG_INFO("playerbot", "PlayerbotPacketSniffer: Registered {} Combat packet typed handlers", 10);
@@ -27,7 +27,7 @@ void ParseTypedSpellCooldown(WorldSession* session, WorldPackets::Spells::SpellC
CooldownEvent event;
event.type = CooldownEventType::SPELL_COOLDOWN_START;
event.casterGuid = packet.Caster;
event.spellId = cooldownEntry.SrecID; // WoW 11.2: Field is SrecID, not SpellID
event.spellId = cooldownEntry.SrecID; // WoW 12.0: Field is SrecID, not SpellID
event.itemId = 0;
event.category = 0;
event.cooldownMs = cooldownEntry.ForcedCooldown;
@@ -76,7 +76,7 @@ void ParseTypedClearCooldown(WorldSession* session, WorldPackets::Spells::ClearC
CooldownEvent event;
event.type = CooldownEventType::SPELL_COOLDOWN_CLEAR;
event.casterGuid = bot->GetGUID(); // WoW 11.2: ClearCooldown has no CasterGUID field, use bot GUID
event.casterGuid = bot->GetGUID(); // WoW 12.0: ClearCooldown has no CasterGUID field, use bot GUID
event.spellId = static_cast<uint32>(packet.SpellID);
event.itemId = 0;
event.category = 0;
@@ -99,7 +99,7 @@ void ParseTypedClearCooldowns(WorldSession* session, WorldPackets::Spells::Clear
if (!bot)
return;
for (int32 spellId : packet.SpellID) // WoW 11.2: Field is SpellID (singular), not SpellIDs (plural)
for (int32 spellId : packet.SpellID) // WoW 12.0: Field is SpellID (singular), not SpellIDs (plural)
{
CooldownEvent event;
event.type = CooldownEventType::SPELL_COOLDOWN_CLEAR;
@@ -19,7 +19,7 @@ namespace Playerbot
// ================================================================================================
// TYPED PACKET HANDLERS
// These handlers receive TYPED packet objects before serialization (WoW 11.2 Solution)
// These handlers receive TYPED packet objects before serialization (WoW 12.0 Solution)
// ================================================================================================
/**
@@ -40,7 +40,7 @@ void ParseTypedReadyCheckStarted(WorldSession* session, WorldPackets::Party::Rea
event.priority = EventPriority::HIGH;
event.groupGuid = packet.PartyGUID;
event.sourceGuid = packet.InitiatorGUID;
event.data1 = static_cast<uint32>(Milliseconds(packet.Duration).count()); // Duration in milliseconds (WoW 11.2 API)
event.data1 = static_cast<uint32>(Milliseconds(packet.Duration).count()); // Duration in milliseconds (WoW 12.0 API)
event.data2 = static_cast<uint32>(packet.PartyIndex);
event.timestamp = ::std::chrono::steady_clock::now();
@@ -92,8 +92,8 @@ void ParseTypedReadyCheckCompleted(WorldSession* session, WorldPackets::Party::R
event.type = GroupEventType::READY_CHECK_COMPLETED;
event.priority = EventPriority::MEDIUM;
event.groupGuid = packet.PartyGUID;
event.data1 = 0; // WoW 11.2: ReadyCount no longer in packet
event.data2 = 0; // WoW 11.2: NotReadyCount no longer in packet
event.data1 = 0; // WoW 12.0: ReadyCount no longer in packet
event.data2 = 0; // WoW 12.0: NotReadyCount no longer in packet
event.timestamp = ::std::chrono::steady_clock::now();
GroupEventBus::instance()->PublishEvent(event);
@@ -141,7 +141,7 @@ void ParseTypedRaidTargetUpdateAll(WorldSession* session, WorldPackets::Party::S
if (!bot)
return;
// Publish individual events for each target icon (WoW 11.2: vector of pairs)
// Publish individual events for each target icon (WoW 12.0: vector of pairs)
for (auto const& [symbolIndex, targetGuid] : packet.TargetIcons)
{
if (!targetGuid.IsEmpty()) // Check if target is valid

Some files were not shown because too many files have changed in this diff Show More