diff options
| author | Meji <alvaromegias_46@hotmail.com> | 2021-12-19 13:27:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-19 13:27:27 +0100 |
| commit | c4fee8c5cf85aeddc45aad18d7a944efa59022bd (patch) | |
| tree | 327bcb401fd8d5e0a7f86308d509ad7242746933 /src/server/game/BattlePets | |
| parent | e6ac3316b73d68d1ce776e5c740cafd3b7b0bad6 (diff) | |
Core/Spells: Implemented spell effect 204 (SPELL_EFFECT_CHANGE_BATTLEPET_QUALITY) (#27425)
Diffstat (limited to 'src/server/game/BattlePets')
| -rw-r--r-- | src/server/game/BattlePets/BattlePetMgr.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/BattlePets/BattlePetMgr.h | 2 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp index c9166d86a02..5f5ad43154d 100644 --- a/src/server/game/BattlePets/BattlePetMgr.cpp +++ b/src/server/game/BattlePets/BattlePetMgr.cpp @@ -642,6 +642,41 @@ void BattlePetMgr::CageBattlePet(ObjectGuid guid) } } +void BattlePetMgr::ChangeBattlePetQuality(ObjectGuid guid, BattlePetBreedQuality quality) +{ + if (!HasJournalLock()) + return; + + BattlePet* pet = GetPet(guid); + if (!pet) + return; + + if (quality > BattlePetBreedQuality::Rare) + return; + + if (BattlePetSpeciesEntry const* battlePetSpecies = sBattlePetSpeciesStore.LookupEntry(pet->PacketInfo.Species)) + if (battlePetSpecies->GetFlags().HasFlag(BattlePetSpeciesFlags::CantBattle)) + return; + + uint8 qualityValue = AsUnderlyingType(quality); + if (pet->PacketInfo.Quality >= qualityValue) + return; + + pet->PacketInfo.Quality = qualityValue; + pet->CalculateStats(); + pet->PacketInfo.Health = pet->PacketInfo.MaxHealth; + + if (pet->SaveInfo != BATTLE_PET_NEW) + pet->SaveInfo = BATTLE_PET_CHANGED; + + std::vector<std::reference_wrapper<BattlePet>> updates; + updates.push_back(std::ref(*pet)); + SendUpdates(std::move(updates), false); + + // UF::PlayerData::CurrentBattlePetBreedQuality isn't updated (Intended) + // _owner->GetPlayer()->SetCurrentBattlePetBreedQuality(qualityValue); +} + void BattlePetMgr::HealBattlePetsPct(uint8 pct) { // TODO: After each Pet Battle, any injured companion will automatically diff --git a/src/server/game/BattlePets/BattlePetMgr.h b/src/server/game/BattlePets/BattlePetMgr.h index 7a80e82aee8..3c2542eb596 100644 --- a/src/server/game/BattlePets/BattlePetMgr.h +++ b/src/server/game/BattlePets/BattlePetMgr.h @@ -38,6 +38,7 @@ enum BattlePetMisc SPELL_SUMMON_BATTLE_PET = 118301 }; +static constexpr uint16 MAX_BATTLE_PET_LEVEL = 25; static constexpr Milliseconds REVIVE_BATTLE_PETS_COOLDOWN = 180s; enum class BattlePetBreedQuality : uint8 @@ -170,6 +171,7 @@ public: std::vector<WorldPackets::BattlePet::BattlePetSlot> const& GetSlots() const { return _slots; } void CageBattlePet(ObjectGuid guid); + void ChangeBattlePetQuality(ObjectGuid guid, BattlePetBreedQuality quality); void HealBattlePetsPct(uint8 pct); void SummonPet(ObjectGuid guid); |
