Exemplo n.º 1
0
            /// <summary>
            /// Applied after UpdateAchievementData runs.
            /// </summary>
            internal static void Postfix(Dictionary <string, GameObject> ___achievementEntries,
                                         string[] newlyAchieved)
            {
                var newly = HashSetPool <string, AchievementStateComponent> .Allocate();

                // Achievements just obtained should always be shown
                if (newlyAchieved != null)
                {
                    foreach (string achieved in newlyAchieved)
                    {
                        newly.Add(achieved);
                    }
                }
                foreach (var pair in ___achievementEntries)
                {
                    var         obj = pair.Value;
                    string      id  = pair.Key;
                    MultiToggle toggle;
                    var         info = MoreAchievementsAPI.TranslateAchievement(id);
                    if (obj != null && (toggle = obj.GetComponent <MultiToggle>()) != null &&
                        info.Hidden)
                    {
                        // Inactivate achievements that have never been achieved
                        obj.SetActive(toggle.CurrentState != 2 || newly.Contains(id));
                    }
                }
                newly.Recycle();
            }
        public override void OnLoad(Harmony harmony)
        {
            base.OnLoad(harmony);
            PUtil.InitLibrary();
            new PLocalization().Register();
            new PPatchManager(harmony).RegisterPatchClass(typeof(MoreAchievementsPatches));
            new PVersionCheck().Register(this, new SteamVersionChecker());
            // Set hidden achievements
            var acAPI = new MoreAchievementsAPI();

            acAPI.AddAchievementInformation(AchievementStrings.HAVEIWONYET.ID, "", true);
            acAPI.AddAchievementInformation(AchievementStrings.ALLTHEDUPLICANTS.ID, "", true);
            acAPI.AddAchievementInformation(AchievementStrings.ISEEWHATYOUDIDTHERE.ID, "",
                                            true);
        }
Exemplo n.º 3
0
        public override void Initialize(Harmony plibInstance)
        {
            Instance = this;
            foreach (var achievementProvider in PRegistry.Instance.GetAllComponents(ID))
            {
                if (achievementProvider != null)
                {
                    var toAdd = achievementProvider.GetInstanceDataSerialized <ICollection <
                                                                                   AchievementInfo> >();
                    if (toAdd != null)
                    {
                        foreach (var achievement in toAdd)
                        {
                            allAchievements[achievement.ID] = achievement;
#if DEBUG
                            PUtil.LogDebug("Added data for achievement " + achievement.ID);
#endif
                        }
                    }
                }
            }
            plibInstance.Patch(typeof(RetiredColonyInfoScreen), "UpdateAchievementData",
                               postfix: PatchMethod(nameof(UpdateAchievementData_Postfix)));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initializes the achievement list, after the Db has been initialized.
        /// </summary>
        internal static void InitAchievements()
        {
            var db = Db.Get();

            AllAchievements = new AD[] {
                new AD("EmpireBuilder", "build_2500", new BuildNBuildings(AS.EMPIREBUILDER.
                                                                          QUANTITY)),
                new AD("JohnHenry", "dig_10k", new DigNTiles(AS.JOHNHENRY.QUANTITY)),
                new AD("TestOfTime", "reach_cycle1000", new CycleNumber(AS.TESTOFTIME.CYCLE)),
                new AD("ThinkingAhead", "thinking_ahead", new UseGeneShufflerNTimes(AS.
                                                                                    THINKINGAHEAD.QUANTITY)),
                new AD("ChutesAndLadders", "firepole_travel", new TravelXUsingTransitTubes(
                           NavType.Pole, AS.CHUTESANDLADDERS.DISTANCE)),
                new AD("ImGonnaBe", "im_gonna_be", new TravelXUsingTransitTubes(NavType.Floor,
                                                                                AS.IMGONNABE.DISTANCE)),
                new AD("SmallWorld", "small_world", new NumberOfDupes(AS.SMALLWORLD.QUANTITY)),
                new AD("YouMonster", "youmonster", new KillNCritters(AS.YOUMONSTER.QUANTITY)),
                new AD("BelongsInAMuseum", "all_artifacts", new CollectNArtifacts(28)),
                new AD("WholeNewWorlds", "rocket", new VisitAllPlanets()),
                new AD(AS.FINALBREATH.ID, "final_breath", new TriggerEvent(AS.FINALBREATH.ID)),
                new AD(AS.SAVINGMEEP.ID, "saving_meep", new TriggerEvent(AS.SAVINGMEEP.ID)),
                new AD("PowerOverwhelming", "power_overwhelm", new OverloadWire(Wire.
                                                                                WattageRating.Max50000)),
                new AD("IsItHotInHere", "isithot", new HeatBuildingToXKelvin(AS.ISITHOTINHERE.
                                                                             TEMPERATURE)),
                new AD(AS.WATCHTHEWORLDBURN.ID, "burn_gravitas", new TriggerEvent(AS.
                                                                                  WATCHTHEWORLDBURN.ID)),
                new AD("SafeSpace", "safe_space", new NoDeathsForNCycles(AS.SAFESPACE.CYCLES),
                       new CycleNumber(AS.SAFESPACE.CYCLES)),
                new AD("CritterSinger", "Animal_friends",
                       CritterTypeRequirement(HatchConfig.ID, HatchHardConfig.ID,
                                              HatchMetalConfig.ID, HatchVeggieConfig.ID),
                       CritterTypeRequirement(PacuConfig.ID, PacuTropicalConfig.ID,
                                              PacuCleanerConfig.ID),
                       CritterTypeRequirement(LightBugConfig.ID, LightBugBlueConfig.ID,
                                              LightBugOrangeConfig.ID, LightBugPinkConfig.ID, LightBugPurpleConfig.ID,
                                              LightBugCrystalConfig.ID, LightBugBlackConfig.ID),
                       CritterTypeRequirement(PuftConfig.ID, PuftOxyliteConfig.ID,
                                              PuftBleachstoneConfig.ID, PuftAlphaConfig.ID),
                       CritterTypeRequirement(DreckoConfig.ID, DreckoPlasticConfig.ID),
                       CritterTypeRequirement(OilFloaterConfig.ID, OilFloaterDecorConfig.ID,
                                              OilFloaterHighTempConfig.ID),
                       CritterTypeRequirement(MoleConfig.ID),
                       CritterTypeRequirement(MooConfig.ID),
                       CritterTypeRequirement(CrabConfig.ID),
                       CritterTypeRequirement(SquirrelConfig.ID)),
                new AD("MasterOfDisaster", "master_of_disaster",
                       new DeathFromCause(db.Deaths.Overheating.Id),
                       new DeathFromCause(db.Deaths.Slain.Id),
                       new DeathFromCause(db.Deaths.Suffocation.Id),
                       new DeathFromCause(db.Deaths.Starvation.Id)),
                new AD("ABalancedDiet", "balanced_diet",
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, FieldRationConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, MushBarConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, FriedMushBarConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, BasicPlantFoodConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, BasicPlantBarConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, PickledMealConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, PrickleFruitConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, GrilledPrickleFruitConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, SalsaConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, CookedEggConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, MeatConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, CookedMeatConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, FishMeatConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, CookedFishConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, SurfAndTurfConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, ColdWheatBreadConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, SpiceBreadConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, FruitCakeConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, MushroomConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, FriedMushroomConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, MushroomWrapConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, LettuceConfig.ID),
                       new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, BurgerConfig.ID)),
                new AD("JackOfAllTrades", "well_rounded", new ReachXAllAttributes(AS.
                                                                                  JACKOFALLTRADES.LEVEL)),
                new AD("DestroyerOfWorlds", "dig_20", new ReachXAttributeValue(db.Attributes.
                                                                               Digging.Id, AS.DESTROYEROFWORLDS.LEVEL)),
                new AD("SmoothOperator", "operate_20", new ReachXAttributeValue(db.Attributes.
                                                                                Machinery.Id, AS.SMOOTHOPERATOR.LEVEL)),
                new AD("Olympian", "athletics_20", new ReachXAttributeValue(db.Attributes.Athletics.
                                                                            Id, AS.OLYMPIAN.LEVEL)),
                new AD("AdaLovelace", "science_20", new ReachXAttributeValue(db.Attributes.
                                                                             Learning.Id, AS.ADALOVELACE.LEVEL)),
                new AD("MasterChef", "cook_20", new ReachXAttributeValue(db.Attributes.
                                                                         Cooking.Id, AS.MASTERCHEF.LEVEL)),
                new AD("MasterBuilder", "build_20", new ReachXAttributeValue(db.Attributes.
                                                                             Construction.Id, AS.MASTERBUILDER.LEVEL)),
                new AD("MountainMover", "athletics_20", new ReachXAttributeValue(db.Attributes.
                                                                                 Strength.Id, AS.MOUNTAINMOVER.LEVEL)),
                new AD("Cowboy", "ranch_20", new ReachXAttributeValue(db.Attributes.
                                                                      Ranching.Id, AS.COWBOY.LEVEL)),
                new AD("MotherEarth", "farm_20", new ReachXAttributeValue(db.Attributes.
                                                                          Botanist.Id, AS.MOTHEREARTH.LEVEL)),
                new AD("Michelangelo", "art_20", new ReachXAttributeValue(db.Attributes.
                                                                          Art.Id, AS.MICHELANGELO.LEVEL)),
                new AD("FirstDoNoHarm", "care_20", new ReachXAttributeValue(db.Attributes.
                                                                            Caring.Id, AS.FIRSTDONOHARM.LEVEL)),
                new AD("TotallyEcstatic", "ecstatic", new ReachXMoraleValue(AS.TOTALLYECSTATIC.
                                                                            MORALE)),
                new AD(AS.HAVEIWONYET.ID, "reach_cycle4000", new CycleNumber(AS.HAVEIWONYET.
                                                                             CYCLE)),
                new AD(AS.ALLTHEDUPLICANTS.ID, "dupes_100", new NumberOfDupes(100)),
                new AD(AS.ISEEWHATYOUDIDTHERE.ID, "cheat", new TriggerEvent(AS.
                                                                            ISEEWHATYOUDIDTHERE.ID)),
            };
            // Meltable props, but unfortunately the IDs are not constants
            POI_PROPS.Add("PropDesk");
            POI_PROPS.Add("PropElevator");
            POI_PROPS.Add("PropFacilityChair");
            POI_PROPS.Add("PropFacilityChairFlip");
            POI_PROPS.Add("PropFacilityChandelier");
            POI_PROPS.Add("PropFacilityCouch");
            POI_PROPS.Add("PropFacilityDesk");
            POI_PROPS.Add("PropFacilityDisplay");
            POI_PROPS.Add("PropFacilityDisplay2");
            POI_PROPS.Add("PropFacilityDisplay3");
            POI_PROPS.Add("PropFacilityGlobeDroors");
            POI_PROPS.Add("PropFacilityHangingLight");
            POI_PROPS.Add("PropFacilityPainting");
            POI_PROPS.Add("PropFacilityStatue");
            POI_PROPS.Add("PropFacilityTable");
            POI_PROPS.Add("PropFacilityWallDegree");
            POI_PROPS.Add("PropLight");
            POI_PROPS.Add("PropReceptionDesk");
            POI_PROPS.Add("PropTallPlant");
            // Set hidden achievements
            MoreAchievementsAPI.SetAchievementHidden(AS.HAVEIWONYET.ID);
            MoreAchievementsAPI.SetAchievementHidden(AS.ALLTHEDUPLICANTS.ID);
            MoreAchievementsAPI.SetAchievementHidden(AS.ISEEWHATYOUDIDTHERE.ID);
        }