mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 01:15:35 +01:00
Core/Quests: Fixed currency handling in quests (Required and Reward currency) and reward skill points.
Closes #9101
This commit is contained in:
@@ -15019,6 +15019,10 @@ bool Player::CanRewardQuest(Quest const* quest, bool msg)
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; i++)
|
||||
if (quest->RequiredCurrencyId[i] && !HasCurrency(quest->RequiredCurrencyId[i], quest->RequiredCurrencyCount[i]))
|
||||
return false;
|
||||
|
||||
// prevent receive reward with low money and GetRewOrReqMoney() < 0
|
||||
if (quest->GetRewOrReqMoney() < 0 && !HasEnoughMoney(-int64(quest->GetRewOrReqMoney())))
|
||||
return false;
|
||||
@@ -15183,6 +15187,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
|
||||
if (quest->RequiredItemId[i])
|
||||
DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true);
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
|
||||
if (quest->RequiredCurrencyId[i])
|
||||
ModifyCurrency(quest->RequiredCurrencyId[i], -int32(quest->RequiredCurrencyCount[i]));
|
||||
|
||||
for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
{
|
||||
if (quest->RequiredSourceItemId[i])
|
||||
@@ -15222,7 +15230,14 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
if (quest->RewardCurrencyId[i])
|
||||
ModifyCurrency(quest->RewardCurrencyId[i], quest->RewardCurrencyCount[i]);
|
||||
|
||||
if (uint32 skill = quest->GetRewardSkillId())
|
||||
UpdateSkill(skill, quest->GetRewardSkillPoints());
|
||||
|
||||
RewardReputation(quest);
|
||||
|
||||
uint16 log_slot = FindQuestSlot(quest_id);
|
||||
|
||||
Reference in New Issue
Block a user