diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 7 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 9 |
8 files changed, 33 insertions, 36 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index e506c59ec40..a1a0a44f822 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1852,7 +1852,7 @@ void Pet::CastPetAuras(bool current) if (!IsPermanentPetFor(owner)) return; - for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end();) + for (auto itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end();) { PetAura const* pa = *itr; ++itr; @@ -1884,7 +1884,7 @@ bool Pet::IsPetAura(Aura const* aura) Player* owner = GetOwner(); // if the owner has that pet aura, return true - for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end(); ++itr) + for (auto itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end(); ++itr) { if ((*itr)->GetAura(GetEntry()) == aura->GetId()) return true; diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 5814a2f21a3..ccd53cd26b8 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -35,6 +35,7 @@ typedef std::unordered_map<uint32, PetSpell> PetSpellMap; typedef std::vector<uint32> AutoSpellList; class Player; +class PetAura; class TC_GAME_API Pet : public Guardian { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index db3b936f001..42f9d055323 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20613,6 +20613,20 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) } } +void Player::AddPetAura(PetAura const* petSpell) +{ + m_petAuras.insert(petSpell); + if (Pet* pet = GetPet()) + pet->CastPetAura(petSpell); +} + +void Player::RemovePetAura(PetAura const* petSpell) +{ + m_petAuras.erase(petSpell); + if (Pet* pet = GetPet()) + pet->RemoveAurasDueToSpell(petSpell->GetAura(pet->GetEntry())); +} + void Player::StopCastingCharm() { if (IsGhouled()) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6fcbfdf7e70..8670f1c851b 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -51,6 +51,7 @@ class Group; class Guild; class OutdoorPvP; class Pet; +class PetAura; class PlayerMenu; class PlayerSocial; class SpellCastTargets; @@ -1153,6 +1154,11 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false); uint32 GetPhaseMaskForSpawn() const; // used for proper set phase for DB at GM-mode creature/GO spawn + // pet auras + std::unordered_set<PetAura const*> m_petAuras; + void AddPetAura(PetAura const* petSpell); + void RemovePetAura(PetAura const* petSpell); + /// Handles said message in regular chat based on declared language and in config pre-defined Range. void Say(std::string const& text, Language language, WorldObject const* = nullptr) override; void Say(uint32 textId, WorldObject const* target = nullptr) override; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index effd158dd2a..51739b3a864 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11823,26 +11823,6 @@ void Unit::SetContestedPvP(Player* attackedPlayer) } } -void Unit::AddPetAura(PetAura const* petSpell) -{ - if (GetTypeId() != TYPEID_PLAYER) - return; - - m_petAuras.insert(petSpell); - if (Pet* pet = ToPlayer()->GetPet()) - pet->CastPetAura(petSpell); -} - -void Unit::RemovePetAura(PetAura const* petSpell) -{ - if (GetTypeId() != TYPEID_PLAYER) - return; - - m_petAuras.erase(petSpell); - if (Pet* pet = ToPlayer()->GetPet()) - pet->RemoveAurasDueToSpell(petSpell->GetAura(pet->GetEntry())); -} - Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget, uint32 spell_id) { if (GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index f404302d3f1..baf91f41779 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -363,7 +363,6 @@ class DynamicObject; class GameObject; class Item; class Pet; -class PetAura; class Minion; class Guardian; class UnitAI; @@ -2147,12 +2146,6 @@ class TC_GAME_API Unit : public WorldObject bool CanProc() const { return !m_procDeep; } void SetCantProc(bool apply); - // pet auras - typedef std::set<PetAura const*> PetAuraSet; - PetAuraSet m_petAuras; - void AddPetAura(PetAura const* petSpell); - void RemovePetAura(PetAura const* petSpell); - uint32 GetModelForForm(ShapeshiftForm form, uint32 spellId) const; uint32 GetModelForTotem(PlayerTotemType totemType); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 61711828798..73a3ec20eea 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4348,15 +4348,15 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool Unit* caster = GetCaster(); - if (mode & AURA_EFFECT_HANDLE_REAL) + // pet auras + if (target->GetTypeId() == TYPEID_PLAYER && (mode & AURA_EFFECT_HANDLE_REAL)) { - // pet auras if (PetAura const* petSpell = sSpellMgr->GetPetAura(GetId(), m_effIndex)) { if (apply) - target->AddPetAura(petSpell); + target->ToPlayer()->AddPetAura(petSpell); else - target->RemovePetAura(petSpell); + target->ToPlayer()->RemovePetAura(petSpell); } } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index e88896c8549..7a831edac08 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -719,10 +719,13 @@ void Spell::EffectDummy(SpellEffIndex effIndex) } // pet auras - if (PetAura const* petSpell = sSpellMgr->GetPetAura(m_spellInfo->Id, effIndex)) + if (m_caster->GetTypeId() == TYPEID_PLAYER) { - m_caster->AddPetAura(petSpell); - return; + if (PetAura const* petSpell = sSpellMgr->GetPetAura(m_spellInfo->Id, effIndex)) + { + m_caster->ToPlayer()->AddPetAura(petSpell); + return; + } } // normal DB scripted effect |