aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_group.cpp92
1 files changed, 80 insertions, 12 deletions
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index 7a194b686da..49bb13f4786 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -31,8 +31,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, "" },
@@ -43,7 +52,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;
}
@@ -146,8 +155,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, " ");
@@ -170,10 +179,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, " ");
@@ -193,8 +261,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, " ");
@@ -217,10 +285,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, " ");
@@ -283,7 +351,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)