mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Scripts/Commands: Restore ".character level" command behavior
Restore ".character level" command behavior by setting the level instead of adding the level
(cherry picked from commit 2cea7d000c)
This commit is contained in:
@@ -69,7 +69,7 @@ public:
|
||||
{ "changeaccount", HandleCharacterChangeAccountCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGEACCOUNT, Console::Yes },
|
||||
{ "deleted", characterDeletedCommandTable },
|
||||
{ "erase", HandleCharacterEraseCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_ERASE, Console::Yes },
|
||||
{ "level", HandleLevelUpCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, Console::Yes },
|
||||
{ "level", HandleCharacterLevelCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, Console::Yes },
|
||||
{ "rename", HandleCharacterRenameCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_RENAME, Console::Yes },
|
||||
{ "reputation", HandleCharacterReputationCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_REPUTATION, Console::Yes },
|
||||
{ "titles", HandleCharacterTitlesCommand, rbac::RBAC_PERM_COMMAND_CHARACTER_TITLES, Console::Yes },
|
||||
@@ -734,6 +734,52 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleCharacterLevelCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, int16 newlevel)
|
||||
{
|
||||
if (!player)
|
||||
player = PlayerIdentifier::FromTargetOrSelf(handler);
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
uint8 oldlevel = static_cast<uint8>(player->IsConnected() ? player->GetConnectedPlayer()->GetLevel() : sCharacterCache->GetCharacterLevelByGuid(*player));
|
||||
|
||||
if (newlevel < 1)
|
||||
newlevel = 1;
|
||||
|
||||
if (newlevel > static_cast<int16>(STRONG_MAX_LEVEL))
|
||||
newlevel = static_cast<int16>(STRONG_MAX_LEVEL);
|
||||
|
||||
if (Player* target = player->GetConnectedPlayer())
|
||||
{
|
||||
target->GiveLevel(static_cast<uint8>(newlevel));
|
||||
target->InitTalentForLevel();
|
||||
target->SetXP(0);
|
||||
|
||||
if (handler->needReportToTarget(target))
|
||||
{
|
||||
if (oldlevel == newlevel)
|
||||
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_LEVEL_PROGRESS_RESET, handler->GetNameLink().c_str());
|
||||
else if (oldlevel < static_cast<uint8>(newlevel))
|
||||
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_LEVEL_UP, handler->GetNameLink().c_str(), newlevel);
|
||||
else // if (oldlevel > newlevel)
|
||||
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, handler->GetNameLink().c_str(), newlevel);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Update level and reset XP, everything else will be updated at login
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_LEVEL);
|
||||
stmt->setUInt8(0, static_cast<uint8>(newlevel));
|
||||
stmt->setUInt64(1, player->GetGUID().GetCounter());
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
if (!handler->GetSession() || (handler->GetSession()->GetPlayer() != player->GetConnectedPlayer())) // including chr == NULL
|
||||
handler->PSendSysMessage(LANG_YOU_CHANGE_LVL, handler->playerLink(*player).c_str(), newlevel);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleLevelUpCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, int16 level)
|
||||
{
|
||||
if (!player)
|
||||
|
||||
Reference in New Issue
Block a user