feat(Core/Commands): add .group invites command to toggle accepting g… (#26370)

Co-authored-by: Skjalf <47818697+Nyeriah@users.noreply.github.com>
This commit is contained in:
Kitzunu
2026-07-18 20:08:23 +02:00
committed by GitHub
parent d5e98542dd
commit b0e914ac45
7 changed files with 51 additions and 2 deletions

View File

@@ -0,0 +1,7 @@
DELETE FROM `rbac_permissions` WHERE `id` = 940;
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
(940, 'Command: group invites');
DELETE FROM `rbac_linked_permissions` WHERE `linkedId` = 940;
INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES
(197, 940);

View File

@@ -0,0 +1,10 @@
DELETE FROM `command` WHERE `name`='group invites';
INSERT INTO `command` (`name`, `security`, `help`) VALUES
('group invites', 2, 'Syntax: .group invites on|off\r\nEnable/disable accepting group invites.');
-- acore_string entries for .groupinvites command.
DELETE FROM `acore_string` WHERE `entry` IN (35462, 35463, 35464);
INSERT INTO `acore_string` (`entry`, `content_default`) VALUES
(35462, 'Accepting Group Invites: {}'),
(35463, 'Accepting Group Invites: ON'),
(35464, 'Accepting Group Invites: OFF');

View File

@@ -701,6 +701,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_SPELLINFO_TARGETS = 937,
RBAC_PERM_COMMAND_SPELLINFO_ALL = 938,
RBAC_PERM_COMMAND_SERVER_SET_SECURITY = 939,
RBAC_PERM_COMMAND_GROUP_INVITES = 940,
// custom permissions 1000+
RBAC_PERM_MAX
};

View File

@@ -577,6 +577,7 @@ enum PlayerExtraFlags
PLAYER_EXTRA_PVP_DEATH = 0x0100, // store PvP death status until corpse creating.
PLAYER_EXTRA_SHOW_DK_PET = 0x0400, // Marks if player should see ghoul on login screen
PLAYER_EXTRA_GM_SPECTATOR = 0x0800,
PLAYER_EXTRA_DECLINE_GROUP_INVITES = 0x1000, // Set when the player opted out of receiving group invites
};
// 2^n values
@@ -1171,6 +1172,8 @@ public:
void SetBeastMaster(bool on) { if (on) SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); else RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); }
[[nodiscard]] bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; }
void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
[[nodiscard]] bool IsAcceptGroupInvites() const { return !(m_ExtraFlags & PLAYER_EXTRA_DECLINE_GROUP_INVITES); }
void SetAcceptGroupInvites(bool on) { if (on) m_ExtraFlags &= ~PLAYER_EXTRA_DECLINE_GROUP_INVITES; else m_ExtraFlags |= PLAYER_EXTRA_DECLINE_GROUP_INVITES; }
[[nodiscard]] bool IsGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; }
[[nodiscard]] bool CanBeGameMaster() const;
void SetGameMaster(bool on);

View File

@@ -108,6 +108,13 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData)
return;
}
// target has opted out of receiving group invites
if (!invitedPlayer->IsAcceptGroupInvites())
{
SendPartyResult(PARTY_OP_INVITE, membername, ERR_BAD_PLAYER_NAME_S);
return;
}
// can't group with
if (!invitingPlayer->IsGameMaster() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && invitingPlayer->GetTeamId() != invitedPlayer->GetTeamId())
{

View File

@@ -1532,7 +1532,12 @@ enum AcoreStrings
LANG_COMMAND_NPC_SHOWLOOT_MONEY = 35458,
LANG_COMMAND_NPC_SHOWLOOT_ITEMS = 35459,
LANG_COMMAND_NPC_SHOWLOOT_ENTRY = 35460,
LANG_COMMAND_NPC_SHOWLOOT_QUEST = 35461
LANG_COMMAND_NPC_SHOWLOOT_QUEST = 35461,
// Group invites toggle command
LANG_COMMAND_GROUP_INVITES_ACCEPTING = 35462,
LANG_COMMAND_GROUP_INVITES_ON = 35463,
LANG_COMMAND_GROUP_INVITES_OFF = 35464
};
#endif

View File

@@ -38,7 +38,8 @@ public:
{ "remove", HandleGroupRemoveCommand, rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, Console::No },
{ "disband", HandleGroupDisbandCommand, rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, Console::No },
{ "revive", HandleGroupReviveCommand, rbac::RBAC_PERM_COMMAND_GROUP_REVIVE, Console::No },
{ "leader", HandleGroupLeaderCommand, rbac::RBAC_PERM_COMMAND_GROUP_LEADER, Console::No }
{ "leader", HandleGroupLeaderCommand, rbac::RBAC_PERM_COMMAND_GROUP_LEADER, Console::No },
{ "invites", HandleGroupInvitesCommand, rbac::RBAC_PERM_COMMAND_GROUP_INVITES, Console::No }
};
static ChatCommandTable commandTable =
@@ -292,6 +293,21 @@ public:
return true;
}
// Enable/disable accepting group invites
static bool HandleGroupInvitesCommand(ChatHandler* handler, Optional<bool> args)
{
Player* player = handler->GetSession()->GetPlayer();
if (!args)
{
handler->PSendSysMessage(LANG_COMMAND_GROUP_INVITES_ACCEPTING, player->IsAcceptGroupInvites() ? handler->GetAcoreString(LANG_ON) : handler->GetAcoreString(LANG_OFF));
return true;
}
player->SetAcceptGroupInvites(*args);
handler->SendSysMessage(*args ? LANG_COMMAND_GROUP_INVITES_ON : LANG_COMMAND_GROUP_INVITES_OFF);
return true;
}
};
void AddSC_group_commandscript()