From 4b0b5df1529c2c125abb34b7945c21e97f4100db Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 31 May 2022 19:54:05 -0400 Subject: [PATCH] Core/Achievements: Implemented criteria flag "Reset on Start" and removed manual script workarounds for it Port From (https://github.com/TrinityCore/TrinityCore/commit/e1abd8256be38c299156264424999c0108613198) --- Source/Game/Achievements/CriteriaHandler.cs | 2 +- Source/Game/DataStorage/Structs/C_Records.cs | 2 ++ Source/Game/Maps/Instances/InstanceScript.cs | 6 ------ 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 467d9e9e9..e89a2cfba 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -493,7 +493,7 @@ namespace Game.Achievements bool canStart = false; foreach (CriteriaTree tree in trees) { - if (!_timeCriteriaTrees.ContainsKey(tree.Id) && !IsCompletedCriteriaTree(tree)) + if ((!_timeCriteriaTrees.ContainsKey(tree.Id) || criteria.Entry.GetFlags().HasFlag(CriteriaFlags.ResetOnStart)) && !IsCompletedCriteriaTree(tree)) { // Start the timer if (criteria.Entry.StartTimer * Time.InMilliseconds > timeLost) diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index 274d92336..24fa4883b 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -496,6 +496,8 @@ namespace Game.DataStorage public byte Flags; public ushort EligibilityWorldStateID; public byte EligibilityWorldStateValue; + + public CriteriaFlags GetFlags() => (CriteriaFlags)Flags; } public sealed class CriteriaTreeRecord diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index 456c4f669..281ba4fd5 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -606,12 +606,6 @@ namespace Game.Maps instance.DoOnPlayers(player => player.StartCriteriaTimer(startEvent, entry)); } - // Stop timed achievement for all players in instance - public void DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint entry) - { - instance.DoOnPlayers(player => player.RemoveCriteriaTimer(startEvent, entry)); - } - // Remove Auras due to Spell on all players in instance public void DoRemoveAurasDueToSpellOnPlayers(uint spell, bool includePets = false, bool includeControlled = false) {