Core/SpawnTracking: Check if the objective is completable to get correct spawn tracking state
Port From (https://github.com/TrinityCore/TrinityCore/commit/553ce72707c39d1ab7127c42f233ef27f1a7fa4d)
This commit is contained in:
@@ -3136,6 +3136,23 @@ namespace Game.Entities
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsQuestObjectiveCompletable(uint questId, uint objectiveId)
|
||||||
|
{
|
||||||
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(questId);
|
||||||
|
if (quest == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ushort slot = FindQuestSlot(questId);
|
||||||
|
if (slot >= SharedConst.MaxQuestLogSize)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QuestObjective obj = Global.ObjectMgr.GetQuestObjective(objectiveId);
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return IsQuestObjectiveCompletable(slot, quest, obj);
|
||||||
|
}
|
||||||
|
|
||||||
bool IsQuestObjectiveComplete(uint questId, uint objectiveId)
|
bool IsQuestObjectiveComplete(uint questId, uint objectiveId)
|
||||||
{
|
{
|
||||||
Quest quest = Global.ObjectMgr.GetQuestTemplate(questId);
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(questId);
|
||||||
@@ -3438,7 +3455,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
if (IsQuestRewarded(questObjective.QuestID) || IsQuestObjectiveComplete(questObjective.QuestID, questObjective.Id))
|
if (IsQuestRewarded(questObjective.QuestID) || IsQuestObjectiveComplete(questObjective.QuestID, questObjective.Id))
|
||||||
return SpawnTrackingState.Complete;
|
return SpawnTrackingState.Complete;
|
||||||
else if (GetQuestStatus(questObjective.QuestID) != QuestStatus.None)
|
else if (GetQuestStatus(questObjective.QuestID) != QuestStatus.None && IsQuestObjectiveCompletable(questObjective.QuestID, questObjective.Id))
|
||||||
{
|
{
|
||||||
var itr = m_QuestStatus.LookupByKey(questObjective.QuestID);
|
var itr = m_QuestStatus.LookupByKey(questObjective.QuestID);
|
||||||
if (itr != null && itr.Slot < SharedConst.MaxQuestLogSize)
|
if (itr != null && itr.Slot < SharedConst.MaxQuestLogSize)
|
||||||
|
|||||||
Reference in New Issue
Block a user