feat(Core/Quests): Implemented quest_money_rewards (for quest with Qu… (#8610)

Fixes #8440
This commit is contained in:
UltraNix
2021-10-20 10:45:56 +02:00
committed by GitHub
parent 07484d0439
commit 1fb6830b15
12 changed files with 652 additions and 78 deletions

View File

@@ -751,8 +751,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
}
// Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
if (quest->GetRewOrReqMoney())
moneyRew += quest->GetRewOrReqMoney();
if (int32 rewOrReqMoney = quest->GetRewOrReqMoney(this))
{
moneyRew += rewOrReqMoney;
}
if (moneyRew)
{
@@ -2084,23 +2086,30 @@ void Player::MoneyChanged(uint32 count)
if (!questid)
continue;
Quest const* qInfo = sObjectMgr->GetQuestTemplate(questid);
if (qInfo && qInfo->GetRewOrReqMoney() < 0)
if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(questid))
{
QuestStatusData& q_status = m_QuestStatus[questid];
int32 rewOrReqMoney = qInfo->GetRewOrReqMoney();
if (rewOrReqMoney < 0)
{
QuestStatusData& q_status = m_QuestStatus[questid];
if (q_status.Status == QUEST_STATUS_INCOMPLETE)
{
if (int32(count) >= -qInfo->GetRewOrReqMoney())
if (q_status.Status == QUEST_STATUS_INCOMPLETE)
{
if (CanCompleteQuest(questid))
CompleteQuest(questid);
if (int32(count) >= -rewOrReqMoney)
{
if (CanCompleteQuest(questid))
{
CompleteQuest(questid);
}
}
}
else if (q_status.Status == QUEST_STATUS_COMPLETE)
{
if (int32(count) < -rewOrReqMoney)
{
IncompleteQuest(questid);
}
}
}
else if (q_status.Status == QUEST_STATUS_COMPLETE)
{
if (int32(count) < -qInfo->GetRewOrReqMoney())
IncompleteQuest(questid);
}
}
}
@@ -2262,12 +2271,12 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP)
if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
{
data << uint32(XP);
data << uint32(quest->GetRewOrReqMoney());
data << uint32(quest->GetRewOrReqMoney(this));
}
else
{
data << uint32(0);
data << uint32(quest->GetRewOrReqMoney() + quest->GetRewMoneyMaxLevel());
data << uint32(quest->GetRewOrReqMoney(this) + quest->GetRewMoneyMaxLevel());
}
data << uint32(10 * quest->CalculateHonorGain(GetQuestLevel(quest)));