mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-25 14:46:24 +00:00
feat(Core/Unit): New helper IsClass and script hook OnPlayerIsClass (#18243)
* Class Comparison Logic Encapsulation - Parity * Add Context to IsClass * Add Unit IsClass script hook * Replace additional getClass with IsClass * Update CanUseItem to replace getClass with IsClass * Add separate context for pet vs ability * Change Create to Init since not all referenced contexts are creation * Align spacing in ClassContext * Drop context on LFGManager max power * Update IsClass context that wraps around Missle Barrage * Rename context for swapping weapons * Be more specific than CLASS_CONTEXT_TALENT * Remove duplicate context * Moved IsClass Hook to Player * Removed unused parameter in virtual base function * Added maybe_unused to IsClass virtual in order to compile To match the override signature, the virtual base needs to include the parameter in question, so using [maybe_unused] to signal to the compiler to allow it * Remove extra blank line * Add ABILITY_REACTIVE context * Add context for PET_CHARM * Remove explicit nullopt check per review * Code Readability - Change if to if else in pet Due to the return pattern, this doesn't change functionality in any way * Add OnPlayer to disambiguate --------- Co-authored-by: NathanHandley <nathanhandley@protonmail.com>
This commit is contained in:
@@ -107,7 +107,7 @@ void Pet::AddToWorld()
|
||||
{
|
||||
if (Player* owner = GetOwner())
|
||||
{
|
||||
if (getPetType() == SUMMON_PET && owner->getClass() == CLASS_WARLOCK)
|
||||
if (getPetType() == SUMMON_PET && owner->IsClass(CLASS_WARLOCK, CLASS_CONTEXT_PET))
|
||||
{
|
||||
owner->SetLastPetSpell(GetUInt32Value(UNIT_CREATED_BY_SPELL));
|
||||
}
|
||||
@@ -238,7 +238,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
|
||||
bool forceLoadFromDB = false;
|
||||
sScriptMgr->OnBeforeLoadPetFromDB(owner, petEntry, petnumber, current, forceLoadFromDB);
|
||||
|
||||
if (!forceLoadFromDB && (owner->getClass() == CLASS_DEATH_KNIGHT && !owner->CanSeeDKPet())) // DK Pet exception
|
||||
if (!forceLoadFromDB && (owner->IsClass(CLASS_DEATH_KNIGHT, CLASS_CONTEXT_PET) && !owner->CanSeeDKPet())) // DK Pet exception
|
||||
return false;
|
||||
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(petInfo->CreatedBySpellId);
|
||||
@@ -1043,12 +1043,12 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
|
||||
if (petType == MAX_PET_TYPE)
|
||||
{
|
||||
// The petType was not overwritten by the hook, continue with default initialization
|
||||
if (owner->getClass() == CLASS_WARLOCK ||
|
||||
owner->getClass() == CLASS_SHAMAN || // Fire Elemental
|
||||
owner->getClass() == CLASS_DEATH_KNIGHT || // Risen Ghoul
|
||||
owner->getClass() == CLASS_MAGE) // Water Elemental with glyph
|
||||
if (owner->IsClass(CLASS_WARLOCK, CLASS_CONTEXT_PET) ||
|
||||
owner->IsClass(CLASS_SHAMAN, CLASS_CONTEXT_PET) || // Fire Elemental
|
||||
owner->IsClass(CLASS_DEATH_KNIGHT, CLASS_CONTEXT_PET) || // Risen Ghoul
|
||||
owner->IsClass(CLASS_MAGE, CLASS_CONTEXT_PET)) // Water Elemental with glyph
|
||||
petType = SUMMON_PET;
|
||||
else if (owner->getClass() == CLASS_HUNTER)
|
||||
else if (owner->IsClass(CLASS_HUNTER, CLASS_CONTEXT_PET))
|
||||
{
|
||||
petType = HUNTER_PET;
|
||||
}
|
||||
@@ -1080,7 +1080,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
|
||||
SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(petlevel * 50));
|
||||
|
||||
uint32 attackTime = BASE_ATTACK_TIME;
|
||||
if (owner->getClass() != CLASS_HUNTER && cinfo->BaseAttackTime >= 1000)
|
||||
if (!owner->IsClass(CLASS_HUNTER, CLASS_CONTEXT_PET) && cinfo->BaseAttackTime >= 1000)
|
||||
attackTime = cinfo->BaseAttackTime;
|
||||
|
||||
SetAttackTime(BASE_ATTACK, attackTime);
|
||||
@@ -2299,17 +2299,14 @@ bool Pet::IsPermanentPetFor(Player* owner) const
|
||||
switch (getPetType())
|
||||
{
|
||||
case SUMMON_PET:
|
||||
switch (owner->getClass())
|
||||
{
|
||||
case CLASS_WARLOCK:
|
||||
return GetCreatureTemplate()->type == CREATURE_TYPE_DEMON;
|
||||
case CLASS_DEATH_KNIGHT:
|
||||
return GetCreatureTemplate()->type == CREATURE_TYPE_UNDEAD;
|
||||
case CLASS_MAGE:
|
||||
return GetEntry() == 37994;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
if (owner->IsClass(CLASS_WARLOCK, CLASS_CONTEXT_PET))
|
||||
return GetCreatureTemplate()->type == CREATURE_TYPE_DEMON;
|
||||
else if (owner->IsClass(CLASS_DEATH_KNIGHT, CLASS_CONTEXT_PET))
|
||||
return GetCreatureTemplate()->type == CREATURE_TYPE_UNDEAD;
|
||||
else if (owner->IsClass(CLASS_MAGE, CLASS_CONTEXT_PET))
|
||||
return GetEntry() == 37994;
|
||||
else
|
||||
return false;
|
||||
case HUNTER_PET:
|
||||
return true;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user