diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/game/Player.cpp | 19 | ||||
| -rw-r--r-- | src/game/QuestHandler.cpp | 5 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 79464e1459e..b97a426187c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13574,10 +13574,23 @@ void Player::SendPreparedQuest(uint64 guid) PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, 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 if (pQuest->IsAutoComplete() && pQuest->IsRepeatable() && !pQuest->IsDailyOrWeekly()) - PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanCompleteRepeatableQuest(pQuest), true); else - PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, guid, true); + { + Object* pObject = ObjectAccessor::GetObjectByTypeMask(*this, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM); + if (!pObject||!pObject->hasQuest(quest_id) && !pObject->hasInvolvedQuest(quest_id)) + { + PlayerTalkClass->CloseGossip(); + return; + } + + if (pQuest->HasFlag(QUEST_FLAGS_AUTO_ACCEPT) && CanAddQuest(pQuest, true)) + AddQuest(pQuest, pObject); + + if ((pQuest->IsAutoComplete() && pQuest->IsRepeatable() && !pQuest->IsDailyOrWeekly()) || pQuest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE)) + PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanCompleteRepeatableQuest(pQuest), true); + else + PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, guid, true); + } } } // multiply entries diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index 5caf5c8a20e..1da286509dd 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -246,7 +246,10 @@ void WorldSession::HandleQuestgiverQueryQuestOpcode(WorldPacket & recv_data) Quest const* pQuest = objmgr.GetQuestTemplate(quest); if (pQuest) { - if (pQuest->GetFlags() & QUEST_FLAGS_AUTOCOMPLETE) + if (pQuest->HasFlag(QUEST_FLAGS_AUTO_ACCEPT) && _player->CanAddQuest(pQuest, true)) + _player->AddQuest(pQuest, pObject); + + if (pQuest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE)) _player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, pObject->GetGUID(), _player->CanCompleteQuest(pQuest->GetQuestId()), true); else _player->PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, pObject->GetGUID(), true); |
