diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-06-08 00:02:58 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-06-08 00:02:58 +0200 |
| commit | fa4e2d3935b0184623a6d816dc25a41bad30b1d8 (patch) | |
| tree | 0e60a8222951ca1dda146390ca48d98563355103 /src | |
| parent | d0be92ec0ad0334c38b4073a7e24a571982b17da (diff) | |
Core/Quests: Fixed quests that should have objectives immediately marked as complete
Closes #26566
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a99c1af16fc..008b5c12956 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15358,13 +15358,11 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) QuestStatus oldStatus = questStatusData.Status; // check for repeatable quests status reset + SetQuestSlot(log_slot, quest_id); questStatusData.Slot = log_slot; questStatusData.Status = QUEST_STATUS_INCOMPLETE; questStatusData.Explored = false; - GiveQuestSourceItem(quest); - AdjustQuestObjectiveProgress(quest); - for (QuestObjective const& obj : quest->GetObjectives()) { m_questObjectiveStatus.emplace(std::make_pair(QuestObjectiveType(obj.Type), obj.ObjectID), QuestObjectiveStatusData { questStatusItr, &obj }); @@ -15383,6 +15381,9 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) } } + GiveQuestSourceItem(quest); + AdjustQuestObjectiveProgress(quest); + time_t endTime = 0; if (uint32 limittime = quest->GetLimitTime()) { @@ -15414,7 +15415,6 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty)); } - SetQuestSlot(log_slot, quest_id); SetQuestSlotEndTime(log_slot, endTime); SetQuestSlotAcceptTime(log_slot, GameTime::GetGameTime()); @@ -15447,9 +15447,8 @@ void Player::CompleteQuest(uint32 quest_id) { SetQuestStatus(quest_id, QUEST_STATUS_COMPLETE); - uint16 log_slot = FindQuestSlot(quest_id); - if (log_slot < MAX_QUEST_LOG_SIZE) - SetQuestSlotState(log_slot, QUEST_STATE_COMPLETE); + if (QuestStatusData const* questStatus = Trinity::Containers::MapGetValuePtr(m_QuestStatus, quest_id)) + SetQuestSlotState(questStatus->Slot, QUEST_STATE_COMPLETE); if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id)) if (qInfo->HasFlag(QUEST_FLAGS_TRACKING)) |
