Esempio n. 1
0
            public static void Prefix(string steamAchievementId, ref List <ColonyAchievementRequirement> requirementChecklist)
            {
                if (!Settings.Instance.Agricultural.IncludeRoom)
                {
                    return;
                }
                if (steamAchievementId != "VARIETY_OF_ROOMS")
                {
                    return;
                }

                ColonyAchievementRequirement delete = null;

                foreach (var req in requirementChecklist)
                {
                    RoomType roomType = Traverse.Create(req).Field("roomType").GetValue <RoomType>();
                    if (roomType.Id == "Farm")
                    {
                        delete = req;
                    }
                }
                if (delete != null)
                {
                    requirementChecklist.Remove(delete);
                    Debug.Log("RoomsExpanded: VARIETY_OF_ROOMS - removed Farm requirement");
                }
            }
    private void ShowEngeryWithoutUsing(bool succeed, ColonyAchievementRequirement req)
    {
        ProduceXEngeryWithoutUsingYList produceXEngeryWithoutUsingYList = req as ProduceXEngeryWithoutUsingYList;

        if (req != null)
        {
            HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
            float productionAmount = produceXEngeryWithoutUsingYList.GetProductionAmount(succeed);
            SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.GENERATE_POWER, GameUtil.GetFormattedRoundedJoules(productionAmount), GameUtil.GetFormattedRoundedJoules(produceXEngeryWithoutUsingYList.amountToProduce * 1000f)), nextRequirementWidget);
            if (succeed)
            {
                SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
            }
            else
            {
                ShowIcon(false, nextRequirementWidget);
            }
            foreach (Tag disallowedBuilding in produceXEngeryWithoutUsingYList.disallowedBuildings)
            {
                nextRequirementWidget = GetNextRequirementWidget();
                if (Game.Instance.savedInfo.powerCreatedbyGeneratorType.ContainsKey(disallowedBuilding))
                {
                    SetIcon(statusFailureIcon, Color.red, nextRequirementWidget);
                }
                else
                {
                    SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
                }
                BuildingDef buildingDef = Assets.GetBuildingDef(disallowedBuilding.Name);
                SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.NO_BUILDING, buildingDef.Name), nextRequirementWidget);
            }
        }
    }
    private void ShowArmsOutPeformingDupesRequirement(bool succeed, ColonyAchievementRequirement req)
    {
        DupesVsSolidTransferArmFetch dupesVsSolidTransferArmFetch = req as DupesVsSolidTransferArmFetch;

        if (dupesVsSolidTransferArmFetch != null)
        {
            HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
            if (succeed)
            {
                SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
            }
            SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.ARM_PERFORMANCE, (!succeed) ? dupesVsSolidTransferArmFetch.currentCycleCount : dupesVsSolidTransferArmFetch.numCycles, dupesVsSolidTransferArmFetch.numCycles), nextRequirementWidget);
            if (!succeed)
            {
                Dictionary <int, int> fetchDupeChoreDeliveries      = SaveGame.Instance.GetComponent <ColonyAchievementTracker>().fetchDupeChoreDeliveries;
                Dictionary <int, int> fetchAutomatedChoreDeliveries = SaveGame.Instance.GetComponent <ColonyAchievementTracker>().fetchAutomatedChoreDeliveries;
                int value = 0;
                fetchDupeChoreDeliveries.TryGetValue(GameClock.Instance.GetCycle(), out value);
                int value2 = 0;
                fetchAutomatedChoreDeliveries.TryGetValue(GameClock.Instance.GetCycle(), out value2);
                nextRequirementWidget = GetNextRequirementWidget();
                if ((float)value < (float)value2 * dupesVsSolidTransferArmFetch.percentage)
                {
                    SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
                }
                else
                {
                    ShowIcon(false, nextRequirementWidget);
                }
                SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.ARM_VS_DUPE_FETCHES, "SolidTransferArm", value2, value), nextRequirementWidget);
            }
        }
    }
    private void ShowDupesInExoSuitsRequirement(bool succeed, ColonyAchievementRequirement req)
    {
        DupesCompleteChoreInExoSuitForCycles dupesCompleteChoreInExoSuitForCycles = req as DupesCompleteChoreInExoSuitForCycles;

        if (dupesCompleteChoreInExoSuitForCycles != null)
        {
            HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
            if (succeed)
            {
                SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
            }
            else
            {
                ShowIcon(false, nextRequirementWidget);
            }
            SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.EXOSUIT_CYCLES, (!succeed) ? dupesCompleteChoreInExoSuitForCycles.currentCycleStreak : dupesCompleteChoreInExoSuitForCycles.numCycles, dupesCompleteChoreInExoSuitForCycles.numCycles), nextRequirementWidget);
            if (!succeed)
            {
                nextRequirementWidget = GetNextRequirementWidget();
                int num = dupesCompleteChoreInExoSuitForCycles.GetNumberOfDupesForCycle(GameClock.Instance.GetCycle());
                if (num >= Components.LiveMinionIdentities.Count)
                {
                    num = Components.LiveMinionIdentities.Count;
                    SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
                }
                SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.EXOSUIT_THIS_CYCLE, num, Components.LiveMinionIdentities.Count), nextRequirementWidget);
            }
        }
    }
 public void ShowProgress(ColonyAchievementStatus achievement)
 {
     if (!((UnityEngine.Object)progressParent == (UnityEngine.Object)null))
     {
         numRequirementsDisplayed = 0;
         for (int i = 0; i < achievement.Requirements.Count; i++)
         {
             ColonyAchievementRequirement colonyAchievementRequirement = achievement.Requirements[i];
             if (colonyAchievementRequirement is CritterTypesWithTraits)
             {
                 ShowCritterChecklist(colonyAchievementRequirement);
             }
             else if (colonyAchievementRequirement is DupesCompleteChoreInExoSuitForCycles)
             {
                 ShowDupesInExoSuitsRequirement(achievement.success, colonyAchievementRequirement);
             }
             else if (colonyAchievementRequirement is DupesVsSolidTransferArmFetch)
             {
                 ShowArmsOutPeformingDupesRequirement(achievement.success, colonyAchievementRequirement);
             }
             else if (colonyAchievementRequirement is ProduceXEngeryWithoutUsingYList)
             {
                 ShowEngeryWithoutUsing(achievement.success, colonyAchievementRequirement);
             }
             else if (colonyAchievementRequirement is MinimumMorale)
             {
                 ShowMinimumMoraleRequirement(achievement.success, colonyAchievementRequirement);
             }
             else
             {
                 ShowRequirement(achievement.success, colonyAchievementRequirement);
             }
         }
     }
 }
    private void ShowMinimumMoraleRequirement(bool success, ColonyAchievementRequirement req)
    {
        MinimumMorale minimumMorale = req as MinimumMorale;

        if (minimumMorale != null)
        {
            if (success)
            {
                ShowRequirement(success, req);
            }
            else
            {
                IEnumerator enumerator = Components.MinionAssignablesProxy.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        MinionAssignablesProxy minionAssignablesProxy = (MinionAssignablesProxy)enumerator.Current;
                        GameObject             targetGameObject       = minionAssignablesProxy.GetTargetGameObject();
                        if ((UnityEngine.Object)targetGameObject != (UnityEngine.Object)null && !targetGameObject.HasTag(GameTags.Dead))
                        {
                            AttributeInstance attributeInstance = Db.Get().Attributes.QualityOfLife.Lookup(targetGameObject.GetComponent <MinionModifiers>());
                            if (attributeInstance != null)
                            {
                                HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
                                if (attributeInstance.GetTotalValue() >= (float)minimumMorale.minimumMorale)
                                {
                                    SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
                                }
                                else
                                {
                                    ShowIcon(false, nextRequirementWidget);
                                }
                                SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.MORALE, targetGameObject.GetProperName(), attributeInstance.GetTotalDisplayValue()), nextRequirementWidget);
                            }
                        }
                    }
                }
                finally
                {
                    IDisposable disposable;
                    if ((disposable = (enumerator as IDisposable)) != null)
                    {
                        disposable.Dispose();
                    }
                }
            }
        }
    }
    public void Deserialize(IReader reader)
    {
        success = (reader.ReadByte() != 0);
        failed  = (reader.ReadByte() != 0);
        int num = reader.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            string typeName = reader.ReadKleiString();
            Type   type     = Type.GetType(typeName);
            if (type != null)
            {
                ColonyAchievementRequirement colonyAchievementRequirement = (ColonyAchievementRequirement)FormatterServices.GetUninitializedObject(type);
                colonyAchievementRequirement.Deserialize(reader);
                requirements.Add(colonyAchievementRequirement);
            }
        }
    }
    private void ShowRequirement(bool succeed, ColonyAchievementRequirement req)
    {
        HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
        bool flag  = req.Success() || succeed;
        bool flag2 = req.Fail();

        if (flag && !flag2)
        {
            SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
        }
        else if (flag2)
        {
            SetIcon(statusFailureIcon, Color.red, nextRequirementWidget);
        }
        else
        {
            ShowIcon(false, nextRequirementWidget);
        }
        SetDescription(req.GetProgress(flag), nextRequirementWidget);
    }
    private void ShowCritterChecklist(ColonyAchievementRequirement req)
    {
        CritterTypesWithTraits critterTypesWithTraits = req as CritterTypesWithTraits;

        if (req != null)
        {
            foreach (KeyValuePair <Tag, bool> item in critterTypesWithTraits.critterTypesToCheck)
            {
                HierarchyReferences nextRequirementWidget = GetNextRequirementWidget();
                if (item.Value)
                {
                    SetIcon(statusSuccessIcon, Color.green, nextRequirementWidget);
                }
                else
                {
                    ShowIcon(false, nextRequirementWidget);
                }
                SetDescription(string.Format(COLONY_ACHIEVEMENTS.MISC_REQUIREMENTS.STATUS.TAME_A_CRITTER, item.Key.Name.ProperName()), nextRequirementWidget);
            }
        }
    }
Esempio n. 10
0
        /// <summary>
        /// Initializes the achievement list, after the Db has been initialized.
        /// </summary>
        internal static void InitAchievements()
        {
            var db = Db.Get();
            var dietRequirements = new ColonyAchievementRequirement[] {
                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)
            };

            // If in DLC, require Grubfruit, Spindly Grubfruit, Roast Grubfruit Nut,
            // Grubfruit Preserve, and Mixed Berry Pie
            if (DlcManager.IsExpansion1Active())
            {
                var dlcDietRequirements = new ColonyAchievementRequirement[] {
                    new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, WormBasicFruitConfig.ID),
                    new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, WormBasicFoodConfig.ID),
                    new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, WormSuperFruitConfig.ID),
                    new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, WormSuperFoodConfig.ID),
                    new EatXCaloriesOfFood(AS.ABALANCEDDIET.KCAL, BerryPieConfig.ID),
                };
                int n1 = dietRequirements.Length, n2 = dlcDietRequirements.Length;
                var temp = new ColonyAchievementRequirement[n1 + n2];
                Array.Copy(dietRequirements, temp, n1);
                Array.Copy(dlcDietRequirements, 0, temp, n1, n2);
                dietRequirements = temp;
            }
            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", dietRequirements),
                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("PropGravitasCeilingRobot");
            POI_PROPS.Add("PropGravitasDecorativeWindow");
            POI_PROPS.Add("PropGravitasDisplay4");
            POI_PROPS.Add("PropGravitasFloorRobot");
            POI_PROPS.Add("PropGravitasHandScanner");
            POI_PROPS.Add("PropGravitasJar1");
            POI_PROPS.Add("PropGravitasJar2");
            POI_PROPS.Add("PropGravitasLabTable");
            POI_PROPS.Add("PropGravitasLabWindow");
            POI_PROPS.Add("PropGravitasLabWindowHorizontal");
            POI_PROPS.Add("PropGravitasRobitcTable");
            POI_PROPS.Add("PropGravitasShelf");
            POI_PROPS.Add("PropLight");
            POI_PROPS.Add("PropReceptionDesk");
            POI_PROPS.Add("PropSkeleton");
            POI_PROPS.Add("PropSurfaceSatellite1");
            POI_PROPS.Add("PropSurfaceSatellite2");
            POI_PROPS.Add("PropSurfaceSatellite3");
            POI_PROPS.Add("PropTable");
            POI_PROPS.Add("PropTallPlant");
        }