Пример #1
0
    private void GenerateCharacter(bool is_starter, string guaranteedAptitudeID = null)
    {
        int num = 0;

        do
        {
            stats = new MinionStartingStats(is_starter, guaranteedAptitudeID);
            num++;
        }while (IsCharacterRedundant() && num < 20);
        if ((UnityEngine.Object)animController != (UnityEngine.Object)null)
        {
            ScreenResize instance = ScreenResize.Instance;
            instance.OnResize = (System.Action)Delegate.Remove(instance.OnResize, new System.Action(OnResize));
            UnityEngine.Object.Destroy(animController.gameObject);
            animController = null;
        }
        SetAnimator();
        SetInfoText();
        StartCoroutine(SetAttributes());
        selectButton.ClearOnClick();
        if (!controller.IsStarterMinion)
        {
            selectButton.enabled  = true;
            selectButton.onClick += delegate
            {
                SelectDeliverable();
            };
        }
    }
Пример #2
0
            private static void DoXpGive(MinionStartingStats __instance, GameObject go)
            {
                __instance.Apply(go);
                var resume = go.GetComponent <MinionResume>();
                var config = AdvancedStartOptions.GetConfig();

                resume.AddExperience(XPForSkillPoints(config.startSkillPoints));
            }
Пример #3
0
            public static void Postfix(MinionStartingStats __instance, bool is_starter_minion)
            {
                var config = AdvancedStartOptions.GetConfig();

                if (is_starter_minion)
                {
                    // Set all stats to 10.
                    foreach (var attribute in DUPLICANTSTATS.ALL_ATTRIBUTES)
                    {
                        __instance.StartingLevels[attribute] += config.startAttributeBoost;
                    }
                }
            }
    private void SpawnMinion()
    {
        GameObject gameObject = Util.KInstantiate(Assets.GetPrefab(MinionConfig.ID), null, null);

        gameObject.name = Assets.GetPrefab(MinionConfig.ID).name;
        Immigration.Instance.ApplyDefaultPersonalPriorities(gameObject);
        Vector3 position = Grid.CellToPosCBC(currentCell, Grid.SceneLayer.Move);

        gameObject.transform.SetLocalPosition(position);
        gameObject.SetActive(true);
        MinionStartingStats minionStartingStats = new MinionStartingStats(false, null);

        minionStartingStats.Apply(gameObject);
    }
Пример #5
0
        private static void Postfix(MinionStartingStats __instance)
        {
            var name  = __instance.NameStringKey;
            var state = EndpointState.Load();

            if (state.times_rescued.ContainsKey(name))
            {
                int count = state.times_rescued[name];
                var trait = new Klei.AI.Trait("Rescued", "Rescued", "A previous iteration of this duplicant visited the great printing pod in the sky (x" + count + ").", 0, true, null, true, true);
                foreach (var attribute in TUNING.DUPLICANTSTATS.DISTRIBUTED_ATTRIBUTES)
                {
                    trait.Add(new Klei.AI.AttributeModifier(attribute, state.times_rescued[name], "Rescued x" + count));
                }
                __instance.Traits.Add(trait);
            }
        }
 private void SpawnMinion()
 {
     if (!((UnityEngine.Object)Immigration.Instance == (UnityEngine.Object)null))
     {
         if (!Grid.IsValidBuildingCell(GetMouseCell()))
         {
             PopFXManager.Instance.SpawnFX(PopFXManager.Instance.sprite_Negative, UI.DEBUG_TOOLS.INVALID_LOCATION, null, GetMousePos(), 1.5f, false, true);
         }
         else
         {
             GameObject gameObject = Util.KInstantiate(Assets.GetPrefab(MinionConfig.ID), null, null);
             gameObject.name = Assets.GetPrefab(MinionConfig.ID).name;
             Immigration.Instance.ApplyDefaultPersonalPriorities(gameObject);
             Vector3 position = Grid.CellToPosCBC(GetMouseCell(), Grid.SceneLayer.Move);
             gameObject.transform.SetLocalPosition(position);
             gameObject.SetActive(true);
             MinionStartingStats minionStartingStats = new MinionStartingStats(false, null);
             minionStartingStats.Apply(gameObject);
         }
     }
 }
Пример #7
0
        public static bool Prefix(MinionStartingStats __instance, string guaranteedAptitudeID)
        {
            if (Always3Interests.Settings.randomNumberOfInterests)
            {
                return(true);
            }

            int num = Always3Interests.Settings.numberOfInterests;

            List <SkillGroup> list = new List <SkillGroup>(Db.Get().SkillGroups.resources);

            list.Shuffle <SkillGroup>();
            if (guaranteedAptitudeID != null)
            {
                __instance.skillAptitudes.Add(Db.Get().SkillGroups.Get(guaranteedAptitudeID), DUPLICANTSTATS.APTITUDE_BONUS);
                list.Remove(Db.Get().SkillGroups.Get(guaranteedAptitudeID));
                num--;
            }
            for (int i = 0; i < num; i++)
            {
                __instance.skillAptitudes.Add(list[i], DUPLICANTSTATS.APTITUDE_BONUS);
            }
            return(false);
        }
Пример #8
0
        public static bool Prefix(MinionStartingStats __instance, bool is_starter_minion, List <ChoreGroup> disabled_chore_groups, string guaranteedAptitudeID = null)
        {
            DUPLICANTSTATS.MAX_TRAITS = 10;

            int           statDelta      = 0;
            List <string> selectedTraits = new List <string>();

            System.Random randSeed = new System.Random();

            Trait trait = Db.Get().traits.Get(__instance.personality.stresstrait);

            __instance.stressTrait = trait;

            if (Always3Interests.Settings.disableStressTrait)
            {
                __instance.stressTrait = Db.Get().traits.Get("None");
            }

            // set joy trait if it is not disable
            Trait joytrait = Db.Get().traits.Get(__instance.personality.joyTrait);

            __instance.joyTrait = joytrait;
            if (Always3Interests.Settings.disableJoyTrait)
            {
                __instance.joyTrait = Db.Get().traits.Get("None");
            }

            Trait trait2 = Db.Get().traits.Get(__instance.personality.congenitaltrait);

            if (trait2.Name == "None")
            {
                __instance.stickerType = __instance.personality.stickerType;
            }
            Trait trait3 = Db.Get().traits.Get(__instance.personality.congenitaltrait);

            if (trait3.Name == "None")
            {
                __instance.congenitaltrait = null;
            }
            else
            {
                __instance.congenitaltrait = trait3;
            }
            Func <List <DUPLICANTSTATS.TraitVal>, bool, bool> func = delegate(List <DUPLICANTSTATS.TraitVal> traitPossibilities, bool positiveTrait)
            {
                if (__instance.Traits.Count > DUPLICANTSTATS.MAX_TRAITS)
                {
                    return(false);
                }
                Mathf.Abs(Util.GaussianRandom(0f, 1f));
                int num6 = traitPossibilities.Count;
                int num7;
                if (!positiveTrait)
                {
                    if (DUPLICANTSTATS.rarityDeckActive.Count < 1)
                    {
                        DUPLICANTSTATS.rarityDeckActive.AddRange(DUPLICANTSTATS.RARITY_DECK);
                    }
                    if (DUPLICANTSTATS.rarityDeckActive.Count == DUPLICANTSTATS.RARITY_DECK.Count)
                    {
                        DUPLICANTSTATS.rarityDeckActive.ShuffleSeeded(new KRandom());
                    }
                    num7 = DUPLICANTSTATS.rarityDeckActive[DUPLICANTSTATS.rarityDeckActive.Count - 1];
                    DUPLICANTSTATS.rarityDeckActive.RemoveAt(DUPLICANTSTATS.rarityDeckActive.Count - 1);
                }
                else
                {
                    List <int> list = new List <int>();
                    if (is_starter_minion)
                    {
                        list.Add(__instance.rarityBalance - 1);
                        list.Add(__instance.rarityBalance);
                        list.Add(__instance.rarityBalance);
                        list.Add(__instance.rarityBalance + 1);
                    }
                    else
                    {
                        list.Add(__instance.rarityBalance - 2);
                        list.Add(__instance.rarityBalance - 1);
                        list.Add(__instance.rarityBalance);
                        list.Add(__instance.rarityBalance + 1);
                        list.Add(__instance.rarityBalance + 2);
                    }
                    list.ShuffleSeeded(new KRandom());
                    num7 = list[0];
                    num7 = Mathf.Max(DUPLICANTSTATS.RARITY_COMMON, num7);
                    num7 = Mathf.Min(DUPLICANTSTATS.RARITY_LEGENDARY, num7);
                }
                List <DUPLICANTSTATS.TraitVal> list2 = new List <DUPLICANTSTATS.TraitVal>(traitPossibilities);
                for (int i = list2.Count - 1; i > -1; i--)
                {
                    if (list2[i].rarity != num7)
                    {
                        list2.RemoveAt(i);
                        num6--;
                    }
                }
                list2.ShuffleSeeded(new KRandom());
                foreach (DUPLICANTSTATS.TraitVal traitVal in list2)
                {
                    if (!DlcManager.IsContentActive(traitVal.dlcId))
                    {
                        num6--;
                    }
                    else if (selectedTraits.Contains(traitVal.id))
                    {
                        num6--;
                    }
                    else
                    {
                        Trait trait4 = Db.Get().traits.TryGet(traitVal.id);
                        if (trait4 == null)
                        {
                            global::Debug.LogWarning("Trying to add nonexistent trait: " + traitVal.id);
                            num6--;
                        }
                        else if (is_starter_minion && !trait4.ValidStarterTrait)
                        {
                            num6--;
                        }
                        else if ((bool)Traverse.Create(__instance).Method("AreTraitAndAptitudesExclusive", new object[] { traitVal, __instance.skillAptitudes }).GetValue())
                        {
                            num6--;
                        }
                        else if (is_starter_minion && guaranteedAptitudeID != null &&
                                 (bool)Traverse.Create(__instance).Method("AreTraitAndArchetypeExclusive", new object[] { traitVal, guaranteedAptitudeID }).GetValue())
                        {
                            num6--;
                        }
                        else
                        {
                            if (!(bool)Traverse.Create(__instance).Method("AreTraitsMutuallyExclusive", new object[] { traitVal, selectedTraits }).GetValue())
                            {
                                selectedTraits.Add(traitVal.id);
                                statDelta += traitVal.statBonus;
                                __instance.rarityBalance += (positiveTrait ? (-traitVal.rarity) : traitVal.rarity);
                                __instance.Traits.Add(trait4);
                                if (trait4.disabledChoreGroups != null)
                                {
                                    for (int j = 0; j < trait4.disabledChoreGroups.Length; j++)
                                    {
                                        disabled_chore_groups.Add(trait4.disabledChoreGroups[j]);
                                    }
                                }
                                return(true);
                            }
                            num6--;
                        }
                    }
                }
                return(false);
            };


            int numberOfGoodTraits = Always3Interests.Settings.numberOfGoodTraits;
            int numberOfBadTraits  = Always3Interests.Settings.numberOfBadTraits;

            if (numberOfGoodTraits > 5)
            {
                numberOfGoodTraits = 5;
            }
            if (numberOfBadTraits > 5)
            {
                numberOfBadTraits = 5;
            }

            for (int i = 0; i < numberOfBadTraits; i++)
            {
                bool isTraitAdded = false;
                while (!isTraitAdded)
                {
                    isTraitAdded = func(DUPLICANTSTATS.BADTRAITS, false);
                }
            }
            for (int i = 0; i < numberOfGoodTraits; i++)
            {
                bool isTraitAdded = false;
                while (!isTraitAdded)
                {
                    isTraitAdded = func(DUPLICANTSTATS.GOODTRAITS, true);
                }
            }

            return(false);
        }
Пример #9
0
        public static bool Prefix(MinionStartingStats __instance, List <ChoreGroup> disabled_chore_groups)
        {
            DUPLICANTSTATS.MAX_TRAITS = 10;

            List <string> selectedTraits = new List <string>();

            System.Random randSeed = new System.Random();

            // set stress trait if it is not disable
            Trait trait = Db.Get().traits.Get(__instance.personality.stresstrait);

            __instance.stressTrait = trait;
            if (TuningConfigPatch.settings.disableStressTrait)
            {
                __instance.stressTrait = Db.Get().traits.Get("None");
            }

            // set joy trait if it is not disable
            Trait joytrait = Db.Get().traits.Get(__instance.personality.joyTrait);

            __instance.joyTrait = joytrait;
            if (TuningConfigPatch.settings.disableJoyTrait)
            {
                __instance.joyTrait = Db.Get().traits.Get("None");
            }


            Trait trait2 = Db.Get().traits.Get(__instance.personality.congenitaltrait);

            if (trait2.Name == "None")
            {
                __instance.congenitaltrait = null;
            }
            else
            {
                __instance.congenitaltrait = trait2;
            }
            Func <List <DUPLICANTSTATS.TraitVal>, bool> func = delegate(List <DUPLICANTSTATS.TraitVal> traitPossibilities)
            {
                if (__instance.Traits.Count > DUPLICANTSTATS.MAX_TRAITS)
                {
                    return(false);
                }
                float num2 = Util.GaussianRandom(0f, 1f);
                List <DUPLICANTSTATS.TraitVal> list = new List <DUPLICANTSTATS.TraitVal>(traitPossibilities);
                list.ShuffleSeeded(randSeed);
                list.Sort((DUPLICANTSTATS.TraitVal t1, DUPLICANTSTATS.TraitVal t2) => - t1.probability.CompareTo(t2.probability));
                foreach (DUPLICANTSTATS.TraitVal traitVal in list)
                {
                    if (!selectedTraits.Contains(traitVal.id))
                    {
                        if (traitVal.requiredNonPositiveAptitudes != null)
                        {
                            bool flag2 = false;
                            foreach (KeyValuePair <SkillGroup, float> keyValuePair in __instance.skillAptitudes)
                            {
                                if (flag2)
                                {
                                    break;
                                }
                                foreach (HashedString x in traitVal.requiredNonPositiveAptitudes)
                                {
                                    if (x == keyValuePair.Key.IdHash && keyValuePair.Value > 0f)
                                    {
                                        flag2 = true;
                                        break;
                                    }
                                }
                            }
                            if (flag2)
                            {
                                continue;
                            }
                        }
                        if (traitVal.mutuallyExclusiveTraits != null)
                        {
                            bool flag3 = false;
                            foreach (string item in selectedTraits)
                            {
                                flag3 = traitVal.mutuallyExclusiveTraits.Contains(item);
                                if (flag3)
                                {
                                    break;
                                }
                            }
                            if (flag3)
                            {
                                continue;
                            }
                        }
                        if (num2 > traitVal.probability)
                        {
                            Trait trait3 = Db.Get().traits.TryGet(traitVal.id);
                            if (trait3 == null)
                            {
                                global::Debug.LogWarning("Trying to add nonexistent trait: " + traitVal.id);
                            }
                            else if (trait3.ValidStarterTrait)
                            {
                                selectedTraits.Add(traitVal.id);
                                __instance.Traits.Add(trait3);
                                if (trait3.disabledChoreGroups != null)
                                {
                                    for (int k = 0; k < trait3.disabledChoreGroups.Length; k++)
                                    {
                                        disabled_chore_groups.Add(trait3.disabledChoreGroups[k]);
                                    }
                                }
                                return(true);
                            }
                        }
                    }
                }
                return(false);
            };


            int numberOfGoodTraits = TuningConfigPatch.settings.numberOfGoodTraits;
            int numberOfBadTraits  = TuningConfigPatch.settings.numberOfBadTraits;

            if (numberOfGoodTraits > 5)
            {
                numberOfGoodTraits = 5;
            }
            if (numberOfBadTraits > 5)
            {
                numberOfBadTraits = 5;
            }

            for (int i = 0; i < numberOfBadTraits; i++)
            {
                bool isTraitAdded = false;
                while (!isTraitAdded)
                {
                    isTraitAdded = func(DUPLICANTSTATS.BADTRAITS);
                }
            }
            for (int i = 0; i < numberOfGoodTraits; i++)
            {
                bool isTraitAdded = false;
                while (!isTraitAdded)
                {
                    isTraitAdded = func(DUPLICANTSTATS.GOODTRAITS);
                }
            }
            return(false);
        }