diff options
-rw-r--r-- | sql/updates/7928_world_quest_template.sql | 1 | ||||
-rw-r--r-- | src/game/Player.cpp | 4 | ||||
-rw-r--r-- | src/game/QuestDef.cpp | 2 | ||||
-rw-r--r-- | src/game/QuestHandler.cpp | 5 |
4 files changed, 8 insertions, 4 deletions
diff --git a/sql/updates/7928_world_quest_template.sql b/sql/updates/7928_world_quest_template.sql new file mode 100644 index 00000000000..dbfceefb53f --- /dev/null +++ b/sql/updates/7928_world_quest_template.sql @@ -0,0 +1 @@ +ALTER TABLE `quest_template` CHANGE COLUMN `QuestFlags` `QuestFlags` int(6) unsigned NOT NULL default '0'; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 091d8f59428..62dc4789533 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13752,7 +13752,7 @@ bool Player::CanCompleteQuest(uint32 quest_id) return false; // auto complete quest - if (qInfo->IsAutoComplete() && CanTakeQuest(qInfo, false)) + if ((qInfo->IsAutoComplete() || qInfo->GetFlags() & QUEST_FLAGS_AUTOCOMPLETE) && CanTakeQuest(qInfo, false)) return true; if (q_status.m_status == QUEST_STATUS_INCOMPLETE) @@ -13827,7 +13827,7 @@ bool Player::CanCompleteRepeatableQuest(Quest const *pQuest) bool Player::CanRewardQuest(Quest const *pQuest, bool msg) { // not auto complete quest and not completed quest (only cheating case, then ignore without message) - if (!pQuest->IsAutoComplete() && GetQuestStatus(pQuest->GetQuestId()) != QUEST_STATUS_COMPLETE) + if (!pQuest->IsAutoComplete() && !(pQuest->GetFlags() & QUEST_FLAGS_AUTOCOMPLETE) && GetQuestStatus(pQuest->GetQuestId()) != QUEST_STATUS_COMPLETE) return false; // daily quest can't be rewarded (25 daily quest already completed) diff --git a/src/game/QuestDef.cpp b/src/game/QuestDef.cpp index 525ed05dd25..e41dbfed425 100644 --- a/src/game/QuestDef.cpp +++ b/src/game/QuestDef.cpp @@ -44,7 +44,7 @@ Quest::Quest(Field * questRecord) RequiredMaxRepValue = questRecord[17].GetInt32(); SuggestedPlayers = questRecord[18].GetUInt32(); LimitTime = questRecord[19].GetUInt32(); - QuestFlags = questRecord[20].GetUInt16(); + QuestFlags = questRecord[20].GetUInt32(); uint32 SpecialFlags = questRecord[21].GetUInt16(); CharTitleId = questRecord[22].GetUInt32(); PlayersSlain = questRecord[23].GetUInt32(); diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index c7632cf10f0..a4d1e0dede2 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) { - _player->PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, pObject->GetGUID(), true); + if (pQuest->GetFlags() & QUEST_FLAGS_AUTOCOMPLETE) + _player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, pObject->GetGUID(), _player->CanCompleteQuest(pQuest->GetQuestId()), true); + else + _player->PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, pObject->GetGUID(), true); } } |