mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
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 8163ea60c8)
This commit is contained in:
@@ -829,6 +829,7 @@ INSERT INTO `rbac_linked_permissions` VALUES
|
||||
(193,197),
|
||||
(194,1),
|
||||
(194,2),
|
||||
(194,9),
|
||||
(194,11),
|
||||
(194,12),
|
||||
(194,13),
|
||||
@@ -1486,6 +1487,8 @@ INSERT INTO `rbac_permissions` VALUES
|
||||
(5,'Join Arenas'),
|
||||
(6,'Join Dungeon Finder'),
|
||||
(7,'Skip idle connection check'),
|
||||
(8,"Cannot earn achievements"),
|
||||
(9,"Cannot earn realm first achievements"),
|
||||
(10,'Use character templates'),
|
||||
(11,'Log GM trades'),
|
||||
(12,'Skip character creation demon hunter min level check'),
|
||||
@@ -2400,6 +2403,7 @@ INSERT INTO `updates` VALUES
|
||||
('2019_06_08_02_auth.sql','B39DCBD902290700A81C9D028F54B58601C19A99','ARCHIVED','2019-06-05 16:26:31',0),
|
||||
('2019_06_08_03_auth.sql','F483B657015D39D4F63E3905C27C3AA48241AB03','ARCHIVED','2019-06-08 17:14:21',0),
|
||||
('2019_06_16_00_auth.sql','B14AED4D3387B56FF8C8161D3671750AEEAE0F2E','ARCHIVED','2019-06-15 23:32:12',0),
|
||||
('2019_06_21_00_auth.sql','C519239830204B68E710F698BC0C9E89B6D5FD24','ARCHIVED','2019-06-20 19:43:50',0),
|
||||
('2019_07_14_00_auth.sql','94C2B877BD906538E1E008350BEA8D8B58E0A158','ARCHIVED','2019-07-14 19:22:08',0),
|
||||
('2019_07_15_00_auth.sql','3649248104CFEC70553016273069A9AE744798E3','ARCHIVED','2019-07-15 19:22:08',0),
|
||||
('2019_07_26_00_auth.sql','DC9D0651602AE78B1243B40555A1A7B8447D01B2','ARCHIVED','2019-07-26 18:21:34',0),
|
||||
|
||||
7
sql/updates/auth/master/2019_06_21_00_auth.sql
Normal file
7
sql/updates/auth/master/2019_06_21_00_auth.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
DELETE FROM `rbac_permissions` WHERE `id` IN (8, 9);
|
||||
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
|
||||
(8, "Cannot earn achievements"),
|
||||
(9, "Cannot earn realm first achievements");
|
||||
|
||||
INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES
|
||||
(194, 9);
|
||||
@@ -58,8 +58,8 @@ enum RBACPermissions
|
||||
RBAC_PERM_JOIN_ARENAS = 5,
|
||||
RBAC_PERM_JOIN_DUNGEON_FINDER = 6,
|
||||
RBAC_PERM_IGNORE_IDLE_CONNECTION = 7,
|
||||
// 8 - reuse
|
||||
// 9 - reuse
|
||||
RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS = 8,
|
||||
RBAC_PERM_CANNOT_EARN_REALM_FIRST_ACHIEVEMENTS = 9,
|
||||
RBAC_PERM_USE_CHARACTER_TEMPLATES = 10,
|
||||
RBAC_PERM_LOG_GM_TRADE = 11,
|
||||
RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_DEMON_HUNTER = 12,
|
||||
|
||||
@@ -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) ||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "PhasingHandler.h"
|
||||
#include "Player.h"
|
||||
#include "RBAC.h"
|
||||
#include "RealmList.h"
|
||||
#include "ReputationMgr.h"
|
||||
#include "Scenario.h"
|
||||
@@ -472,11 +473,12 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
|
||||
return;
|
||||
}
|
||||
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (referencePlayer->IsGameMaster())
|
||||
// Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission
|
||||
if (referencePlayer->IsGameMaster() || referencePlayer->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS))
|
||||
{
|
||||
TC_LOG_DEBUG("criteria", "CriteriaHandler::UpdateCriteria: [Player %s GM mode on] %s, %s (%u), " UI64FMTD ", " UI64FMTD ", " UI64FMTD,
|
||||
referencePlayer->GetName().c_str(), GetOwnerInfo().c_str(), CriteriaMgr::GetCriteriaTypeString(type), uint32(type), miscValue1, miscValue2, miscValue3);
|
||||
TC_LOG_DEBUG("criteria", "CriteriaHandler::UpdateCriteria: [Player %s %s] %s, %s (%u), " UI64FMTD ", " UI64FMTD ", " UI64FMTD,
|
||||
referencePlayer->GetName().c_str(), referencePlayer->IsGameMaster() ? "GM mode on" : "disallowed by RBAC",
|
||||
GetOwnerInfo().c_str(), CriteriaMgr::GetCriteriaTypeString(type), uint32(type), miscValue1, miscValue2, miscValue3);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user