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);
            }
        }
Exemplo n.º 2
0
 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);
            }
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 7
0
 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);
            }
        }