feat(Core/Quest): Add BreadcrumbForQuestId field to quest_template_addon (#24079)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com> Co-authored-by: sogladev <sogladev@gmail.com> Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> Co-authored-by: Ryan Turner <16946913+TheSCREWEDSoftware@users.noreply.github.com>
This commit is contained in:
@@ -1446,6 +1446,7 @@ public:
|
||||
bool SatisfyQuestConditions(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestTimed(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestBreadcrumb(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestNextChain(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestPrevChain(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestDay(Quest const* qInfo, bool msg) const;
|
||||
|
||||
@@ -239,7 +239,7 @@ bool Player::CanSeeStartQuest(Quest const* quest)
|
||||
if (!sDisableMgr->IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this) && SatisfyQuestClass(quest, false) && SatisfyQuestRace(quest, false) &&
|
||||
SatisfyQuestSkill(quest, false) && SatisfyQuestExclusiveGroup(quest, false) && SatisfyQuestReputation(quest, false) &&
|
||||
SatisfyQuestPreviousQuest(quest, false) && SatisfyQuestNextChain(quest, false) &&
|
||||
SatisfyQuestPrevChain(quest, false) && SatisfyQuestDay(quest, false) && SatisfyQuestWeek(quest, false) &&
|
||||
SatisfyQuestPrevChain(quest, false) && SatisfyQuestBreadcrumb(quest, false) && SatisfyQuestDay(quest, false) && SatisfyQuestWeek(quest, false) &&
|
||||
SatisfyQuestMonth(quest, false) && SatisfyQuestSeasonal(quest, false))
|
||||
{
|
||||
return GetLevel() + sWorld->getIntConfig(CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF) >= quest->GetMinLevel();
|
||||
@@ -256,6 +256,7 @@ bool Player::CanTakeQuest(Quest const* quest, bool msg)
|
||||
&& SatisfyQuestSkill(quest, msg) && SatisfyQuestReputation(quest, msg)
|
||||
&& SatisfyQuestPreviousQuest(quest, msg) && SatisfyQuestTimed(quest, msg)
|
||||
&& SatisfyQuestNextChain(quest, msg) && SatisfyQuestPrevChain(quest, msg)
|
||||
&& SatisfyQuestBreadcrumb(quest, msg)
|
||||
&& SatisfyQuestDay(quest, msg) && SatisfyQuestWeek(quest, msg)
|
||||
&& SatisfyQuestMonth(quest, msg) && SatisfyQuestSeasonal(quest, msg)
|
||||
&& SatisfyQuestConditions(quest, msg);
|
||||
@@ -1217,6 +1218,39 @@ bool Player::SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg) const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Player::SatisfyQuestBreadcrumb(Quest const* qInfo, bool msg) const
|
||||
{
|
||||
uint32 breadcrumbForQuestId = qInfo->GetBreadcrumbForQuestId();
|
||||
if (breadcrumbForQuestId)
|
||||
{
|
||||
QuestStatus status = GetQuestStatus(breadcrumbForQuestId);
|
||||
if (status != QUEST_STATUS_NONE || IsQuestRewarded(breadcrumbForQuestId))
|
||||
{
|
||||
if (msg)
|
||||
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (std::vector<uint32> const* breadcrumbs = sObjectMgr->GetBreadcrumbsForQuest(qInfo->GetQuestId()))
|
||||
{
|
||||
for (uint32 breadcrumbQuestId : *breadcrumbs)
|
||||
{
|
||||
QuestStatus status = GetQuestStatus(breadcrumbQuestId);
|
||||
if (status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_FAILED)
|
||||
{
|
||||
if (msg)
|
||||
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Player::SatisfyQuestNextChain(Quest const* qInfo, bool msg) const
|
||||
{
|
||||
uint32 nextQuest = qInfo->GetNextQuestInChain();
|
||||
|
||||
Reference in New Issue
Block a user