mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-04 22:07:52 +00:00
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:
@@ -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);
|
||||
@@ -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');
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user