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
This commit is contained in:
+16
-3
@@ -13574,10 +13574,23 @@ void Player::SendPreparedQuest(uint64 guid)
|
|||||||
PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true);
|
PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true);
|
||||||
// Send completable on repeatable and autoCompletable quest if player don't have quest
|
// 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)
|
// 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
|
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
|
// multiply entries
|
||||||
|
|||||||
@@ -246,7 +246,10 @@ void WorldSession::HandleQuestgiverQueryQuestOpcode(WorldPacket & recv_data)
|
|||||||
Quest const* pQuest = objmgr.GetQuestTemplate(quest);
|
Quest const* pQuest = objmgr.GetQuestTemplate(quest);
|
||||||
if (pQuest)
|
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);
|
_player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, pObject->GetGUID(), _player->CanCompleteQuest(pQuest->GetQuestId()), true);
|
||||||
else
|
else
|
||||||
_player->PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, pObject->GetGUID(), true);
|
_player->PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, pObject->GetGUID(), true);
|
||||||
|
|||||||
Reference in New Issue
Block a user