diff options
author | Treeston <treeston.mmoc@gmail.com> | 2019-07-08 21:35:57 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-15 00:17:32 +0100 |
commit | 925aaecbc0997a8fa3dea8de25f12258f889ffad (patch) | |
tree | 11036cf0fe55eddb6c32a381b004c90d7b4ace0b /src | |
parent | 94916504015ce8cb3ea5da2a02f9032e9eb5b196 (diff) |
Core/Quest: Do not allow quests to be turned in if the player no longer satisfies level/skill/reputation requirements. Fixes #226. Yes, you read that issue tag right.
(cherry picked from commit a1fd404b64fe46925cf5ab3e3af267ce9ba1badd)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
2 files changed, 9 insertions, 8 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d79ba16d24c..0a5a21aaab9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15179,6 +15179,10 @@ bool Player::CanCompleteRepeatableQuest(Quest const* quest) bool Player::CanRewardQuest(Quest const* quest, bool msg) const { + // quest is disabled + if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this)) + return false; + // not auto complete quest and not completed quest (only cheating case, then ignore without message) if (!quest->IsDFQuest() && !quest->IsAutoComplete() && GetQuestStatus(quest->GetQuestId()) != QUEST_STATUS_COMPLETE) return false; @@ -15187,6 +15191,10 @@ bool Player::CanRewardQuest(Quest const* quest, bool msg) const if (!SatisfyQuestDay(quest, true) || !SatisfyQuestWeek(quest, true) || !SatisfyQuestMonth(quest, true) || !SatisfyQuestSeasonal(quest, true)) return false; + // player no longer satisfies the quest's requirements (skill level etc.) + if (!SatisfyQuestLevel(quest, true) || !SatisfyQuestSkill(quest, true) || !SatisfyQuestReputation(quest, true)) + return false; + // rewarded and not repeatable quest (only cheating case, then ignore without message) if (GetQuestRewardStatus(quest->GetQuestId())) return false; @@ -24288,13 +24296,6 @@ bool Player::ModifyMoney(int64 amount, bool sendError /*= true*/) return true; } -bool Player::HasEnoughMoney(int64 amount) const -{ - if (amount > 0) - return (GetMoney() >= (uint64) amount); - return true; -} - void Player::SetMoney(uint64 value) { MoneyChanged(value); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2b228b45421..b33859d96ea 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1692,7 +1692,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint64 GetMoney() const { return m_activePlayerData->Coinage; } bool ModifyMoney(int64 amount, bool sendError = true); bool HasEnoughMoney(uint64 amount) const { return (GetMoney() >= amount); } - bool HasEnoughMoney(int64 amount) const; + bool HasEnoughMoney(int64 amount) const{ return (amount < 0) || HasEnoughMoney(uint64(amount)); } void SetMoney(uint64 value); RewardedQuestSet const& getRewardedQuests() const { return m_RewardedQuests; } |