diff options
author | SnapperRy <snapperryen@gmail.com> | 2016-07-16 21:10:54 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-05 21:07:30 +0100 |
commit | 06c7849aa182cc5a2353cb218b81fda0e6ad23a0 (patch) | |
tree | 3f3f59852154336bdbb659226840859b4ef47bb5 /src | |
parent | df3f4ae81198ee3839ce1ea2d701157f79ba5041 (diff) |
Core/Conditions: implement CONDITION_DAILY_QUEST_DONE to check whether or not a daily quest has been completed by a player in that day.
Also use it to fix two quest chains broken in commit 7905651. Should be the only ones of their kind.
(cherry picked from commit b4b3c10c69f73a0fd1e8efe4fd8684676f33948d)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 |
4 files changed, 34 insertions, 2 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index c72388865a2..c16321470a4 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -104,7 +104,8 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "Realm Achievement", true, false, false }, { "In Water", false, false, false }, { "Terrain Swap", true, false, false }, - { "Sit/stand state", true, true, false } + { "Sit/stand state", true, true, false }, + { "Daily Quest Completed",true, false, false } }; // Checks if object meets the condition @@ -454,6 +455,12 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const } break; } + case CONDITION_DAILY_QUEST_DONE: + { + if (Player* player = object->ToPlayer()) + condMeets = player->IsDailyQuestDone(ConditionValue1); + break; + } default: condMeets = false; break; @@ -635,6 +642,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() const case CONDITION_STAND_STATE: mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER; break; + case CONDITION_DAILY_QUEST_DONE: + mask |= GRID_MAP_TYPE_MASK_PLAYER; + break; default: ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!"); break; @@ -1892,6 +1902,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const case CONDITION_QUESTTAKEN: case CONDITION_QUEST_NONE: case CONDITION_QUEST_COMPLETE: + case CONDITION_DAILY_QUEST_DONE: { if (!sObjectMgr->GetQuestTemplate(cond->ConditionValue1)) { diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index ddfe4a909c0..7f369463361 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -91,7 +91,8 @@ enum ConditionTypes CONDITION_IN_WATER = 40, // 0 0 0 true if unit in water CONDITION_TERRAIN_SWAP = 41, // terrainSwap 0 0 true if object is in terrainswap CONDITION_STAND_STATE = 42, // stateType state 0 true if unit matches specified sitstate (0,x: has exactly state x; 1,0: any standing state; 1,1: any sitting state;) - CONDITION_MAX = 43 // MAX + CONDITION_DAILY_QUEST_DONE = 43, // quest id 0 0 true if daily quest has been completed for the day + CONDITION_MAX = 44 // MAX }; /*! Documentation on implementing a new ConditionSourceType: diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 155b7274d62..edad0786806 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23714,6 +23714,25 @@ void Player::SetDailyQuestStatus(uint32 quest_id) } } +bool Player::IsDailyQuestDone(uint32 quest_id) +{ + bool found = false; + if (Quest const* qQuest = sObjectMgr->GetQuestTemplate(quest_id)) + { + std::vector<uint32> const& dailies = GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + for (uint32 dailyQuestId : dailies) + { + if (dailyQuestId == quest_id) + { + found = true; + break; + } + } + } + + return found; +} + void Player::SetWeeklyQuestStatus(uint32 quest_id) { m_weeklyquests.insert(quest_id); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 69920f66b59..1c0c02808da 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1572,6 +1572,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> QuestGiverStatus GetQuestDialogStatus(Object* questGiver); void SetDailyQuestStatus(uint32 quest_id); + bool IsDailyQuestDone(uint32 quest_id); void SetWeeklyQuestStatus(uint32 quest_id); void SetMonthlyQuestStatus(uint32 quest_id); void SetSeasonalQuestStatus(uint32 quest_id); |