aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorclick <none@none>2010-04-25 23:52:33 +0200
committerclick <none@none>2010-04-25 23:52:33 +0200
commit4f209556c3a31949758f5d0f1dc77e7f9a3942ca (patch)
tree0a5b1babd2c326e7395f77817963215aede624a9 /src
parentedbbec75b13430d817f42e48319c1043c4fcd5d1 (diff)
Implement coreside support for questflag QUEST_FLAGS_AUTO_ACCEPT and its use - patch and research by click and Liberate
(This also fixes the complaints that starter-quests were broken - the flag was actually never used coreside) --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp19
-rw-r--r--src/game/QuestHandler.cpp5
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);