Core/Quests: Fixed order of RewardChoiceItems and reputation reward. (#19904)

(cherry picked from commit 8b2bd9a5f2)
This commit is contained in:
Weyrath
2017-07-13 17:52:26 +02:00
committed by Shauren
parent 5f59be31b0
commit 35bf146969

View File

@@ -15676,6 +15676,24 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
RemoveTimedQuest(quest_id);
if (quest->GetRewItemsCount() > 0)
{
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
{
if (uint32 itemId = quest->RewardItemId[i])
{
ItemPosCountVec dest;
if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewardItemCount[i]) == EQUIP_ERR_OK)
{
Item* item = StoreNewItem(dest, itemId, true, GenerateItemRandomBonusListId(itemId));
SendNewItem(item, quest->RewardItemCount[i], true, false);
}
else if (quest->IsDFQuest())
SendItemRetrievalMail(itemId, quest->RewardItemCount[i], ItemContext::Quest_Reward);
}
}
}
ItemTemplate const* rewardProto = sObjectMgr->GetItemTemplate(reward);
if (rewardProto && quest->GetRewChoiceItemsCount())
{
@@ -15697,24 +15715,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (rewardProto && quest->GetQuestPackageID())
RewardQuestPackage(quest->GetQuestPackageID(), reward);
if (quest->GetRewItemsCount() > 0)
{
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
{
if (uint32 itemId = quest->RewardItemId[i])
{
ItemPosCountVec dest;
if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewardItemCount[i]) == EQUIP_ERR_OK)
{
Item* item = StoreNewItem(dest, itemId, true, GenerateItemRandomBonusListId(itemId));
SendNewItem(item, quest->RewardItemCount[i], true, false);
}
else if (quest->IsDFQuest())
SendItemRetrievalMail(itemId, quest->RewardItemCount[i], ItemContext::Quest_Reward);
}
}
}
for (uint8 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
if (quest->RewardCurrencyId[i])
ModifyCurrency(quest->RewardCurrencyId[i], quest->RewardCurrencyCount[i]);
@@ -15722,8 +15722,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (uint32 skill = quest->GetRewardSkillId())
UpdateSkillPro(skill, 1000, quest->GetRewardSkillPoints());
RewardReputation(quest);
uint16 log_slot = FindQuestSlot(quest_id);
if (log_slot < MAX_QUEST_LOG_SIZE)
SetQuestSlot(log_slot, 0);
@@ -15791,6 +15789,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
SendQuestReward(quest, questGiver ? questGiver->ToCreature() : nullptr, XP, !announce);
RewardReputation(quest);
// cast spells after mark quest complete (some spells have quest completed state requirements in spell_area data)
if (quest->GetRewSpell() > 0)
{