From fbcdb5b0db3e8e3dc90256ad0e200cf9accba5ef Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 7 Apr 2013 11:48:28 -0500 Subject: Core/Quests: Fixed currency handling in quests (Required and Reward currency) and reward skill points. Closes #9101 --- src/server/game/Entities/Player/Player.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') 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); -- cgit v1.2.3