aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-12-31 11:53:12 +0100
committerShauren <shauren.trinity@gmail.com>2022-12-31 11:53:12 +0100
commit55091ff4bcf4500d0ebe9701e6dc121f5e6a3bb2 (patch)
tree54212430a73c70418f854cb1a7a4fb4eff5e02cb /src/server/game/Entities
parent23cb9592fc83957ce1a5cfb0b5bef0ce13c19edb (diff)
Core/Players: Fixed crashes when accessing ActivePlayerData::PvpInfo
Closes #28638
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Player/Player.cpp20
-rw-r--r--src/server/game/Entities/Player/Player.h5
2 files changed, 23 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 544b66426bf..7f148e6b6bc 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -21808,6 +21808,26 @@ void Player::LeaveAllArenaTeams(ObjectGuid guid)
}
}
+uint32 Player::GetArenaPersonalRating(uint8 slot) const
+{
+ if (UF::PVPInfo const* pvpInfo = GetPvpInfoForBracket(slot))
+ return pvpInfo->Rating;
+
+ return 0;
+}
+
+UF::PVPInfo const* Player::GetPvpInfoForBracket(int8 bracket) const
+{
+ int32 index = m_activePlayerData->PvpInfo.FindIndexIf([bracket](UF::PVPInfo const& pvpInfo)
+ {
+ return pvpInfo.Bracket == bracket && !*pvpInfo.Disqualified;
+ });
+ if (index >= 0)
+ return &m_activePlayerData->PvpInfo[index];
+
+ return nullptr;
+}
+
bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc /*= nullptr*/, uint32 spellid /*= 0*/, uint32 preferredMountDisplay /*= 0*/)
{
if (nodes.size() < 2)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index acbbc17c552..f252e7d5a19 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2006,10 +2006,11 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value);
static void LeaveAllArenaTeams(ObjectGuid guid);
uint32 GetArenaTeamId(uint8 /*slot*/) const { return 0; }
- uint32 GetArenaPersonalRating(uint8 slot) const { return m_activePlayerData->PvpInfo[slot].Rating; }
+ uint32 GetArenaPersonalRating(uint8 slot) const;
void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
uint32 GetArenaTeamIdInvited() const { return m_ArenaTeamIdInvited; }
- uint32 GetRBGPersonalRating() const { return m_activePlayerData->PvpInfo[3].Rating; }
+ uint32 GetRBGPersonalRating() const { return GetArenaPersonalRating(3); }
+ UF::PVPInfo const* GetPvpInfoForBracket(int8 bracket) const;
Difficulty GetDifficultyID(MapEntry const* mapEntry) const;
Difficulty GetDungeonDifficultyID() const { return m_dungeonDifficulty; }