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
This commit is contained in:
committed by
Giacomo Pozzoni
parent
e9d803ccee
commit
8163ea60c8
@@ -358,6 +358,7 @@ INSERT INTO `rbac_linked_permissions` VALUES
|
||||
(193,197),
|
||||
(194,1),
|
||||
(194,2),
|
||||
(194,9),
|
||||
(194,11),
|
||||
(194,13),
|
||||
(194,14),
|
||||
@@ -1001,6 +1002,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"),
|
||||
(11,'Log GM trades'),
|
||||
(13,'Skip Instance required bosses check'),
|
||||
(14,'Skip character creation team mask check'),
|
||||
@@ -1789,7 +1792,8 @@ INSERT INTO `updates` VALUES
|
||||
('2019_05_15_00_auth.sql','8A7B96E66D689DA63380654142FF60A1EE938697','ARCHIVED','2019-05-15 06:13:20',0),
|
||||
('2019_06_06_00_auth.sql','6DE8159E04BEE7BA0A4A81D72D160EB74934B6A5','ARCHIVED','2019-06-06 18:09:54',0),
|
||||
('2019_06_15_00_auth.sql','456B92D99FFD2E7B6CBF64F4C68555A42B24B298','ARCHIVED','2019-06-15 07:33:45',0),
|
||||
('2019_06_16_00_auth.sql','B14AED4D3387B56FF8C8161D3671750AEEAE0F2E','ARCHIVED','2019-06-15 23:32:12',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);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
7
sql/updates/auth/3.3.5/2019_06_21_00_auth.sql
Normal file
7
sql/updates/auth/3.3.5/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, // not on 3.3.5a
|
||||
RBAC_PERM_LOG_GM_TRADE = 11,
|
||||
RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_DEMON_HUNTER = 12, // not on 3.3.5a
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "MapManager.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
#include "RBAC.h"
|
||||
#include "ReputationMgr.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellInfo.h"
|
||||
@@ -511,8 +512,8 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaCondition condi
|
||||
{
|
||||
TC_LOG_DEBUG("achievement", "AchievementMgr::ResetAchievementCriteria(%u, %u, %u)", condition, value, evenIfCriteriaComplete);
|
||||
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (m_player->IsGameMaster())
|
||||
// Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission
|
||||
if (m_player->IsGameMaster() || m_player->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS))
|
||||
return;
|
||||
|
||||
AchievementCriteriaEntryList const* achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByCondition(condition, value);
|
||||
@@ -758,11 +759,11 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
return;
|
||||
}
|
||||
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (m_player->IsGameMaster())
|
||||
// Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission
|
||||
if (m_player->IsGameMaster() || m_player->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS))
|
||||
{
|
||||
TC_LOG_DEBUG("achievement", "UpdateAchievementCriteria: [Player %s GM mode on] %s, %s (%u), %u, %u"
|
||||
, m_player->GetName().c_str(), m_player->GetGUID().ToString().c_str(), AchievementGlobalMgr::GetCriteriaTypeString(type), type, miscValue1, miscValue2);
|
||||
TC_LOG_DEBUG("achievement", "UpdateAchievementCriteria: [Player %s %s] %s, %s (%u), %u, %u"
|
||||
, m_player->GetName().c_str(), m_player->IsGameMaster() ? "GM mode on" : "disallowed by RBAC", m_player->GetGUID().ToString().c_str(), AchievementGlobalMgr::GetCriteriaTypeString(type), type, miscValue1, miscValue2);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1511,8 +1512,8 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type,
|
||||
|
||||
void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
||||
{
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (m_player->IsGameMaster())
|
||||
// Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission
|
||||
if (m_player->IsGameMaster() || m_player->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS))
|
||||
return;
|
||||
|
||||
if (achievement->Flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID))
|
||||
@@ -1678,6 +1679,11 @@ bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria,
|
||||
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 (GetPlayer()->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_REALM_FIRST_ACHIEVEMENTS))
|
||||
return false;
|
||||
|
||||
// don't update already completed criteria
|
||||
if (IsCompletedCriteria(criteria, achievement))
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user