diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9c3aa04370f..40cca32bc56 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6609,6 +6609,19 @@ bool Player::HasCurrency(uint32 id, uint32 count) const return itr != _currencyStorage.end() && itr->second.Quantity >= count; } +bool Player::IsQuestObjectiveProgressComplete(Quest const* quest) const +{ + float progress = 0; + for (QuestObjective const& obj : quest->GetObjectives()) + if (obj.Flags & QUEST_OBJECTIVE_FLAG_PART_OF_PROGRESS_BAR) + { + progress += GetQuestObjectiveData(quest, obj.StorageIndex) * obj.ProgressBarWeight; + if (progress >= 100) + return true; + } + return false; +} + void Player::ModifyCurrency(uint32 id, int32 count, bool printLog/* = true*/, bool ignoreMultipliers/* = false*/) { if (!count) @@ -16761,6 +16774,9 @@ bool Player::IsQuestObjectiveComplete(QuestObjective const& objective) const Quest const* quest = sObjectMgr->GetQuestTemplate(objective.QuestID); ASSERT(quest); + if (objective.Flags & QUEST_OBJECTIVE_FLAG_PART_OF_PROGRESS_BAR) + return true; + switch (objective.Type) { case QUEST_OBJECTIVE_MONSTER: @@ -16798,6 +16814,10 @@ bool Player::IsQuestObjectiveComplete(QuestObjective const& objective) const if (!HasCurrency(objective.ObjectID, objective.Amount)) return false; break; + case QUEST_OBJECTIVE_PROGRESS_BAR: + if (!IsQuestObjectiveProgressComplete(quest)) + return false; + break; default: TC_LOG_ERROR("entities.player.quest", "Player::CanCompleteQuest: Player '%s' (%s) tried to complete a quest (ID: %u) with an unknown objective type %u", GetName().c_str(), GetGUID().ToString().c_str(), objective.QuestID, objective.Type); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 5193d3317ef..19ccb7ce3e7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1630,6 +1630,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> int32 GetQuestObjectiveData(Quest const* quest, int8 storageIndex) const; bool IsQuestObjectiveComplete(QuestObjective const& objective) const; void SetQuestObjectiveData(Quest const* quest, int8 storageIndex, int32 data); + bool IsQuestObjectiveProgressComplete(Quest const* quest) const; void SendQuestComplete(Quest const* quest) const; void SendQuestReward(Quest const* quest, uint32 XP) const; void SendQuestFailed(uint32 questID, InventoryResult reason = EQUIP_ERR_OK) const; |
