From fb890b3310a355910a2357a93871f81c0d6a3bcb Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 9 Feb 2022 18:04:56 -0300 Subject: [PATCH] =?UTF-8?q?feat(Core/Player):=20Implement=20option=20to=20?= =?UTF-8?q?convert=20excess=20honor=20points=20int=E2=80=A6=20(#10565)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Entities/Player/Player.cpp | 12 ++++++++++++ src/server/game/World/IWorld.h | 1 + src/server/game/World/World.cpp | 7 +++++++ src/server/worldserver/worldserver.conf.dist | 8 ++++++++ 4 files changed, 28 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f9f93d1ff..8483d1010 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6109,7 +6109,19 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar void Player::SetHonorPoints(uint32 value) { if (value > sWorld->getIntConfig(CONFIG_MAX_HONOR_POINTS)) + { + if (int32 copperPerPoint = sWorld->getIntConfig(CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT)) + { + // Only convert points on login, not when awarded honor points. + if (isBeingLoaded()) + { + int32 excessPoints = value - sWorld->getIntConfig(CONFIG_MAX_HONOR_POINTS); + ModifyMoney(excessPoints * copperPerPoint); + } + } + value = sWorld->getIntConfig(CONFIG_MAX_HONOR_POINTS); + } SetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY, value); if (value) AddKnownCurrency(ITEM_HONOR_POINTS_ID); diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index d3971cb50..a8f9eadf7 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -228,6 +228,7 @@ enum WorldIntConfigs CONFIG_START_HEROIC_PLAYER_LEVEL, CONFIG_START_PLAYER_MONEY, CONFIG_MAX_HONOR_POINTS, + CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT, CONFIG_START_HONOR_POINTS, CONFIG_MAX_ARENA_POINTS, CONFIG_START_ARENA_POINTS, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index f868cd055..e61ed76fc 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -844,6 +844,13 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_MAX_HONOR_POINTS] = 0; } + m_int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT] = sConfigMgr->GetOption("MaxHonorPointsMoneyPerPoint", 0); + if (int32(m_int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT]) < 0) + { + LOG_ERROR("server.loading", "MaxHonorPointsMoneyPerPoint ({}) can't be negative. Set to 0.", m_int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT]); + m_int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT] = 0; + } + m_int_configs[CONFIG_START_HONOR_POINTS] = sConfigMgr->GetOption("StartHonorPoints", 0); if (int32(m_int_configs[CONFIG_START_HONOR_POINTS]) < 0 || int32(m_int_configs[CONFIG_START_HONOR_POINTS]) > int32(m_int_configs[CONFIG_MAX_HONOR_POINTS])) { diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 7b3fc50be..f3ff64001 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -868,6 +868,14 @@ StartPlayerMoney = 0 MaxHonorPoints = 75000 +# +# MaxHonorPointsMoneyPerPoint +# Description: Convert excess honor points into money if players got more points than allowed after changing the honor cap. +# Honor points will be converted into copper according to the value set in this config. +# Default: 0 - Disabled + +MaxHonorPointsMoneyPerPoint = 0 + # # StartHonorPoints # Description: Amount of honor points that characters have after creation.