mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +01:00
- Add new commands .group set assistant, .group set maintank and .group set mainassist to toggle raid member flags.
- Fix 2017_05_29_00_auth.sql to be reapply safe.
(cherry picked from commit ac0f76f8c5)
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
--
|
||||
DELETE FROM `trinity_string` WHERE `entry` IN (1185,1186,1187);
|
||||
INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
|
||||
(1193, '%s is not in a raid group!'),
|
||||
(1194, '%s %s has raid role \'%s\'.'),
|
||||
(1195, 'The raid leader cannot be set as an assistant!');
|
||||
|
||||
DELETE FROM `command` WHERE `name` LIKE 'group set%';
|
||||
INSERT INTO `command` (`name`,`permission`,`help`) VALUES
|
||||
('group set leader', 473, "Syntax: .group set leader [$characterName]
|
||||
|
||||
Sets the given character (or selected) as his group's leader. Alias for '.group leader'."),
|
||||
('group set assistant', 862, "Syntax: .group set assistant [$characterName]
|
||||
|
||||
Toggles the given character's assistant state in his raid group."),
|
||||
('group set maintank', 863, "Syntax: .group set maintank [$characterName]
|
||||
|
||||
Toggles the given character's main tank flag in his raid group."),
|
||||
('group set mainassist', 864, "Syntax: .group set mainassist [$characterName]
|
||||
|
||||
Toggles the given character's main assist flag in his raid group.");
|
||||
@@ -766,10 +766,10 @@ enum RBACPermissions
|
||||
RBAC_PERM_COMMAND_GOBJECT_SPAWNGROUP = 858, // reserved for dynamic_spawning
|
||||
RBAC_PERM_COMMAND_GOBJECT_DESPAWNGROUP = 859, // reserved for dynamic_spawning
|
||||
RBAC_PERM_COMMAND_LIST_RESPAWNS = 860, // reserved for dynamic_spawning
|
||||
RBAC_PERM_COMMAND_GROUP_SET = 861, // reserved
|
||||
RBAC_PERM_COMMAND_GROUP_ASSISTANT = 862, // reserved
|
||||
RBAC_PERM_COMMAND_GROUP_MAINTANK = 863, // reserved
|
||||
RBAC_PERM_COMMAND_GROUP_MAINASSIST = 864, // reserved
|
||||
RBAC_PERM_COMMAND_GROUP_SET = 861,
|
||||
RBAC_PERM_COMMAND_GROUP_ASSISTANT = 862,
|
||||
RBAC_PERM_COMMAND_GROUP_MAINTANK = 863,
|
||||
RBAC_PERM_COMMAND_GROUP_MAINASSIST = 864,
|
||||
RBAC_PERM_COMMAND_NPC_SHOWLOOT = 865, // reserved
|
||||
RBAC_PERM_COMMAND_LIST_SPAWNPOINTS = 866, // reserved
|
||||
RBAC_PERM_COMMAND_RELOAD_QUEST_GREETING_LOCALE = 867, // reserved
|
||||
|
||||
@@ -2501,12 +2501,12 @@ ObjectGuid Group::GetMemberGUID(const std::string& name)
|
||||
return ObjectGuid::Empty;
|
||||
}
|
||||
|
||||
bool Group::IsAssistant(ObjectGuid guid) const
|
||||
uint8 Group::GetMemberFlags(ObjectGuid guid) const
|
||||
{
|
||||
member_citerator mslot = _getMemberCSlot(guid);
|
||||
if (mslot == m_memberSlots.end())
|
||||
return false;
|
||||
return mslot->flags & MEMBER_FLAG_ASSISTANT;
|
||||
return 0u;
|
||||
return mslot->flags;
|
||||
}
|
||||
|
||||
bool Group::SameSubGroup(ObjectGuid guid1, ObjectGuid guid2) const
|
||||
@@ -2560,7 +2560,8 @@ void Group::SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags fla
|
||||
return;
|
||||
|
||||
// Do flag specific actions, e.g ensure uniqueness
|
||||
switch (flag) {
|
||||
switch (flag)
|
||||
{
|
||||
case MEMBER_FLAG_MAINASSIST:
|
||||
RemoveUniqueGroupMemberFlag(MEMBER_FLAG_MAINASSIST); // Remove main assist flag from current if any.
|
||||
break;
|
||||
|
||||
@@ -310,7 +310,11 @@ class TC_GAME_API Group
|
||||
bool IsMember(ObjectGuid guid) const;
|
||||
bool IsLeader(ObjectGuid guid) const;
|
||||
ObjectGuid GetMemberGUID(const std::string& name);
|
||||
bool IsAssistant(ObjectGuid guid) const;
|
||||
uint8 GetMemberFlags(ObjectGuid guid) const;
|
||||
bool IsAssistant(ObjectGuid guid) const
|
||||
{
|
||||
return (GetMemberFlags(guid) & MEMBER_FLAG_ASSISTANT) == MEMBER_FLAG_ASSISTANT;
|
||||
}
|
||||
|
||||
Player* GetInvited(ObjectGuid guid) const;
|
||||
Player* GetInvited(const std::string& name) const;
|
||||
|
||||
@@ -928,7 +928,10 @@ enum TrinityStrings
|
||||
LANG_DISALLOW_TICKETS_CONFIG = 1190,
|
||||
LANG_BAN_EXISTS = 1191,
|
||||
LANG_CHANGEACCOUNT_SUCCESS = 1192,
|
||||
// Room for more level 3 1193-1198 not used
|
||||
LANG_GROUP_NOT_IN_RAID_GROUP = 1193,
|
||||
LANG_GROUP_ROLE_CHANGED = 1194,
|
||||
LANG_LEADER_CANNOT_BE_ASSISTANT = 1195,
|
||||
// Room for more level 3 1196-1198 not used
|
||||
|
||||
// Debug commands
|
||||
LANG_DEBUG_AREATRIGGER_LEFT = 1999,
|
||||
|
||||
@@ -39,8 +39,17 @@ public:
|
||||
|
||||
std::vector<ChatCommand> GetCommands() const override
|
||||
{
|
||||
static std::vector<ChatCommand> groupSetCommandTable =
|
||||
{
|
||||
{ "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "" },
|
||||
{ "assistant", rbac::RBAC_PERM_COMMAND_GROUP_ASSISTANT, false, &HandleGroupAssistantCommand, "" },
|
||||
{ "maintank", rbac::RBAC_PERM_COMMAND_GROUP_MAINTANK, false, &HandleGroupMainTankCommand, "" },
|
||||
{ "mainassist", rbac::RBAC_PERM_COMMAND_GROUP_MAINASSIST, false, &HandleGroupMainAssistCommand, "" },
|
||||
};
|
||||
|
||||
static std::vector<ChatCommand> groupCommandTable =
|
||||
{
|
||||
{ "set", rbac::RBAC_PERM_COMMAND_GROUP_SET, false, nullptr, "", groupSetCommandTable },
|
||||
{ "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "" },
|
||||
{ "disband", rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "" },
|
||||
{ "remove", rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "" },
|
||||
@@ -51,7 +60,7 @@ public:
|
||||
|
||||
static std::vector<ChatCommand> commandTable =
|
||||
{
|
||||
{ "group", rbac::RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable },
|
||||
{ "group", rbac::RBAC_PERM_COMMAND_GROUP, false, nullptr, "", groupCommandTable },
|
||||
};
|
||||
return commandTable;
|
||||
}
|
||||
@@ -154,8 +163,8 @@ public:
|
||||
|
||||
static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
Player* player = NULL;
|
||||
Group* group = NULL;
|
||||
Player* player = nullptr;
|
||||
Group* group = nullptr;
|
||||
ObjectGuid guid;
|
||||
char* nameStr = strtok((char*)args, " ");
|
||||
|
||||
@@ -178,10 +187,69 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool GroupFlagCommand(ChatHandler* handler, char const* args, GroupMemberFlags flag, const char* what)
|
||||
{
|
||||
Player* player = nullptr;
|
||||
Group* group = nullptr;
|
||||
ObjectGuid guid;
|
||||
char* nameStr = strtok((char*)args, " ");
|
||||
|
||||
if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
|
||||
return false;
|
||||
|
||||
if (!group)
|
||||
{
|
||||
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!group->isRaidGroup())
|
||||
{
|
||||
handler->PSendSysMessage(LANG_GROUP_NOT_IN_RAID_GROUP, player->GetName().c_str());
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (flag == MEMBER_FLAG_ASSISTANT && group->IsLeader(guid))
|
||||
{
|
||||
handler->PSendSysMessage(LANG_LEADER_CANNOT_BE_ASSISTANT, player->GetName().c_str());
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (group->GetMemberFlags(guid) & flag)
|
||||
{
|
||||
group->SetGroupMemberFlag(guid, false, flag);
|
||||
handler->PSendSysMessage(LANG_GROUP_ROLE_CHANGED, player->GetName().c_str(), "no longer", what);
|
||||
}
|
||||
else
|
||||
{
|
||||
group->SetGroupMemberFlag(guid, true, flag);
|
||||
handler->PSendSysMessage(LANG_GROUP_ROLE_CHANGED, player->GetName().c_str(), "now", what);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleGroupAssistantCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
return GroupFlagCommand(handler, args, MEMBER_FLAG_ASSISTANT, "Assistant");
|
||||
}
|
||||
|
||||
static bool HandleGroupMainTankCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
return GroupFlagCommand(handler, args, MEMBER_FLAG_MAINTANK, "Main Tank");
|
||||
}
|
||||
|
||||
static bool HandleGroupMainAssistCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
return GroupFlagCommand(handler, args, MEMBER_FLAG_MAINASSIST, "Main Assist");
|
||||
}
|
||||
|
||||
static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
Player* player = NULL;
|
||||
Group* group = NULL;
|
||||
Player* player = nullptr;
|
||||
Group* group = nullptr;
|
||||
ObjectGuid guid;
|
||||
char* nameStr = strtok((char*)args, " ");
|
||||
|
||||
@@ -201,8 +269,8 @@ public:
|
||||
|
||||
static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
Player* player = NULL;
|
||||
Group* group = NULL;
|
||||
Player* player = nullptr;
|
||||
Group* group = nullptr;
|
||||
ObjectGuid guid;
|
||||
char* nameStr = strtok((char*)args, " ");
|
||||
|
||||
@@ -225,10 +293,10 @@ public:
|
||||
if (!*args)
|
||||
return false;
|
||||
|
||||
Player* playerSource = NULL;
|
||||
Player* playerTarget = NULL;
|
||||
Group* groupSource = NULL;
|
||||
Group* groupTarget = NULL;
|
||||
Player* playerSource = nullptr;
|
||||
Player* playerTarget = nullptr;
|
||||
Group* groupSource = nullptr;
|
||||
Group* groupTarget = nullptr;
|
||||
ObjectGuid guidSource;
|
||||
ObjectGuid guidTarget;
|
||||
char* nameplgrStr = strtok((char*)args, " ");
|
||||
@@ -290,7 +358,7 @@ public:
|
||||
return false;
|
||||
|
||||
// Next, we need a group. So we define a group variable.
|
||||
Group* groupTarget = NULL;
|
||||
Group* groupTarget = nullptr;
|
||||
|
||||
// We try to extract a group from an online player.
|
||||
if (playerTarget)
|
||||
|
||||
Reference in New Issue
Block a user