mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Players: Fixed crashes when accessing ActivePlayerData::PvpInfo
Closes #28638
This commit is contained in:
@@ -3204,10 +3204,10 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(reqValue);
|
||||
if (!pvpTier)
|
||||
return false;
|
||||
if (std::size_t(pvpTier->BracketID) >= referencePlayer->m_activePlayerData->PvpInfo.size())
|
||||
UF::PVPInfo const* pvpInfo = referencePlayer->GetPvpInfoForBracket(pvpTier->BracketID);
|
||||
if (!pvpInfo)
|
||||
return false;
|
||||
UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[pvpTier->BracketID];
|
||||
if (pvpTier->ID != pvpInfo.PvpTierID || *pvpInfo.Disqualified)
|
||||
if (pvpTier->ID != pvpInfo->PvpTierID)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
@@ -3243,10 +3243,10 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
|
||||
}
|
||||
case ModifierTreeType::PlayerPvpTierInBracketEqualOrGreaterThan: // 239
|
||||
{
|
||||
if (secondaryAsset >= referencePlayer->m_activePlayerData->PvpInfo.size())
|
||||
UF::PVPInfo const* pvpInfo = referencePlayer->GetPvpInfoForBracket(secondaryAsset);
|
||||
if (!pvpInfo)
|
||||
return false;
|
||||
UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[secondaryAsset];
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(pvpInfo.PvpTierID);
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(pvpInfo->PvpTierID);
|
||||
if (!pvpTier)
|
||||
return false;
|
||||
if (pvpTier->Rank < int32(reqValue))
|
||||
@@ -3725,19 +3725,19 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(reqValue);
|
||||
if (!pvpTier)
|
||||
return false;
|
||||
if (std::size_t(pvpTier->BracketID) >= referencePlayer->m_activePlayerData->PvpInfo.size())
|
||||
UF::PVPInfo const* pvpInfo = referencePlayer->GetPvpInfoForBracket(pvpTier->BracketID);
|
||||
if (!pvpInfo)
|
||||
return false;
|
||||
UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[pvpTier->BracketID];
|
||||
if (pvpTier->ID != pvpInfo.WeeklyBestWinPvpTierID || *pvpInfo.Disqualified)
|
||||
if (pvpTier->ID != pvpInfo->WeeklyBestWinPvpTierID)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case ModifierTreeType::PlayerBestWeeklyWinPvpTierInBracketEqualOrGreaterThan: // 325
|
||||
{
|
||||
if (secondaryAsset >= referencePlayer->m_activePlayerData->PvpInfo.size())
|
||||
UF::PVPInfo const* pvpInfo = referencePlayer->GetPvpInfoForBracket(secondaryAsset);
|
||||
if (!pvpInfo)
|
||||
return false;
|
||||
UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[secondaryAsset];
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(pvpInfo.WeeklyBestWinPvpTierID);
|
||||
PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(pvpInfo->WeeklyBestWinPvpTierID);
|
||||
if (!pvpTier)
|
||||
return false;
|
||||
if (pvpTier->Rank < int32(reqValue))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user