aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Conditions/ConditionMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-09 20:21:32 +0200
committerShauren <shauren.trinity@gmail.com>2021-05-09 20:21:32 +0200
commit91b91b502f30f781c8dea77dec4ce2f469b89744 (patch)
treeec4b30e134e7390c833d5a9612eea036263beec6 /src/server/game/Conditions/ConditionMgr.cpp
parentdd8aed421a48225b0e60c677969d1fc133954279 (diff)
Core/Quests: Quest improvements
* Add quest log slot argument to functions dealing with objective progress * Implemented QUEST_OBJECTIVE_FLAG_SEQUENCED (prevent progressing hidden objectives)
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 3580a6903ec..0a328e20fa6 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -524,7 +524,15 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
if (!obj)
break;
- condMeets = (!player->GetQuestRewardStatus(obj->QuestID) && player->IsQuestObjectiveComplete(*obj));
+ Quest const* quest = sObjectMgr->GetQuestTemplate(obj->QuestID);
+ if (!quest)
+ break;
+
+ uint16 slot = player->FindQuestSlot(obj->QuestID);
+ if (slot >= MAX_QUEST_LOG_SIZE)
+ break;
+
+ condMeets = (!player->GetQuestRewardStatus(obj->QuestID) && player->IsQuestObjectiveComplete(slot, quest, *obj));
}
break;
}
@@ -2929,7 +2937,8 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->QuestKillID)
{
Quest const* quest = sObjectMgr->GetQuestTemplate(condition->QuestKillID);
- if (quest && player->GetQuestStatus(condition->QuestKillID) != QUEST_STATUS_COMPLETE)
+ uint16 questSlot = player->FindQuestSlot(condition->QuestKillID);
+ if (quest && player->GetQuestStatus(condition->QuestKillID) != QUEST_STATUS_COMPLETE && questSlot < MAX_QUEST_LOG_SIZE)
{
using QuestKillCount = std::extent<decltype(condition->QuestKillMonster)>;
@@ -2944,7 +2953,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
return objective.Type == QUEST_OBJECTIVE_MONSTER && uint32(objective.ObjectID) == condition->QuestKillMonster[i];
});
if (objectiveItr != quest->GetObjectives().end())
- results[i] = player->GetQuestObjectiveData(quest, objectiveItr->StorageIndex) >= objectiveItr->Amount;
+ results[i] = player->GetQuestSlotObjectiveData(questSlot, *objectiveItr) >= objectiveItr->Amount;
}
}