diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index ec5aea4bd..6dec1001e 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -84,24 +84,6 @@ namespace Framework.Constants QuestObjective = 0x10 } - public enum CriteriaCondition - { - None = 0, - NoDeath = 1, - Unk2 = 2, - BgMap = 3, - NoLose = 4, - RemoveAura = 5, - CastSpell = 8, - NoSpellHit = 9, - NotInGroup = 10, - LostPetBattle = 11, - Unk13 = 13, - Event = 14, - - Max - } - public enum CriteriaAdditionalCondition { SourceDrunkValue = 1, @@ -417,6 +399,27 @@ namespace Framework.Constants SourceFlying = 311, } + public enum CriteriaFailEvent : byte + { + 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) + + Max + } + public enum CriteriaFlags { ShowProgressBar = 0x01, diff --git a/Source/Game/Achievements/AchievementManager.cs b/Source/Game/Achievements/AchievementManager.cs index 24856d492..ed2badc23 100644 --- a/Source/Game/Achievements/AchievementManager.cs +++ b/Source/Game/Achievements/AchievementManager.cs @@ -364,15 +364,15 @@ namespace Game.Achievements } } - public void ResetCriteria(CriteriaCondition condition, uint failAsset, bool evenIfCriteriaComplete) + public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete) { - Log.outDebug(LogFilter.Achievement, $"ResetAchievementCriteria({condition}, {failAsset}, {evenIfCriteriaComplete})"); + Log.outDebug(LogFilter.Achievement, $"ResetAchievementCriteria({failEvent}, {failAsset}, {evenIfCriteriaComplete})"); // disable for gamemasters with GM-mode enabled if (_owner.IsGameMaster()) return; - var achievementCriteriaList = Global.CriteriaMgr.GetCriteriaByFailEvent(condition, (int)failAsset); + var achievementCriteriaList = Global.CriteriaMgr.GetCriteriaByFailEvent(failEvent, (int)failAsset); if (!achievementCriteriaList.Empty()) { foreach (Criteria achievementCriteria in achievementCriteriaList) diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 9c8e2709f..a3be3e7a7 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -900,13 +900,13 @@ namespace Game.Achievements if (criteria.Entry.FailEvent == 0) return true; - switch ((CriteriaCondition)criteria.Entry.FailEvent) + switch ((CriteriaFailEvent)criteria.Entry.FailEvent) { - case CriteriaCondition.BgMap: + case CriteriaFailEvent.LeaveBattleground: if (!referencePlayer.InBattleground()) return false; break; - case CriteriaCondition.NotInGroup: + case CriteriaFailEvent.ModifyPartyStatus: if (referencePlayer.GetGroup()) return false; break; @@ -1144,7 +1144,7 @@ namespace Game.Achievements if (miscValue1 == 0) return false; - if (criteria.Entry.FailEvent == (uint)CriteriaCondition.BgMap) + if ((CriteriaFailEvent)criteria.Entry.FailEvent == CriteriaFailEvent.LeaveBattleground) { if (!referencePlayer.InBattleground()) return false; @@ -2627,7 +2627,7 @@ namespace Game.Achievements MultiMap _questObjectiveCriteriasByType = new(); MultiMap _criteriasByTimedType = new(); - MultiMap[] _criteriasByFailEvent = new MultiMap[(int)CriteriaCondition.Max]; + MultiMap[] _criteriasByFailEvent = new MultiMap[(int)CriteriaFailEvent.Max]; CriteriaManager() { @@ -2746,7 +2746,7 @@ namespace Game.Achievements _criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, pair.Value); } - for (var i = 0; i < (int)CriteriaCondition.Max; ++i) + for (var i = 0; i < (int)CriteriaFailEvent.Max; ++i) _criteriasByFailEvent[i] = new MultiMap(); // Load criteria @@ -2759,7 +2759,7 @@ namespace Game.Achievements Cypher.Assert(criteriaEntry.Type < CriteriaTypes.TotalTypes, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaTypes.TotalTypes}"); Cypher.Assert(criteriaEntry.StartEvent < CriteriaTimedTypes.Max, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaTimedTypes.Max}"); - Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaCondition.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaCondition.Max}"); + Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Max}"); var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id); if (treeList.Empty()) @@ -3000,9 +3000,9 @@ namespace Game.Achievements return _criteriasByTimedType.LookupByKey(type); } - public List GetCriteriaByFailEvent(CriteriaCondition condition, int asset) + public List GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int asset) { - return _criteriasByFailEvent[(int)condition].LookupByKey(asset); + return _criteriasByFailEvent[(int)failEvent].LookupByKey(asset); } public CriteriaDataSet GetCriteriaDataSet(Criteria criteria) diff --git a/Source/Game/Arenas/Arena.cs b/Source/Game/Arenas/Arena.cs index 2ad3cedfc..14b8f3746 100644 --- a/Source/Game/Arenas/Arena.cs +++ b/Source/Game/Arenas/Arena.cs @@ -282,7 +282,7 @@ namespace Game.Arenas loserArenaTeam.MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange); // Arena lost => reset the win_rated_arena having the "no_lose" condition - player.ResetCriteria(CriteriaCondition.NoLose, 0); + player.ResetCriteria(CriteriaFailEvent.LoseRankedArenaMatchWithTeamSize, 0); } } diff --git a/Source/Game/BattleGrounds/BattleGround.cs b/Source/Game/BattleGrounds/BattleGround.cs index 0a0c56345..3616aa386 100644 --- a/Source/Game/BattleGrounds/BattleGround.cs +++ b/Source/Game/BattleGrounds/BattleGround.cs @@ -917,7 +917,7 @@ namespace Game.BattleGrounds player.SetBGTeam(0); // remove all criterias on bg leave - player.ResetCriteria(CriteriaCondition.BgMap, GetMapId(), true); + player.ResetCriteria(CriteriaFailEvent.LeaveBattleground, GetMapId(), true); if (Transport) player.TeleportToBGEntryPoint(); @@ -1066,7 +1066,7 @@ namespace Game.BattleGrounds } // reset all map criterias on map enter - player.ResetCriteria(CriteriaCondition.BgMap, GetMapId(), true); + player.ResetCriteria(CriteriaFailEvent.LeaveBattleground, GetMapId(), true); // setup BG group membership PlayerAddedToBGCheckIfBGIsRunning(player); diff --git a/Source/Game/Entities/Player/Player.Achievement.cs b/Source/Game/Entities/Player/Player.Achievement.cs index 558b9d191..5d7bb86d8 100644 --- a/Source/Game/Entities/Player/Player.Achievement.cs +++ b/Source/Game/Entities/Player/Player.Achievement.cs @@ -53,10 +53,10 @@ namespace Game.Entities m_achievementSys.RemoveCriteriaTimer(type, entry); } - public void ResetCriteria(CriteriaCondition condition, uint failAsset, bool evenIfCriteriaComplete = false) + public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete = false) { - m_achievementSys.ResetCriteria(condition, failAsset, evenIfCriteriaComplete); - m_questObjectiveCriteriaMgr.ResetCriteria(condition, failAsset, evenIfCriteriaComplete); + m_achievementSys.ResetCriteria(failEvent, failAsset, evenIfCriteriaComplete); + m_questObjectiveCriteriaMgr.ResetCriteria(failEvent, failAsset, evenIfCriteriaComplete); } public void UpdateCriteria(CriteriaTypes type, ulong miscValue1 = 0, ulong miscValue2 = 0, ulong miscValue3 = 0, Unit unit = null) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index a037bed07..78a9ef51d 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -658,7 +658,7 @@ namespace Game.Entities UpdateCriteria(CriteriaTypes.DeathInDungeon, 1); // reset all death criterias - ResetCriteria(CriteriaCondition.NoDeath, 0); + ResetCriteria(CriteriaFailEvent.Death, 0); } base.SetDeathState(s); diff --git a/Source/Game/Quest/QuestObjectiveCriteriaManager.cs b/Source/Game/Quest/QuestObjectiveCriteriaManager.cs index 01401f4d1..c76f2e4b5 100644 --- a/Source/Game/Quest/QuestObjectiveCriteriaManager.cs +++ b/Source/Game/Quest/QuestObjectiveCriteriaManager.cs @@ -164,15 +164,15 @@ namespace Game } } - public void ResetCriteria(CriteriaCondition condition, uint failAsset, bool evenIfCriteriaComplete) + public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete) { - Log.outDebug(LogFilter.Player, $"QuestObjectiveCriteriaMgr.ResetCriteria({condition}, {failAsset}, {evenIfCriteriaComplete})"); + Log.outDebug(LogFilter.Player, $"QuestObjectiveCriteriaMgr.ResetCriteria({failEvent}, {failAsset}, {evenIfCriteriaComplete})"); // disable for gamemasters with GM-mode enabled if (_owner.IsGameMaster()) return; - var playerCriteriaList = Global.CriteriaMgr.GetCriteriaByFailEvent(condition, (int)failAsset); + var playerCriteriaList = Global.CriteriaMgr.GetCriteriaByFailEvent(failEvent, (int)failAsset); foreach (Criteria playerCriteria in playerCriteriaList) { var trees = Global.CriteriaMgr.GetCriteriaTreesByCriteria(playerCriteria.Id);