diff options
| author | Jakub Cieplinski <cieplinski.jakubsp@gmail.com> | 2021-03-20 12:21:22 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-20 12:21:22 +0100 |
| commit | 397d4b5d05a82c217514eb5f89b4ec8d7f08c263 (patch) | |
| tree | ff2136f6c6287035f3a5ea0da30022aead511eeb /src/server/scripts/Commands | |
| parent | 81a32f89f6a3c07352d228b4651aba7aa6e344cb (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
Diffstat (limited to 'src/server/scripts/Commands')
| -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 7f5b5daed9d..94d090b12d7 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 "DatabaseEnv.h" #include "DBCStores.h" @@ -33,6 +34,8 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif +using namespace Trinity::ChatCommands; + class group_commandscript : public CommandScript { public: @@ -45,19 +48,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 = @@ -67,6 +71,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; |
