diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 80b8306fa5b..50a59c82a24 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -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); |