aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Cieplinski <cieplinski.jakubsp@gmail.com>2021-03-20 12:21:22 +0100
committerShauren <shauren.trinity@gmail.com>2022-03-07 20:50:09 +0100
commit77d320b9fc881f196789bfb99ef539c95311ad55 (patch)
tree911dd3c2bc8965ed2b7afc6bc91f5a151b343a92 /src
parentcb9b2606e03685a5a2fab44e22a3082d4aa26ae9 (diff)
Group level up (#26139)
* First version of command handler * Done HandleReviveAllCommand * Moved command to group subcommonads * Added group level up * Removed empty line * Added additional nullchecks * Removed newline * Code styling * Added group set level command * Removed whitespace * Removed group set level command * Unnecessary comma * Added check for level lower bound (cherry picked from commit 397d4b5d05a82c217514eb5f89b4ec8d7f08c263)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Commands/cs_group.cpp65
1 files changed, 56 insertions, 9 deletions
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index 5f704e3b87b..09ee1c5caca 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "CharacterCache.h"
+#include "ChatCommandTags.h"
#include "Chat.h"
#include "ChatCommand.h"
#include "DatabaseEnv.h"
@@ -35,6 +36,8 @@
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
+using namespace Trinity::ChatCommands;
+
class group_commandscript : public CommandScript
{
public:
@@ -47,19 +50,20 @@ public:
{ "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, "" },
+ { "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, "" },
- { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "" },
- { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "" },
- { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "" },
- { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleGroupReviveCommand, "" }
+ { "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, "" },
+ { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "" },
+ { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "" },
+ { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "" },
+ { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleGroupReviveCommand, "" },
+ { "level", rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleGroupLevelCommand, "" }
};
static std::vector<ChatCommand> commandTable =
@@ -69,6 +73,49 @@ public:
return commandTable;
}
+ static bool HandleGroupLevelCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, int16 level)
+ {
+ if (level < 1)
+ return false;
+ if (!player)
+ player = PlayerIdentifier::FromTargetOrSelf(handler);
+ if (!player)
+ return false;
+
+ Player* target = player->GetConnectedPlayer();
+ if (!target)
+ return false;
+
+ Group* groupTarget = target->GetGroup();
+ if (!groupTarget)
+ return false;
+
+ for (GroupReference* it = groupTarget->GetFirstMember(); it != nullptr; it = it->next())
+ {
+ target = it->GetSource();
+ if (target)
+ {
+ uint8 oldlevel = static_cast<uint8>(target->GetLevel());
+
+ if (level != oldlevel)
+ {
+ target->SetLevel(static_cast<uint8>(level));
+ target->InitTalentForLevel();
+ target->SetXP(0);
+ }
+
+ if (handler->needReportToTarget(target))
+ {
+ if (oldlevel < static_cast<uint8>(level))
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_LEVEL_UP, handler->GetNameLink().c_str(), level);
+ else // if (oldlevel > newlevel)
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, handler->GetNameLink().c_str(), level);
+ }
+ }
+ }
+ return true;
+ }
+
static bool HandleGroupReviveCommand(ChatHandler* handler, char const* args)
{
Player* playerTarget;