aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-12-14 20:45:20 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-17 14:23:43 +0100
commit446997cdf2bf24163141d7dcaa80bb6ef891f933 (patch)
treec21eb2efadb6434c6d26f43c007c6ab461d050a8 /src/server/game/Entities
parent01ac538cd252151f0db16748aa81a813a23b18b7 (diff)
Core/BattlePets: Misc fixes
* The battle pet's experience and level will now be reflected in the player's UpdateFields * Despawn summoned battle pet when it is caged
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Player/Player.cpp28
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
3 files changed, 33 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 0b9ac27aa66..1c8682a0ff5 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -32,7 +32,6 @@
#include "BattlegroundMgr.h"
#include "BattlegroundPackets.h"
#include "BattlegroundScore.h"
-#include "BattlePetMgr.h"
#include "CellImpl.h"
#include "Channel.h"
#include "ChannelMgr.h"
@@ -22030,6 +22029,33 @@ void Player::RemovePetAura(PetAura const* petSpell)
pet->RemoveAurasDueToSpell(petSpell->GetAura(pet->GetEntry()));
}
+Creature* Player::GetSummonedBattlePet()
+{
+ if (Creature* summonedBattlePet = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, GetCritterGUID()))
+ if (!GetSummonedBattlePetGUID().IsEmpty() && GetSummonedBattlePetGUID() == summonedBattlePet->GetBattlePetCompanionGUID())
+ return summonedBattlePet;
+
+ return nullptr;
+}
+
+void Player::SetBattlePetData(BattlePetMgr::BattlePet const* pet)
+{
+ if (pet)
+ {
+ SetSummonedBattlePetGUID(pet->PacketInfo.Guid);
+ SetCurrentBattlePetBreedQuality(pet->PacketInfo.Quality);
+ SetBattlePetCompanionExperience(pet->PacketInfo.Exp);
+ SetWildBattlePetLevel(pet->PacketInfo.Level);
+ }
+ else
+ {
+ SetSummonedBattlePetGUID(ObjectGuid::Empty);
+ SetCurrentBattlePetBreedQuality(AsUnderlyingType(BattlePetBreedQuality::Poor));
+ SetBattlePetCompanionExperience(0);
+ SetWildBattlePetLevel(0);
+ }
+}
+
void Player::StopCastingCharm()
{
Unit* charm = GetCharmed();
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 387671c7e86..a5a58add20e 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -19,6 +19,7 @@
#define _PLAYER_H
#include "Unit.h"
+#include "BattlePetMgr.h"
#include "CUFProfile.h"
#include "DatabaseEnvFwd.h"
#include "DBCEnums.h"
@@ -1210,6 +1211,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void AddPetAura(PetAura const* petSpell);
void RemovePetAura(PetAura const* petSpell);
+ Creature* GetSummonedBattlePet();
+ void SetBattlePetData(BattlePetMgr::BattlePet const* pet = nullptr);
+
/// 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.h b/src/server/game/Entities/Unit/Unit.h
index e88bcf953eb..28f9f156cec 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1302,6 +1302,8 @@ class TC_GAME_API Unit : public WorldObject
uint32 GetBattlePetCompanionNameTimestamp() const { return m_unitData->BattlePetCompanionNameTimestamp; }
void SetBattlePetCompanionNameTimestamp(uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionNameTimestamp), timestamp); }
+ uint32 GetBattlePetCompanionExperience() const { return m_unitData->BattlePetCompanionExperience; }
+ void SetBattlePetCompanionExperience(uint32 experience) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionExperience), experience); }
uint32 GetWildBattlePetLevel() const { return m_unitData->WildBattlePetLevel; }
void SetWildBattlePetLevel(uint32 wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WildBattlePetLevel), wildBattlePetLevel); }