public virtual void Deserialize(GenericReader reader) { reader.ReadInt(); // version ShowGumpTag = reader.ReadBool(); ShowProgress = reader.ReadBool(); FilterType = (AchievementType)reader.ReadInt(); SortFilter = (SortFilter)reader.ReadInt(); int count = reader.ReadInt(); for (int i = 0; i < count; i++) { var id = reader.ReadInt(); var details = new AchievementDetails(id); details.Deserialize(reader); if (Details == null) { Details = new Dictionary <int, AchievementDetails>(); } Details[id] = details; } count = reader.ReadInt(); for (int i = 0; i < count; i++) { var type = (AchievementType)reader.ReadInt(); var index = reader.ReadInt(); SetTypeIndex(type, index); } }
public ProgressCheckResult CheckProgress(Achievement achievement, object check) { if (achievement == null) { return(ProgressCheckResult.Error); } if (achievement.Locked && !HasUnlocked(achievement)) { return(ProgressCheckResult.NotUnlocked); } if (Details == null) { Details = new Dictionary <int, AchievementDetails>(); } int id = achievement.Identifier; AchievementDetails details = GetDetails(id); if (details != null) { if (details.HasAchieved) { return(ProgressCheckResult.AlreadyAchieved); } else { if (achievement.ProgressRelativeToCheck) { int progress = 1; if (check is int) { progress = Math.Max(1, (int)check); } else if (check is Item) { progress = Math.Max(1, ((Item)check).Amount); } details.Progress = Math.Min(details.MaxProgress, details.Progress + progress); } else { details.Progress++; } } } else { Details[id] = details = new AchievementDetails(id); } if (details.Progress >= achievement.MaxProgress) { details.TimeAchieved = DateTime.Now; return(ProgressCheckResult.Achieved); } else { return(ProgressCheckResult.Progressed); } }