Core/Quests: Fixed adding autoaccept quests many times to log when started from items

Closes #2106
This commit is contained in:
Shauren
2011-06-28 20:16:15 +02:00
parent c42db7af8c
commit 1eff27f57c
2 changed files with 65 additions and 59 deletions
+15 -15
View File
@@ -14391,37 +14391,37 @@ void Player::SendPreparedQuest(uint64 guid)
if (questMenu.GetMenuItemCount() == 1)
{
// Auto open -- maybe also should verify there is no greeting
uint32 quest_id = qmi0.QuestId;
Quest const* pQuest = sObjectMgr->GetQuestTemplate(quest_id);
uint32 questId = qmi0.QuestId;
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
if (pQuest)
if (quest)
{
if (icon == 4 && !GetQuestRewardStatus(quest_id))
PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true);
if (icon == 4 && !GetQuestRewardStatus(questId))
PlayerTalkClass->SendQuestGiverRequestItems(quest, guid, CanRewardQuest(quest, false), true);
else if (icon == 4)
PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true);
PlayerTalkClass->SendQuestGiverRequestItems(quest, guid, CanRewardQuest(quest, false), true);
// Send completable on repeatable and autoCompletable quest if player don't have quest
// TODO: verify if check for !pQuest->IsDaily() is really correct (possibly not)
else
{
Object* pObject = ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM);
if (!pObject || (!pObject->hasQuest(quest_id) && !pObject->hasInvolvedQuest(quest_id)))
Object* object = ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM);
if (!object || (!object->hasQuest(questId) && !object->hasInvolvedQuest(questId)))
{
PlayerTalkClass->SendCloseGossip();
return;
}
if (pQuest->IsAutoAccept() && CanAddQuest(pQuest, true))
if (quest->IsAutoAccept() && CanAddQuest(quest, true) && CanTakeQuest(quest, true))
{
AddQuest(pQuest, pObject);
if (CanCompleteQuest(quest_id))
CompleteQuest(quest_id);
AddQuest(quest, object);
if (CanCompleteQuest(questId))
CompleteQuest(questId);
}
if ((pQuest->IsAutoComplete() && pQuest->IsRepeatable() && !pQuest->IsDailyOrWeekly()) || pQuest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE))
PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanCompleteRepeatableQuest(pQuest), true);
if ((quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) || quest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE))
PlayerTalkClass->SendQuestGiverRequestItems(quest, guid, CanCompleteRepeatableQuest(quest), true);
else
PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, guid, true);
PlayerTalkClass->SendQuestGiverQuestDetails(quest, guid, true);
}
}
}