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
This commit is contained in:
Jakub Cieplinski
2021-03-20 12:21:22 +01:00
committed by GitHub
parent 81a32f89f6
commit 397d4b5d05

View File

@@ -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;