Core/Quests: Fixed currency handling in quests (Required and Reward currency) and reward skill points.

Closes #9101
This commit is contained in:
Subv
2013-04-07 11:48:28 -05:00
parent 43da1bd0af
commit fbcdb5b0db

View File

@@ -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);