mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user