diff options
author | Wyrserth <wyrserth@protonmail.com> | 2019-06-21 20:17:37 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-11 22:47:08 +0100 |
commit | b709ea9a8dcceb76bf1d057d01e86e347e207e51 (patch) | |
tree | 7d28aaf615e0bc228eade3871c2fadd6a739a7ab /src/server/game/Achievements/AchievementMgr.cpp | |
parent | 8fc52bc5e542ab5a572343c64e915d01cf363b76 (diff) |
Core/RBAC: add permission that prevents accounts from earning all achievements or only realm firsts (#23459)
* Core/RBAC: add permission that prevents accounts from earning all achievements or only realm firsts.
* Kill evil spaces.
* Rename 9999_99_99_99_auth.sql to 2019_06_21_00_auth.sql
* Update auth_database.sql
(cherry picked from commit 8163ea60c8d517ebe3a88f595dd8291df8338811)
Diffstat (limited to 'src/server/game/Achievements/AchievementMgr.cpp')
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 0674a28d559..0b0e4bd2a00 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -32,6 +32,7 @@ #include "Log.h" #include "Mail.h" #include "ObjectMgr.h" +#include "RBAC.h" #include "World.h" #include "WorldSession.h" #include <sstream> @@ -109,6 +110,11 @@ bool AchievementMgr::CanUpdateCriteriaTree(Criteria const* criteria, CriteriaTre return false; } + // Don't update realm first achievements if the player's account isn't allowed to do so + if (achievement->Flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) + if (referencePlayer->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_REALM_FIRST_ACHIEVEMENTS)) + return false; + if (achievement->CovenantID && referencePlayer->m_playerData->CovenantID != achievement->CovenantID) { TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: %u Type %s Achievement %u) Wrong covenant", @@ -364,8 +370,8 @@ void PlayerAchievementMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 fail { TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria(%u, %d, %s)", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false"); - // disable for gamemasters with GM-mode enabled - if (_owner->IsGameMaster()) + // Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission + if (_owner->IsGameMaster() || _owner->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS)) return; if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset)) @@ -495,8 +501,8 @@ void PlayerAchievementMgr::SendAchievementInfo(Player* receiver, uint32 /*achiev void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievement, Player* referencePlayer) { - // disable for gamemasters with GM-mode enabled - if (_owner->IsGameMaster()) + // Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission + if (_owner->IsGameMaster() || _owner->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS)) return; if ((achievement->Faction == ACHIEVEMENT_FACTION_HORDE && referencePlayer->GetTeam() != HORDE) || |