Core/Quests: Fixed destroying of quest items which start a quest and are also needed for completing this quest
This commit is contained in:
@@ -15449,31 +15449,42 @@ bool Player::GiveQuestSourceItem(Quest const *pQuest)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Player::TakeQuestSourceItem(uint32 quest_id, bool msg)
|
bool Player::TakeQuestSourceItem(uint32 questId, bool msg)
|
||||||
{
|
{
|
||||||
Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id);
|
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
|
||||||
if (qInfo)
|
if (quest)
|
||||||
{
|
{
|
||||||
uint32 srcitem = qInfo->GetSrcItemId();
|
uint32 srcItemId = quest->GetSrcItemId();
|
||||||
if (srcitem > 0)
|
ItemTemplate const* item = sObjectMgr->GetItemTemplate(srcItemId);
|
||||||
|
bool destroyItem = true;
|
||||||
|
|
||||||
|
if (srcItemId > 0)
|
||||||
{
|
{
|
||||||
uint32 count = qInfo->GetSrcItemCount();
|
uint32 count = quest->GetSrcItemCount();
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
count = 1;
|
count = 1;
|
||||||
|
|
||||||
// exist one case when destroy source quest item not possible:
|
// exist two cases when destroy source quest item not possible:
|
||||||
// non un-equippable item (equipped non-empty bag, for example)
|
// a) non un-equippable item (equipped non-empty bag, for example)
|
||||||
InventoryResult res = CanUnequipItems(srcitem, count);
|
// b) when quest is started from an item and item also is needed in
|
||||||
|
// the end as ReqItemId
|
||||||
|
InventoryResult res = CanUnequipItems(srcItemId, count);
|
||||||
if (res != EQUIP_ERR_OK)
|
if (res != EQUIP_ERR_OK)
|
||||||
{
|
{
|
||||||
if (msg)
|
if (msg)
|
||||||
SendEquipError(res, NULL, NULL, srcitem);
|
SendEquipError(res, NULL, NULL, srcItemId);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DestroyItemCount(srcitem, count, true, true);
|
for (uint8 n = 0; n < QUEST_ITEM_OBJECTIVES_COUNT; ++n)
|
||||||
|
if (item->StartQuest == questId && srcItemId == quest->ReqItemId[n])
|
||||||
|
destroyItem = false;
|
||||||
|
|
||||||
|
if (destroyItem)
|
||||||
|
DestroyItemCount(srcItemId, count, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1379,7 +1379,7 @@ class Player : public Unit, public GridObject<Player>
|
|||||||
bool SatisfyQuestDay(Quest const* qInfo, bool msg);
|
bool SatisfyQuestDay(Quest const* qInfo, bool msg);
|
||||||
bool SatisfyQuestWeek(Quest const* qInfo, bool msg);
|
bool SatisfyQuestWeek(Quest const* qInfo, bool msg);
|
||||||
bool GiveQuestSourceItem(Quest const *pQuest);
|
bool GiveQuestSourceItem(Quest const *pQuest);
|
||||||
bool TakeQuestSourceItem(uint32 quest_id, bool msg);
|
bool TakeQuestSourceItem(uint32 questId, bool msg);
|
||||||
bool GetQuestRewardStatus(uint32 quest_id) const;
|
bool GetQuestRewardStatus(uint32 quest_id) const;
|
||||||
QuestStatus GetQuestStatus(uint32 quest_id) const;
|
QuestStatus GetQuestStatus(uint32 quest_id) const;
|
||||||
void SetQuestStatus(uint32 quest_id, QuestStatus status);
|
void SetQuestStatus(uint32 quest_id, QuestStatus status);
|
||||||
|
|||||||
Reference in New Issue
Block a user