diff options
author | Jakub Cieplinski <cieplinski.jakubsp@gmail.com> | 2021-03-20 12:21:22 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-07 20:50:09 +0100 |
commit | 77d320b9fc881f196789bfb99ef539c95311ad55 (patch) | |
tree | 911dd3c2bc8965ed2b7afc6bc91f5a151b343a92 /src | |
parent | cb9b2606e03685a5a2fab44e22a3082d4aa26ae9 (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.cpp | 65 |
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; |