aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorr4dish <ovitnez@gmail.com>2024-01-06 10:10:55 +0200
committerShauren <shauren.trinity@gmail.com>2024-01-06 23:43:59 +0100
commit196dd226dfb0ffe80d4db8531d8d337fba3d2003 (patch)
tree1262abc03b0419cb921cbc5d535f9d28ac858e5b /src
parent0c1e5fea69bb199209945340c381ba689fdae87b (diff)
Core/RBAC: Add permission that prevents getting a battleground deserter debuff.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/RBAC.h1
-rw-r--r--src/server/game/Entities/Player/Player.cpp34
2 files changed, 20 insertions, 15 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index 6b3cb744f67..3cfb386f016 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -102,6 +102,7 @@ enum RBACPermissions
RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE = 49,
RBAC_PERM_MAY_CHECK_OWN_EMAIL = 50,
RBAC_PERM_ALLOW_TWO_SIDE_TRADE = 51,
+ RBAC_PERM_NO_BATTLEGROUND_DESERTER_DEBUFF = 52,
// Free space for core permissions (till 149)
// Roles (Permissions with delegated permissions) use 199 and descending
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 84a2fc80314..a64db2be2f6 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -22259,14 +22259,18 @@ uint32 Player::GetBGTeam() const
return m_bgData.bgTeam ? m_bgData.bgTeam : GetTeam();
}
-void Player::LeaveBattleground(bool teleportToEntryPoint)
+void Player::LeaveBattleground(bool teleportToEntryPoint /*= true*/)
{
- if (Battleground* bg = GetBattleground())
- {
- bg->RemovePlayerAtLeave(GetGUID(), teleportToEntryPoint, true);
+ Battleground* bg = GetBattleground();
+ if (!bg)
+ return;
+
+ bg->RemovePlayerAtLeave(GetGUID(), teleportToEntryPoint, true);
- // call after remove to be sure that player resurrected for correct cast
- if (bg->isBattleground() && !IsGameMaster() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_CAST_DESERTER))
+ // call after remove to be sure that player resurrected for correct cast
+ if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_CAST_DESERTER))
+ {
+ if (!GetSession()->HasPermission(rbac::RBAC_PERM_NO_BATTLEGROUND_DESERTER_DEBUFF))
{
if (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)
{
@@ -22280,16 +22284,16 @@ void Player::LeaveBattleground(bool teleportToEntryPoint)
CastSpell(this, 26013, true); // Deserter
}
}
+ }
- // track if player leaves the BG while inside it
- if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
- (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN))
- {
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
- stmt->setUInt32(0, GetGUID().GetCounter());
- stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_BG);
- CharacterDatabase.Execute(stmt);
- }
+ // track if player leaves the BG while inside it
+ if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
+ (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN))
+ {
+ CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, GetGUID().GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_BG);
+ CharacterDatabase.Execute(stmt);
}
}