aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp6
-rw-r--r--src/server/game/Achievements/AchievementMgr.h2
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp12
-rw-r--r--src/server/game/Achievements/CriteriaHandler.h8
-rw-r--r--src/server/game/Battlegrounds/Arena.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp4
-rw-r--r--src/server/game/DataStores/DBCEnums.h39
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp6
-rw-r--r--src/server/game/Quests/QuestObjectiveCriteriaMgr.h2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp2
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