diff options
| author | Meji <alvaromegias_46@hotmail.com> | 2021-12-14 20:45:20 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-12-17 14:23:43 +0100 |
| commit | 446997cdf2bf24163141d7dcaa80bb6ef891f933 (patch) | |
| tree | c21eb2efadb6434c6d26f43c007c6ab461d050a8 /src/server/game/Entities | |
| parent | 01ac538cd252151f0db16748aa81a813a23b18b7 (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.cpp | 28 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
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); } |
