aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/7928_world_quest_template.sql1
-rw-r--r--src/game/Player.cpp4
-rw-r--r--src/game/QuestDef.cpp2
-rw-r--r--src/game/QuestHandler.cpp5
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);
}
}