diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index af2d72ad5..f41c3d21b 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -361,6 +361,14 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) condMeets = unit->IsInWater(); break; } + case CONDITION_DAILY_QUEST_DONE: + { + if (Player* player = object->ToPlayer()) + { + condMeets = player->IsDailyQuestDone(ConditionValue1); + } + break; + } case CONDITION_QUEST_OBJECTIVE_PROGRESS: { if (Player* player = object->ToPlayer()) @@ -553,6 +561,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() case CONDITION_IN_WATER: mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER; break; + case CONDITION_DAILY_QUEST_DONE: + mask |= GRID_MAP_TYPE_MASK_PLAYER; + break; case CONDITION_QUEST_OBJECTIVE_PROGRESS: mask |= GRID_MAP_TYPE_MASK_PLAYER; break; @@ -1619,7 +1630,6 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) cond->SourceEntry, uint32(cond->ConditionType)); return false; case CONDITION_STAND_STATE: - case CONDITION_DAILY_QUEST_DONE: case CONDITION_CHARMED: case CONDITION_PET_TYPE: case CONDITION_TAXI: @@ -1756,6 +1766,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) case CONDITION_QUESTTAKEN: case CONDITION_QUEST_NONE: case CONDITION_QUEST_COMPLETE: + case CONDITION_DAILY_QUEST_DONE: case CONDITION_QUEST_SATISFY_EXCLUSIVE: { if (!sObjectMgr->GetQuestTemplate(cond->ConditionValue1)) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index b562c93f6..3935260e3 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -64,7 +64,7 @@ enum ConditionTypes CONDITION_IN_WATER = 40, // 0 0 0 true if unit in water CONDITION_TERRAIN_SWAP = 41, // don't use on 3.3.5a CONDITION_STAND_STATE = 42, // TODO: NOT SUPPORTED YET - CONDITION_DAILY_QUEST_DONE = 43, // TODO: NOT SUPPORTED YET + CONDITION_DAILY_QUEST_DONE = 43, // quest id 0 0 true if daily quest has been completed for the day CONDITION_CHARMED = 44, // TODO: NOT SUPPORTED YET CONDITION_PET_TYPE = 45, // TODO: NOT SUPPORTED YET CONDITION_TAXI = 46, // TODO: NOT SUPPORTED YET diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5bb7f6996..d4db4fd65 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23624,6 +23624,22 @@ void Player::SetDailyQuestStatus(uint32 quest_id) } } +bool Player::IsDailyQuestDone(uint32 quest_id) +{ + if (sObjectMgr->GetQuestTemplate(quest_id)) + { + for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx) + { + if (GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1 + quest_daily_idx) == quest_id) + { + return true; + } + } + } + + return false; +} + 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 b520da25f..c4b07e70d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1495,6 +1495,7 @@ public: 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);