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.cpp41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index c56ebe8532d..9ff67a33d1e 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -25,6 +25,7 @@
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Player.h"
+#include "World.h"
#include "WorldSession.h"
void BattlePetMgr::BattlePet::CalculateStats()
@@ -408,16 +409,14 @@ void BattlePetMgr::AddPet(uint32 species, uint32 display, uint16 breed, BattlePe
void BattlePetMgr::RemovePet(ObjectGuid guid)
{
+ if (!HasJournalLock())
+ return;
+
BattlePet* pet = GetPet(guid);
if (!pet)
return;
pet->SaveInfo = BATTLE_PET_REMOVED;
-
- // spell is not unlearned on retail
- /*if (GetPetCount(pet->PacketInfo.Species) == 0)
- if (BattlePetSpeciesEntry const* speciesEntry = sBattlePetSpeciesStore.LookupEntry(pet->PacketInfo.Species))
- _owner->GetPlayer()->RemoveSpell(speciesEntry->SummonSpellID);*/
}
void BattlePetMgr::ClearFanfare(ObjectGuid guid)
@@ -434,6 +433,9 @@ void BattlePetMgr::ClearFanfare(ObjectGuid guid)
void BattlePetMgr::ModifyName(ObjectGuid guid, std::string const& name, DeclinedName* declinedName)
{
+ if (!HasJournalLock())
+ return;
+
BattlePet* pet = GetPet(guid);
if (!pet)
return;
@@ -508,6 +510,9 @@ uint16 BattlePetMgr::GetMaxPetLevel() const
void BattlePetMgr::CageBattlePet(ObjectGuid guid)
{
+ if (!HasJournalLock())
+ return;
+
BattlePet* pet = GetPet(guid);
if (!pet)
return;
@@ -595,8 +600,12 @@ void BattlePetMgr::DismissPet()
void BattlePetMgr::SendJournal()
{
+ if (!HasJournalLock())
+ SendJournalLockStatus();
+
WorldPackets::BattlePet::BattlePetJournal battlePetJournal;
battlePetJournal.Trap = _trapLevel;
+ battlePetJournal.HasJournalLock = _hasJournalLock;
for (auto& pet : _pets)
if (pet.second.SaveInfo != BATTLE_PET_REMOVED)
@@ -624,3 +633,25 @@ void BattlePetMgr::SendError(BattlePetError error, uint32 creatureId)
battlePetError.CreatureID = creatureId;
_owner->SendPacket(battlePetError.Write());
}
+
+void BattlePetMgr::SendJournalLockStatus()
+{
+ if (!IsJournalLockAcquired())
+ ToggleJournalLock(true);
+
+ if (HasJournalLock())
+ {
+ WorldPackets::BattlePet::BattlePetJournalLockAcquired battlePetJournalLockAcquired;
+ _owner->SendPacket(battlePetJournalLockAcquired.Write());
+ }
+ else
+ {
+ WorldPackets::BattlePet::BattlePetJournalLockDenied BattlePetJournalLockDenied;
+ _owner->SendPacket(BattlePetJournalLockDenied.Write());
+ }
+}
+
+bool BattlePetMgr::IsJournalLockAcquired() const
+{
+ return sWorld->IsBattlePetJournalLockAcquired(_owner->GetBattlenetAccountGUID());
+}