aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2022-02-13 19:18:18 +0100
committerGitHub <noreply@github.com>2022-02-13 19:18:18 +0100
commit966430dc449f6ac259262cb996051dfd04a6e5fb (patch)
treedaaca3a138bf2a9b6bf493ed1ddce27be587b7ad /src
parent0a923c7bf1d5b0ffd4f20b856f086ee435f47e27 (diff)
Core/BattlePets: Implemented CMSG_BATTLE_PET_UPDATE_NOTIFY (#27724)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp43
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.h1
-rw-r--r--src/server/game/Handlers/BattlePetHandler.cpp5
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.cpp5
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.h10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h2
7 files changed, 44 insertions, 24 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index 559ffd6f95c..8497aef1b71 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -734,16 +734,6 @@ void BattlePetMgr::GrantBattlePetExperience(ObjectGuid guid, uint16 xp, BattlePe
std::vector<std::reference_wrapper<BattlePet>> updates;
updates.push_back(std::ref(*pet));
SendUpdates(std::move(updates), false);
-
- // Update battle pet related update fields
- if (Creature* summonedBattlePet = player->GetSummonedBattlePet())
- {
- if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
- {
- summonedBattlePet->SetWildBattlePetLevel(pet->PacketInfo.Level);
- player->SetBattlePetData(pet);
- }
- }
}
void BattlePetMgr::GrantBattlePetLevel(ObjectGuid guid, uint16 grantedLevels)
@@ -763,14 +753,12 @@ void BattlePetMgr::GrantBattlePetLevel(ObjectGuid guid, uint16 grantedLevels)
if (level >= MAX_BATTLE_PET_LEVEL)
return;
- Player* player = _owner->GetPlayer();
-
while (grantedLevels > 0 && level < MAX_BATTLE_PET_LEVEL)
{
++level;
--grantedLevels;
- player->UpdateCriteria(CriteriaType::BattlePetReachLevel, pet->PacketInfo.Species, level);
+ _owner->GetPlayer()->UpdateCriteria(CriteriaType::BattlePetReachLevel, pet->PacketInfo.Species, level);
}
pet->PacketInfo.Level = level;
@@ -785,16 +773,6 @@ void BattlePetMgr::GrantBattlePetLevel(ObjectGuid guid, uint16 grantedLevels)
std::vector<std::reference_wrapper<BattlePet>> updates;
updates.push_back(std::ref(*pet));
SendUpdates(std::move(updates), false);
-
- // Update battle pet related update fields
- if (Creature* summonedBattlePet = player->GetSummonedBattlePet())
- {
- if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
- {
- summonedBattlePet->SetWildBattlePetLevel(pet->PacketInfo.Level);
- player->SetBattlePetData(pet);
- }
- }
}
void BattlePetMgr::HealBattlePetsPct(uint8 pct)
@@ -817,6 +795,25 @@ void BattlePetMgr::HealBattlePetsPct(uint8 pct)
SendUpdates(std::move(updates), false);
}
+void BattlePetMgr::UpdateBattlePetData(ObjectGuid guid)
+{
+ BattlePet* pet = GetPet(guid);
+ if (!pet)
+ return;
+
+ Player* player = _owner->GetPlayer();
+
+ // Update battle pet related update fields
+ if (Creature* summonedBattlePet = player->GetSummonedBattlePet())
+ {
+ if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
+ {
+ summonedBattlePet->SetWildBattlePetLevel(pet->PacketInfo.Level);
+ player->SetBattlePetData(pet);
+ }
+ }
+}
+
void BattlePetMgr::SummonPet(ObjectGuid guid)
{
BattlePet* pet = GetPet(guid);
diff --git a/src/server/game/BattlePets/BattlePetMgr.h b/src/server/game/BattlePets/BattlePetMgr.h
index da1af116682..f8b39cba1b2 100644
--- a/src/server/game/BattlePets/BattlePetMgr.h
+++ b/src/server/game/BattlePets/BattlePetMgr.h
@@ -185,6 +185,7 @@ public:
void GrantBattlePetExperience(ObjectGuid guid, uint16 xp, BattlePetXpSource xpSource);
void GrantBattlePetLevel(ObjectGuid guid, uint16 grantedLevels);
void HealBattlePetsPct(uint8 pct);
+ void UpdateBattlePetData(ObjectGuid guid);
void SummonPet(ObjectGuid guid);
void DismissPet();
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp
index b4faa5912d7..ae7115bd8b6 100644
--- a/src/server/game/Handlers/BattlePetHandler.cpp
+++ b/src/server/game/Handlers/BattlePetHandler.cpp
@@ -127,3 +127,8 @@ void WorldSession::HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummo
else
GetBattlePetMgr()->DismissPet();
}
+
+void WorldSession::HandleBattlePetUpdateNotify(WorldPackets::BattlePet::BattlePetUpdateNotify& battlePetUpdateNotify)
+{
+ GetBattlePetMgr()->UpdateBattlePetData(battlePetUpdateNotify.PetGuid);
+}
diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp
index e76b39f2f7b..1c080a4d573 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.cpp
+++ b/src/server/game/Server/Packets/BattlePetPackets.cpp
@@ -203,3 +203,8 @@ void WorldPackets::BattlePet::BattlePetSummon::Read()
{
_worldPacket >> PetGuid;
}
+
+void WorldPackets::BattlePet::BattlePetUpdateNotify::Read()
+{
+ _worldPacket >> PetGuid;
+}
diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h
index 9cc3e8f9a5d..afcfe50f013 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.h
+++ b/src/server/game/Server/Packets/BattlePetPackets.h
@@ -254,6 +254,16 @@ namespace WorldPackets
ObjectGuid PetGuid;
};
+
+ class BattlePetUpdateNotify final : public ClientPacket
+ {
+ public:
+ BattlePetUpdateNotify(WorldPacket&& packet) : ClientPacket(CMSG_BATTLE_PET_UPDATE_NOTIFY, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid PetGuid;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index c6eb22356ca..8b72d1e3bd0 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -219,7 +219,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_BATTLE_PET_SET_FLAGS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetSetFlags);
DEFINE_HANDLER(CMSG_BATTLE_PET_SUMMON, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBattlePetSummon);
DEFINE_HANDLER(CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PET_UPDATE_NOTIFY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PET_UPDATE_NOTIFY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetUpdateNotify);
DEFINE_HANDLER(CMSG_BEGIN_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBeginTradeOpcode);
DEFINE_HANDLER(CMSG_BINDER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBinderActivateOpcode);
DEFINE_HANDLER(CMSG_BLACK_MARKET_BID_ON_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketBidOnItem);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index ac7ad4e05be..ed50b2d1b95 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -207,6 +207,7 @@ namespace WorldPackets
class BattlePetSetFlags;
class BattlePetClearFanfare;
class BattlePetSummon;
+ class BattlePetUpdateNotify;
class CageBattlePet;
}
@@ -1778,6 +1779,7 @@ class TC_GAME_API WorldSession
void HandleBattlePetSetFlags(WorldPackets::BattlePet::BattlePetSetFlags& battlePetSetFlags);
void HandleBattlePetClearFanfare(WorldPackets::BattlePet::BattlePetClearFanfare& battlePetClearFanfare);
void HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon);
+ void HandleBattlePetUpdateNotify(WorldPackets::BattlePet::BattlePetUpdateNotify& battlePetUpdateNotify);
void HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& cageBattlePet);
// Warden