diff options
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.h | 8 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Arena.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 4 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 39 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Quests/QuestObjectiveCriteriaMgr.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp | 2 |
12 files changed, 46 insertions, 43 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index c57d723eb25..4c632b59113 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -350,15 +350,15 @@ void PlayerAchievementMgr::SaveToDB(CharacterDatabaseTransaction& trans) } } -void PlayerAchievementMgr::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete) +void PlayerAchievementMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete) { - TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria(%u, %d, %s)", condition, failAsset, evenIfCriteriaComplete ? "true" : "false"); + TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria(%u, %d, %s)", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false"); // disable for gamemasters with GM-mode enabled if (_owner->IsGameMaster()) return; - if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(condition, failAsset)) + if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset)) { for (Criteria const* achievementCriteria : *achievementCriteriaList) { diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index ba87512f8de..c423b756114 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -83,7 +83,7 @@ public: void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult); void SaveToDB(CharacterDatabaseTransaction& trans); - void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false); + void ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete = false); void SendAllData(Player const* receiver) const override; void SendAchievementInfo(Player* receiver, uint32 achievementId = 0) const; diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 63a38494ab0..c741fce96a9 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -1292,13 +1292,13 @@ bool CriteriaHandler::ConditionsSatisfied(Criteria const* criteria, Player* refe if (!criteria->Entry->FailEvent) return true; - switch (criteria->Entry->FailEvent) + switch (CriteriaFailEvent(criteria->Entry->FailEvent)) { - case CRITERIA_CONDITION_BG_MAP: + case CriteriaFailEvent::LeaveBattleground: if (!referencePlayer->InBattleground()) return false; break; - case CRITERIA_CONDITION_NOT_IN_GROUP: + case CriteriaFailEvent::ModifyPartyStatus: if (referencePlayer->GetGroup()) return false; break; @@ -1536,7 +1536,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (!miscValue1) return false; - if (criteria->Entry->FailEvent == CRITERIA_CONDITION_BG_MAP) + if (CriteriaFailEvent(criteria->Entry->FailEvent) == CriteriaFailEvent::LeaveBattleground) { if (!referencePlayer->InBattleground()) return false; @@ -3448,8 +3448,8 @@ void CriteriaMgr::LoadCriteriaList() criteriaEntry->Type + 1, CRITERIA_TYPE_TOTAL); ASSERT(criteriaEntry->StartEvent < CRITERIA_TIMED_TYPE_MAX, "CRITERIA_TYPE_TOTAL must be greater than or equal to %u but is currently equal to %u", criteriaEntry->StartEvent + 1, CRITERIA_TIMED_TYPE_MAX); - ASSERT(criteriaEntry->FailEvent < CRITERIA_CONDITION_MAX, "CRITERIA_CONDITION_MAX must be greater than or equal to %u but is currently equal to %u", - criteriaEntry->FailEvent + 1, CRITERIA_CONDITION_MAX); + ASSERT(criteriaEntry->FailEvent < uint8(CriteriaFailEvent::Count), "CriteriaFailEvent::Count must be greater than or equal to %u but is currently equal to %u", + criteriaEntry->FailEvent + 1, uint32(CriteriaFailEvent::Count)); auto treeItr = _criteriaTreeByCriteria.find(criteriaEntry->ID); if (treeItr == _criteriaTreeByCriteria.end()) diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h index f551ee2c8c8..020f38d2434 100644 --- a/src/server/game/Achievements/CriteriaHandler.h +++ b/src/server/game/Achievements/CriteriaHandler.h @@ -350,10 +350,10 @@ public: return _criteriasByTimedType[type]; } - CriteriaList const* GetCriteriaByFailEvent(CriteriaCondition condition, int32 asset) + CriteriaList const* GetCriteriaByFailEvent(CriteriaFailEvent condition, int32 asset) { - auto itr = _criteriasByFailEvent[condition].find(asset); - return itr != _criteriasByFailEvent[condition].end() ? &itr->second : nullptr; + auto itr = _criteriasByFailEvent[size_t(condition)].find(asset); + return itr != _criteriasByFailEvent[size_t(condition)].end() ? &itr->second : nullptr; } CriteriaDataSet const* GetCriteriaDataSet(Criteria const* Criteria) const @@ -413,7 +413,7 @@ private: CriteriaList _questObjectiveCriteriasByType[CRITERIA_TYPE_TOTAL]; CriteriaList _criteriasByTimedType[CRITERIA_TIMED_TYPE_MAX]; - std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[CRITERIA_CONDITION_MAX]; + std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[size_t(CriteriaFailEvent::Count)]; }; #define sCriteriaMgr CriteriaMgr::Instance() diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index 840a2b5624d..344535ba19f 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -274,7 +274,7 @@ void Arena::EndBattleground(uint32 winner) loserArenaTeam->MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange); // Arena lost => reset the win_rated_arena having the "no_lose" condition - player->ResetCriteria(CRITERIA_CONDITION_NO_LOSE, 0); + player->ResetCriteria(CriteriaFailEvent::LoseRankedArenaMatchWithTeamSize, 0); } } diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 91871e1edd8..68cbb9699c6 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -966,7 +966,7 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen player->SetBGTeam(0); // remove all criterias on bg leave - player->ResetCriteria(CRITERIA_CONDITION_BG_MAP, GetMapId(), true); + player->ResetCriteria(CriteriaFailEvent::LeaveBattleground, GetMapId(), true); if (Transport) player->TeleportToBGEntryPoint(); @@ -1116,7 +1116,7 @@ void Battleground::AddPlayer(Player* player) } // reset all map criterias on map enter - player->ResetCriteria(CRITERIA_CONDITION_BG_MAP, GetMapId(), true); + player->ResetCriteria(CriteriaFailEvent::LeaveBattleground, GetMapId(), true); // setup BG group membership PlayerAddedToBGCheckIfBGIsRunning(player); diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 9e2dc25b816..39b240c37f5 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -244,24 +244,6 @@ enum class CorruptionEffectsFlag DEFINE_ENUM_FLAG(CorruptionEffectsFlag); -enum CriteriaCondition -{ - CRITERIA_CONDITION_NONE = 0, - CRITERIA_CONDITION_NO_DEATH = 1, // reset progress on death - CRITERIA_CONDITION_UNK2 = 2, // only used in "Complete a daily quest every day for five consecutive days" - CRITERIA_CONDITION_BG_MAP = 3, // requires you to be on specific map, reset at change - CRITERIA_CONDITION_NO_LOSE = 4, // only used in "Win 10 arenas without losing" - CRITERIA_CONDITION_REMOVE_AURA = 5, // reset when this aura is removed - CRITERIA_CONDITION_CAST_SPELL = 8, // reset when casting this spell - CRITERIA_CONDITION_NO_SPELL_HIT = 9, // requires the player not to be hit by specific spell - CRITERIA_CONDITION_NOT_IN_GROUP = 10, // requires the player not to be in group - CRITERIA_CONDITION_LOSE_PET_BATTLE = 11, // reset when losing pet battle - CRITERIA_CONDITION_UNK13 = 13, // unk - CRITERIA_CONDITION_EVENT = 14, - - CRITERIA_CONDITION_MAX -}; - enum CriteriaAdditionalCondition { CRITERIA_ADDITIONAL_CONDITION_SOURCE_DRUNK_VALUE = 1, @@ -577,6 +559,27 @@ enum CriteriaAdditionalCondition CRITERIA_ADDITIONAL_CONDITION_SOURCE_FLYING = 311, }; +enum class CriteriaFailEvent : uint8 +{ + None = 0, + Death = 1, // Death + Hours24WithoutCompletingDailyQuest = 2, // 24 hours without completing a daily quest + LeaveBattleground = 3, // Leave a battleground + LoseRankedArenaMatchWithTeamSize = 4, // Lose a ranked arena match with team size {#Team Size} + LoseAura = 5, // Lose aura "{Spell}" + GainAura = 6, // Gain aura "{Spell}" + GainAuraEffect = 7, // Gain aura effect "{SpellAuraNames.EnumID}" + CastSpell = 8, // Cast spell "{Spell}" + BeSpellTarget = 9, // Have spell "{Spell}" cast on you + ModifyPartyStatus = 10, // Modify your party status + LosePetBattle = 11, // Lose a pet battle + BattlePetDies = 12, // Battle pet dies + DailyQuestsCleared = 13, // Daily quests cleared + SendEvent = 14, // Send event "{GameEvents}" (player-sent/instance only) + + Count +}; + enum CriteriaFlags { CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 417e41482e5..a7c97480457 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1264,7 +1264,7 @@ void Player::setDeathState(DeathState s) UpdateCriteria(CRITERIA_TYPE_DEATH_IN_DUNGEON, 1); // reset all death criterias - ResetCriteria(CRITERIA_CONDITION_NO_DEATH, 0); + ResetCriteria(CriteriaFailEvent::Death, 0); } Unit::setDeathState(s); @@ -26523,7 +26523,7 @@ void Player::RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry) m_achievementMgr->RemoveCriteriaTimer(type, entry); } -void Player::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete /* = false*/) +void Player::ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete /* = false*/) { m_achievementMgr->ResetCriteria(condition, failAsset, evenIfCriteriaComplete); m_questObjectiveCriteriaMgr->ResetCriteria(condition, failAsset, evenIfCriteriaComplete); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 9e64e1834d8..c463da5adfd 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2480,7 +2480,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint32 GetAchievementPoints() const; bool HasAchieved(uint32 achievementId) const; void ResetAchievements(); - void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false); + void ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete = false); void UpdateCriteria(CriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, Unit* unit = nullptr); void StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0); void RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry); diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp index d9072f58659..2d7082cdf5f 100644 --- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp +++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp @@ -164,15 +164,15 @@ void QuestObjectiveCriteriaMgr::SaveToDB(CharacterDatabaseTransaction& trans) } } -void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete) +void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete) { - TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, %d, %s)", condition, failAsset, evenIfCriteriaComplete ? "true" : "false"); + TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, %d, %s)", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false"); // disable for gamemasters with GM-mode enabled if (_owner->IsGameMaster()) return; - if (CriteriaList const* playerCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(condition, failAsset)) + if (CriteriaList const* playerCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset)) { for (Criteria const* playerCriteria : *playerCriteriaList) { diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.h b/src/server/game/Quests/QuestObjectiveCriteriaMgr.h index f8258ba4159..421b4103198 100644 --- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.h +++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.h @@ -34,7 +34,7 @@ public: void LoadFromDB(PreparedQueryResult objectiveResult, PreparedQueryResult criteriaResult); void SaveToDB(CharacterDatabaseTransaction& trans); - void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false); + void ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete = false); void ResetCriteriaTree(uint32 criteriaTreeId); void SendAllData(Player const* receiver) const override; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 0b3bb2acfc8..7277dc16b08 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -1358,7 +1358,7 @@ class spell_algalon_supermassive_fail : public SpellScriptLoader if (!GetHitPlayer()) return; - GetHitPlayer()->ResetCriteria(CRITERIA_CONDITION_NO_SPELL_HIT, GetSpellInfo()->Id, true); + GetHitPlayer()->ResetCriteria(CriteriaFailEvent::BeSpellTarget, GetSpellInfo()->Id, true); } void Register() override |