aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-07-16 21:10:54 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-05 21:07:30 +0100
commit06c7849aa182cc5a2353cb218b81fda0e6ad23a0 (patch)
tree3f3f59852154336bdbb659226840859b4ef47bb5 /src
parentdf3f4ae81198ee3839ce1ea2d701157f79ba5041 (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.cpp13
-rw-r--r--src/server/game/Conditions/ConditionMgr.h3
-rw-r--r--src/server/game/Entities/Player/Player.cpp19
-rw-r--r--src/server/game/Entities/Player/Player.h1
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);