diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-12-31 11:53:12 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-12-31 11:53:12 +0100 |
| commit | 55091ff4bcf4500d0ebe9701e6dc121f5e6a3bb2 (patch) | |
| tree | 54212430a73c70418f854cb1a7a4fb4eff5e02cb /src/server/game/Entities | |
| parent | 23cb9592fc83957ce1a5cfb0b5bef0ce13c19edb (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.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 5 |
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; } |
