From cb0456fedcc555097ec55c5c6df79422515aff85 Mon Sep 17 00:00:00 2001 From: Spp Date: Mon, 25 Feb 2013 12:23:02 +0100 Subject: [PATCH] Core/RBAC: Create new permissions 'Instant .save', 'Allow params with .unstuck', 'Full HP after resurrect' --- sql/updates/auth/2013_02_25_03_auth_misc.sql | 32 ++++++++++++++++++++ src/server/game/Accounts/RBAC.h | 3 ++ src/server/scripts/Commands/cs_misc.cpp | 8 ++--- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 sql/updates/auth/2013_02_25_03_auth_misc.sql diff --git a/sql/updates/auth/2013_02_25_03_auth_misc.sql b/sql/updates/auth/2013_02_25_03_auth_misc.sql new file mode 100644 index 00000000000..cf843b9769d --- /dev/null +++ b/sql/updates/auth/2013_02_25_03_auth_misc.sql @@ -0,0 +1,32 @@ +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` IN (30, 31, 38); +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(30, 'Save character without delay with .save command'), +(31, 'Use params with .unstuck command'), +(38, 'Resurrect with full Health Points'); + +-- Add new role +DELETE FROM `rbac_roles` WHERE `id` IN (11, 12, 13); +INSERT INTO `rbac_roles` (`id`, `name`) VALUES +(11, 'Instant .save'), +(12, 'Allow params with .unstuck'), +(13, 'Full HP after resurrect'); + +-- Add the permission to the role +DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (11, 12, 13); +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(11, 30), +(12, 31), +(13, 38); + +-- Add it to all GM+ groups +INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES +(2, 11), +(3, 11), +(4, 11), +(2, 12), +(3, 12), +(4, 12), +(2, 13), +(3, 13), +(4, 13); diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 6c605d9a108..1c2cd9dd27a 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -60,7 +60,10 @@ enum RBACPermissions RBAC_PERM_ADMINISTRATOR_COMMANDS = 10, RBAC_PERM_LOG_GM_TRADE = 11, RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, + RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY = 30, + RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS = 31, RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET = 32, + RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38, RBAC_PERM_MAX }; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index cacefea7b85..4cdc1e0d9ce 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -678,7 +678,7 @@ public: if (target) { - target->ResurrectPlayer(!AccountMgr::IsPlayerAccount(target->GetSession()->GetSecurity()) ? 1.0f : 0.5f); + target->ResurrectPlayer(target->GetSession()->HasPermission(RBAC_PERM_RESURRECT_WITH_FULL_HPS) ? 1.0f : 0.5f); target->SpawnCorpseBones(); target->SaveToDB(); } @@ -881,7 +881,7 @@ public: Player* player = handler->GetSession()->GetPlayer(); // save GM account without delay and output message - if (!AccountMgr::IsPlayerAccount(handler->GetSession()->GetSecurity())) + if (handler->GetSession()->HasPermission(RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY)) { if (Player* target = handler->getSelectedPlayer()) target->SaveToDB(); @@ -938,8 +938,8 @@ public: static bool HandleUnstuckCommand(ChatHandler* handler, char const* args) { - //No args required for players - if (handler->GetSession() && AccountMgr::IsPlayerAccount(handler->GetSession()->GetSecurity())) + // No args required for players + if (handler->GetSession() && !handler->GetSession()->HasPermission(RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS)) { // 7355: "Stuck" if (Player* player = handler->GetSession()->GetPlayer())