aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/BattlePets/BattlePetMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/BattlePets/BattlePetMgr.cpp')
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp35
1 files changed, 35 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