diff options
Diffstat (limited to 'src/server')
| -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 | 
