public override void Convert(byte[] rawData) { var criteriaType = (AchievementCriteriaType)GetUInt32(rawData, 2); var creator = AchievementMgr.GetCriteriaEntryCreator(criteriaType); if (creator == null) { // unknown type return; } var entry = creator(); entry.AchievementCriteriaId = GetUInt32(rawData, 0); entry.AchievementEntryId = GetUInt32(rawData, 1); var achievement = entry.AchievementEntry; if (achievement == null) { // invalid criteria does not belong to any entry return; } // add criterion to achievement achievement.Criteria.Add(entry); CopyTo(rawData, entry, 3); entry.CompletionFlag = GetUInt32(rawData, 26); entry.GroupFlag = (AchievementCriteriaGroupFlags)GetUInt32(rawData, 27); entry.TimeLimit = GetUInt32(rawData, 29); // add to critera map var list = AchievementMgr.GetCriteriaEntriesByType(criteriaType); if (list != null) { list.Add(entry); } // create requirement set entry.RequirementSet = new AchievementCriteriaRequirementSet(entry.AchievementCriteriaId); AchievementMgr.CriteriaEntriesById[entry.AchievementCriteriaId] = entry; }
/// <summary> /// A method that will try to update the progress of all the related criterias. /// </summary> /// <param name="type">The Criteria Type.</param> /// <param name="value1"></param> /// <param name="value2"></param> /// <param name="involved"></param> internal void CheckPossibleAchievementUpdates(AchievementCriteriaType type, uint value1 = 0u, uint value2 = 0u, Unit involved = null) { // Get all the related criterions. var list = AchievementMgr.GetCriteriaEntriesByType(type); if (list != null) { foreach (var entry in list) { if (IsAchieveable(entry)) { if (entry.RequirementSet == null || entry.RequirementSet.Meets(Owner, involved, value1)) { entry.OnUpdate(this, value1, value2, involved); } } } } }
/// <summary> /// A method that will try to update the progress of all the related criterias. /// </summary> /// <param name="type">The Criteria Type.</param> /// <param name="value1"></param> /// <param name="value2"></param> /// <param name="involved"></param> internal void CheckPossibleAchievementUpdates(AchievementCriteriaType type, uint value1 = 0, uint value2 = 0, Unit involved = null) { List <AchievementCriteriaEntry> criteriaEntriesByType = AchievementMgr.GetCriteriaEntriesByType(type); if (criteriaEntriesByType == null) { return; } foreach (AchievementCriteriaEntry achievementCriteriaEntry in criteriaEntriesByType) { if (this.IsAchieveable(achievementCriteriaEntry) && (achievementCriteriaEntry.RequirementSet == null || achievementCriteriaEntry.RequirementSet.Meets(this.Owner, involved, value1))) { achievementCriteriaEntry.OnUpdate(this, value1, value2, (ObjectBase)involved); } } }
public override void Convert(byte[] rawData) { AchievementCriteriaType uint32 = (AchievementCriteriaType)DBCRecordConverter.GetUInt32(rawData, 2); AchievementCriteriaEntryCreator criteriaEntryCreator = AchievementMgr.GetCriteriaEntryCreator(uint32); if (criteriaEntryCreator == null) { return; } AchievementCriteriaEntry achievementCriteriaEntry = criteriaEntryCreator(); achievementCriteriaEntry.AchievementCriteriaId = DBCRecordConverter.GetUInt32(rawData, 0); achievementCriteriaEntry.AchievementEntryId = DBCRecordConverter.GetUInt32(rawData, 1); AchievementEntry achievementEntry = achievementCriteriaEntry.AchievementEntry; if (achievementEntry == null) { return; } achievementEntry.Criteria.Add(achievementCriteriaEntry); DBCRecordConverter.CopyTo(rawData, (object)achievementCriteriaEntry, 3); achievementCriteriaEntry.CompletionFlag = DBCRecordConverter.GetUInt32(rawData, 26); achievementCriteriaEntry.GroupFlag = (AchievementCriteriaGroupFlags)DBCRecordConverter.GetUInt32(rawData, 27); achievementCriteriaEntry.TimeLimit = DBCRecordConverter.GetUInt32(rawData, 29); List <AchievementCriteriaEntry> criteriaEntriesByType = AchievementMgr.GetCriteriaEntriesByType(uint32); if (criteriaEntriesByType != null) { criteriaEntriesByType.Add(achievementCriteriaEntry); } achievementCriteriaEntry.RequirementSet = new AchievementCriteriaRequirementSet(achievementCriteriaEntry.AchievementCriteriaId); AchievementMgr.CriteriaEntriesById[achievementCriteriaEntry.AchievementCriteriaId] = achievementCriteriaEntry; }