static bool Prefix(ContextRankConfig __instance, MechanicsContext context, ContextRankBaseValueType ___m_BaseValueType, BlueprintFeature ___m_Feature, ref int __result) { if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterClassLevel.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterMaxClassLevelWithArchetype.ToContextRankBaseValueType()) { int rankBonus1 = context.Params.RankBonus; var caster = context.MaybeCaster; __result = rankBonus1 + getMasterRank(caster.Descriptor, __instance); return(false); } else if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterFeatureRank.ToContextRankBaseValueType()) { if (context.MaybeCaster.Descriptor.IsPet) { __result = context.MaybeCaster.Descriptor.Master.Value.Descriptor.Progression.Features.GetRank(___m_Feature); } else { __result = context.MaybeCaster.Descriptor.Progression.Features.GetRank(___m_Feature); } return(false); } else { return(true); } }
static void Postfix(ContextRankConfig __instance, ContextRankBaseValueType ___m_BaseValueType, ref bool __result) { if (!__result) { __result = ___m_BaseValueType == ContextRankBaseValueTypeExtender.ClassLevelPlusStatValue.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterClassLevel.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterMaxClassLevelWithArchetype.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.SummClassLevelWithArchetypes.ToContextRankBaseValueType(); } }
static void Postfix(ContextRankConfig __instance, MechanicsContext context, ContextRankBaseValueType ___m_BaseValueType, bool ___m_ExceptClasses, StatType ___m_Stat, BlueprintFeature ___m_Feature, BlueprintCharacterClass[] ___m_Class, BlueprintArchetype ___Archetype, ref int __result) { switch (___m_BaseValueType) { case ContextRankBaseValueType.ClassLevel: __result += FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(context.MaybeCaster.Descriptor, ___m_Class, new BlueprintArchetype[0]); return; case ContextRankBaseValueType.MaxClassLevelWithArchetype: if (___m_ExceptClasses) { return; } __result = Math.Max(FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(context.MaybeCaster.Descriptor, ___m_Class, new BlueprintArchetype[] { ___Archetype }) + context.Params.RankBonus, __result); return; case ContextRankBaseValueType.SummClassLevelWithArchetype: int num3 = context.Params.RankBonus; foreach (Kingmaker.UnitLogic.ClassData classData in context.MaybeCaster.Descriptor.Progression.Classes) { if ((___m_ExceptClasses && !(___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass) || !___m_ExceptClasses && (___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass)) && (!((IEnumerable <BlueprintArchetype>)classData.CharacterClass.Archetypes).Contains <BlueprintArchetype>(___Archetype) || classData.Archetypes.Contains(___Archetype))) { num3 += classData.Level + context.Params.RankBonus; } } num3 += FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(context.MaybeCaster.Descriptor, ___m_Class, new BlueprintArchetype[] { ___Archetype }); __result = num3; return; case ContextRankBaseValueType.OwnerSummClassLevelWithArchetype: UnitEntityData maybeOwner = context.MaybeOwner; if (maybeOwner == null) { return; } int num4 = context.Params.RankBonus; foreach (Kingmaker.UnitLogic.ClassData classData in maybeOwner.Descriptor.Progression.Classes) { if ((___m_ExceptClasses && !(___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass) || !___m_ExceptClasses && (___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass)) && (!((IEnumerable <BlueprintArchetype>)classData.CharacterClass.Archetypes).Contains <BlueprintArchetype>(___Archetype) || classData.Archetypes.Contains(___Archetype))) { num4 += classData.Level; } } num4 += FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(maybeOwner.Descriptor, ___m_Class, new BlueprintArchetype[] { ___Archetype }); __result = num4; return; default: return; } }
static bool Prefix(ContextRankConfig __instance, MechanicsContext context, ContextRankBaseValueType ___m_BaseValueType, ref int __result) { if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterClassLevel.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterMaxClassLevelWithArchetype.ToContextRankBaseValueType()) { int rankBonus1 = context.Params.RankBonus; var caster = context.MaybeCaster; __result = rankBonus1 + getMasterRank(caster.Descriptor, __instance); return(false); } else { return(true); } }
static int getClassLevelRank(UnitDescriptor unit, ContextRankConfig rank_config) { if (unit == null) { return(0); } var tr = Harmony12.Traverse.Create(rank_config); bool m_ExceptClasses = tr.Field("m_ExceptClasses").GetValue <bool>(); BlueprintCharacterClass[] m_Class = tr.Field("m_Class").GetValue <BlueprintCharacterClass[]>(); ContextRankBaseValueType m_BaseValueType = tr.Field("m_BaseValueType").GetValue <ContextRankBaseValueType>(); int rankBonus = 0; if (m_BaseValueType == ContextRankBaseValueTypeExtender.MasterClassLevel.ToContextRankBaseValueType()) { foreach (Kingmaker.UnitLogic.ClassData classData in unit.Progression.Classes) { if (m_ExceptClasses && !((IList <BlueprintCharacterClass>)m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass) || !m_ExceptClasses && ((IList <BlueprintCharacterClass>)m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass)) { rankBonus += classData.Level; } } if (!m_ExceptClasses) { rankBonus += FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(unit, m_Class, new BlueprintArchetype[0]); } } else if (m_BaseValueType == ContextRankBaseValueTypeExtender.MasterMaxClassLevelWithArchetype.ToContextRankBaseValueType()) { BlueprintArchetype Archetype = tr.Field("Archetype").GetValue <BlueprintArchetype>(); foreach (Kingmaker.UnitLogic.ClassData classData in unit.Progression.Classes) { if ((m_ExceptClasses && !((IList <BlueprintCharacterClass>)m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass) || !m_ExceptClasses && ((IList <BlueprintCharacterClass>)m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass)) && (!((IEnumerable <BlueprintArchetype>)classData.CharacterClass.Archetypes).Contains <BlueprintArchetype>(Archetype) || classData.Archetypes.Contains(Archetype))) { rankBonus = Math.Max(rankBonus, classData.Level); } } if (!m_ExceptClasses) { rankBonus = Math.Max(FakeClassLevelMechanics.Helpers.calculateFakeClassLevel(unit, m_Class, new BlueprintArchetype[0]), rankBonus); } } return(rankBonus); }
public static ContextRankBaseValueTypeExtender ToContextRankBaseValueTypeExtender(this ContextRankBaseValueType base_value) { int value = (int)base_value - (int)ContextRankBaseValueTypeExtender.None.ToContextRankBaseValueType(); if (value <= 0) { return(0); } return((ContextRankBaseValueTypeExtender)(value)); }
public static void Postfix(ContextRankConfig __instance, ref int __result, MechanicsContext context, ref ContextRankBaseValueType ___m_BaseValueType) { if (!BloodArcanist.wantToModify_ContextRankConfig.Contains(__instance)) { return; } if (___m_BaseValueType == ContextRankBaseValueType.SummClassLevelWithArchetype) { ClassData classdata = context.MaybeCaster.Descriptor.Progression.GetClassData(ArcanistClass.arcanist); if (classdata != null && classdata.Archetypes.Contains(BloodArcanist.archetype)) { __result += classdata.Level; return; } } if (___m_BaseValueType == ContextRankBaseValueType.OwnerSummClassLevelWithArchetype) { var maybeOwner = context.MaybeOwner; if (maybeOwner == null) { return; } ClassData classdata = maybeOwner.Descriptor.Progression.GetClassData(ArcanistClass.arcanist); if (classdata != null && classdata.Archetypes.Contains(BloodArcanist.archetype)) { __result += classdata.Level; return; } } }
static bool Prefix(ContextRankConfig __instance, MechanicsContext context, ContextRankBaseValueType ___m_BaseValueType, bool ___m_ExceptClasses, StatType ___m_Stat, BlueprintFeature ___m_Feature, BlueprintCharacterClass[] ___m_Class, BlueprintArchetype ___Archetype, ref int __result) { if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterClassLevel.ToContextRankBaseValueType() || ___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterMaxClassLevelWithArchetype.ToContextRankBaseValueType()) { int rankBonus1 = context.Params.RankBonus; var caster = context.MaybeCaster; __result = rankBonus1 + getMasterRank(caster.Descriptor, __instance); return(false); } else if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MasterFeatureRank.ToContextRankBaseValueType()) { if (context.MaybeCaster.Descriptor.IsPet) { __result = context.MaybeCaster.Descriptor.Master.Value.Descriptor.Progression.Features.GetRank(___m_Feature); } else { __result = context.MaybeCaster.Descriptor.Progression.Features.GetRank(___m_Feature); } return(false); } else if (___m_BaseValueType == ContextRankBaseValueTypeExtender.ClassLevelPlusStatValue.ToContextRankBaseValueType()) { int rankBonus1 = context.Params.RankBonus; foreach (Kingmaker.UnitLogic.ClassData classData in context.MaybeCaster.Descriptor.Progression.Classes) { if (___m_ExceptClasses && !((IList <BlueprintCharacterClass>)___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass) || !___m_ExceptClasses && ((IList <BlueprintCharacterClass>)___m_Class).HasItem <BlueprintCharacterClass>(classData.CharacterClass)) { rankBonus1 += classData.Level; } } int?bonus = context.MaybeCaster.Descriptor.Stats.GetStat <ModifiableValueAttributeStat>(___m_Stat)?.Bonus; rankBonus1 = !bonus.HasValue ? rankBonus1 : rankBonus1 + bonus.Value; __result = rankBonus1; return(false); } else if (___m_BaseValueType == ContextRankBaseValueTypeExtender.SummClassLevelWithArchetypes.ToContextRankBaseValueType()) { __result = 0; var archetypes_list = ___m_Feature.GetComponent <ContextRankConfigArchetypeList>().archetypes; if (___Archetype != null) { archetypes_list = archetypes_list.AddToArray(___Archetype); } foreach (var c in context.MaybeCaster.Descriptor.Progression.Classes) { if (!___m_Class.Contains(c.CharacterClass)) { continue; } var class_archetypes = archetypes_list.Where(a => a.GetParentClass() == c.CharacterClass).ToArray(); if (class_archetypes.Empty()) { __result = Math.Max(c.Level, __result); } else { foreach (var a in c.Archetypes) { if (class_archetypes.Contains(a)) { __result = Math.Max(c.Level, __result); break; } } } } return(false); } else if (___m_BaseValueType == ContextRankBaseValueTypeExtender.MaxClassLevelWithArchetypes.ToContextRankBaseValueType()) { __result = 0; var archetypes_list = ___m_Feature.GetComponent <ContextRankConfigArchetypeList>().archetypes; if (___Archetype != null) { archetypes_list = archetypes_list.AddToArray(___Archetype); } foreach (var c in context.MaybeCaster.Descriptor.Progression.Classes) { if (!___m_Class.Contains(c.CharacterClass)) { continue; } var class_archetypes = archetypes_list.Where(a => a.GetParentClass() == c.CharacterClass).ToArray(); if (class_archetypes.Empty()) { __result = Math.Max(c.Level, __result); } else { foreach (var a in c.Archetypes) { if (class_archetypes.Contains(a)) { __result = Math.Max(c.Level, __result); break; } } } } return(false); } else { return(true); } }