fix(Core/Conditions): Implement CONDITION_DAILY_QUEST_DONE (#3050)

This commit is contained in:
Kitzunu
2020-11-14 06:08:00 +01:00
committed by GitHub
parent 543753b641
commit 2788d495f9
4 changed files with 30 additions and 2 deletions

View File

@@ -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))

View File

@@ -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

View File

@@ -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);

View File

@@ -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);