Core/Achievements: Fixed achievement criteria StartEvent and FailEvent

* Criteria using StartEvent cannot be updated without that event triggering first (not only for timed achievements)
* Implemented most StartEvent and FailEvent types
* Fixed saving criteria removed by RemoveCriteriaProgress
Port From (https://github.com/TrinityCore/TrinityCore/commit/41a20b1e4008d450d075847ef1fe367f0e3a240f)
This commit is contained in:
hondacrx
2024-01-30 10:22:01 -05:00
parent 902b217d88
commit a1cb1d95ee
16 changed files with 148 additions and 211 deletions
@@ -150,36 +150,6 @@ namespace Game
}
}
public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool 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(failEvent, (int)failAsset);
foreach (Criteria playerCriteria in playerCriteriaList)
{
var trees = Global.CriteriaMgr.GetCriteriaTreesByCriteria(playerCriteria.Id);
bool allComplete = true;
foreach (CriteriaTree tree in trees)
{
// don't update already completed criteria if not forced
if (!(IsCompletedCriteriaTree(tree) && !evenIfCriteriaComplete))
{
allComplete = false;
break;
}
}
if (allComplete)
continue;
RemoveCriteriaProgress(playerCriteria);
}
}
public void ResetCriteriaTree(uint criteriaTreeId)
{
CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree(criteriaTreeId);