fix(Core): Correct Quest Details Display at Max Level (#13046)

* fix(Core): Quest Details Display at Max Level

* Add OnSetMaxLevel hook
This commit is contained in:
ZhengPeiRu21
2022-12-20 04:14:53 -07:00
committed by GitHub
parent 4ca370d940
commit 7990de44c1
4 changed files with 62 additions and 11 deletions

View File

@@ -450,10 +450,25 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
data << uint32(0);
}
uint8 playerLevel = _session->GetPlayer() ? _session->GetPlayer()->getLevel() : 0;
data << uint32(quest->GetRewOrReqMoney(playerLevel));
uint32 questXp = uint32(quest->XPValue(playerLevel) * _session->GetPlayer()->GetQuestRate());
sScriptMgr->OnQuestComputeXP(_session->GetPlayer(), quest, questXp);
uint32 moneyRew = 0;
Player* player = _session->GetPlayer();
uint8 playerLevel = player ? player->getLevel() : 0;
if (player && (player->getLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(player)))
{
moneyRew = quest->GetRewMoneyMaxLevel();
}
moneyRew += quest->GetRewOrReqMoney(player ? player->getLevel() : 0); // reward money (below max lvl)
data << moneyRew;
uint32 questXp;
if (player && !sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(player))
{
questXp = uint32(quest->XPValue(playerLevel) * player->GetQuestRate());
}
else
{
questXp = 0;
}
sScriptMgr->OnQuestComputeXP(player, quest, questXp);
data << questXp;
}
@@ -535,7 +550,16 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
data << uint32(0); // Hide money rewarded
else
data << uint32(quest->GetRewOrReqMoney(_session->GetPlayer() ? _session->GetPlayer()->getLevel() : 0)); // reward money (below max lvl)
{
uint32 moneyRew = 0;
Player* player = _session->GetPlayer();
if (player && (player->getLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(player)))
{
moneyRew = quest->GetRewMoneyMaxLevel();
}
moneyRew += quest->GetRewOrReqMoney(player ? player->getLevel() : 0); // reward money (below max lvl)
data << moneyRew;
}
data << uint32(quest->GetRewMoneyMaxLevel()); // used in XP calculation at client
data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0)
@@ -679,11 +703,25 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI
data << uint32(0);
}
uint8 playerLevel = _session->GetPlayer() ? _session->GetPlayer()->getLevel() : 0;
data << uint32(quest->GetRewOrReqMoney(playerLevel));
uint32 questXp = uint32(quest->XPValue(playerLevel) * _session->GetPlayer()->GetQuestRate());
sScriptMgr->OnQuestComputeXP(_session->GetPlayer(), quest, questXp);
uint32 moneyRew = 0;
Player* player = _session->GetPlayer();
uint8 playerLevel = player ? player->getLevel() : 0;
if (player && (player->getLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(player)))
{
moneyRew = quest->GetRewMoneyMaxLevel();
}
moneyRew += quest->GetRewOrReqMoney(player ? player->getLevel() : 0); // reward money (below max lvl)
data << moneyRew;
uint32 questXp;
if (player && !sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(player))
{
questXp = uint32(quest->XPValue(playerLevel) * player->GetQuestRate());
}
else
{
questXp = 0;
}
sScriptMgr->OnQuestComputeXP(player, quest, questXp);
data << questXp;
// rewarded honor points. Multiply with 10 to satisfy client