private static void Postfix(ProgressionVM __instance, ref ProgressionVM.FeatureEntry featureEntry) { if (!settings.toggleMultiArchetype) { return; } var featureEntry2 = featureEntry; foreach (var archetype in __instance.ProgressionData.Archetypes) { foreach (var removeFeature in archetype.RemoveFeatures.Where(entry => entry.Level == featureEntry2.Level)) { if (removeFeature.Features.Any(f => f == featureEntry2.Feature)) { featureEntry.DifType = ClassArchetypeDifType.Removed; } ; } foreach (var addFeature in archetype.AddFeatures.Where(entry => entry.Level == featureEntry2.Level)) { if (addFeature.Features.Any(f => f == featureEntry2.Feature)) { featureEntry.DifType = ClassArchetypeDifType.Added; } ; } } }
private static void Postfix(ClassProgressionVM __instance, BlueprintCharacterClass classBlueprint, int level, bool buildDifference) { if (!settings.toggleMultiArchetype) { return; } var data = __instance.ProgressionVms.Select(vm => vm.ProgressionData).OfType <AdvancedProgressionData>().First(); __instance.ProgressionVms.Clear(); var addArchetypes = Game.Instance.LevelUpController.LevelUpActions.OfType <AddArchetype>(); foreach (var add in addArchetypes) { data.AddArchetype(add.Archetype); } var newVM = new ProgressionVM(data, __instance.m_Unit, new int?(level), buildDifference); __instance.ProgressionVms.Add(newVM); __instance.AddProgressions(__instance.m_Unit.Progression.GetClassProgressions(__instance.m_UnitClass).EmptyIfNull <ProgressionData>()); __instance.AddProgressionSources(newVM.ProgressionSourceFeatures); var archetypeString = string.Join("/", addArchetypes.Select(a => a.Archetype.Name)); if (!string.IsNullOrEmpty(archetypeString)) { __instance.Name = string.Join(" ", classBlueprint.Name, $"({archetypeString})"); } var castingArchetype = addArchetypes.Select(a => a.Archetype).Where(a => a.ReplaceSpellbook != null).FirstOrDefault(); if (castingArchetype != null) { __instance.AddDisposable(__instance.SpellbookProgressionVM = new SpellbookProgressionVM( __instance.m_UnitClass, castingArchetype, __instance.m_Unit, __instance.m_LevelProgressionVM)); } }