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:
@@ -63,13 +63,6 @@ namespace Game.Achievements
|
||||
return false;
|
||||
}
|
||||
|
||||
if (achievement.InstanceID != -1 && referencePlayer.GetMapId() != achievement.InstanceID)
|
||||
{
|
||||
Log.outTrace(LogFilter.Achievement, "CanUpdateCriteriaTree: (Id: {0} Type {1} Achievement {2}) Wrong map",
|
||||
criteria.Id, criteria.Entry.Type, achievement.Id);
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((achievement.Faction == AchievementFaction.Horde && referencePlayer.GetTeam() != Team.Horde) ||
|
||||
(achievement.Faction == AchievementFaction.Alliance && referencePlayer.GetTeam() != Team.Alliance))
|
||||
{
|
||||
@@ -360,40 +353,6 @@ namespace Game.Achievements
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete)
|
||||
{
|
||||
Log.outDebug(LogFilter.Achievement, $"ResetAchievementCriteria({failEvent}, {failAsset}, {evenIfCriteriaComplete})");
|
||||
|
||||
// Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission
|
||||
if (_owner.IsGameMaster() || _owner.GetSession().HasPermission(RBACPermissions.CannotEarnAchievements))
|
||||
return;
|
||||
|
||||
var achievementCriteriaList = Global.CriteriaMgr.GetCriteriaByFailEvent(failEvent, (int)failAsset);
|
||||
if (!achievementCriteriaList.Empty())
|
||||
{
|
||||
foreach (Criteria achievementCriteria in achievementCriteriaList)
|
||||
{
|
||||
|
||||
var trees = Global.CriteriaMgr.GetCriteriaTreesByCriteria(achievementCriteria.Id);
|
||||
bool allComplete = true;
|
||||
foreach (CriteriaTree tree in trees)
|
||||
{
|
||||
// don't update already completed criteria if not forced or achievement already complete
|
||||
if (!(IsCompletedCriteriaTree(tree) && !evenIfCriteriaComplete) || !HasAchieved(tree.Achievement.Id))
|
||||
{
|
||||
allComplete = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (allComplete)
|
||||
continue;
|
||||
|
||||
RemoveCriteriaProgress(achievementCriteria);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void SendAllData(Player receiver)
|
||||
{
|
||||
AllAccountCriteria allAccountCriteria = new();
|
||||
|
||||
Reference in New Issue
Block a user