Example #1
0
 private bool TryGetCeremonyTarget(Slate slate, out Pawn pawn, out Faction bestowingFaction)
 {
     slate.TryGet <Faction>("bestowingFaction", out bestowingFaction);
     if (slate.TryGet <Pawn>("titleHolder", out pawn) && pawn.Faction != null && pawn.Faction.IsPlayer)
     {
         if (bestowingFaction != null)
         {
             return(RoyalTitleUtility.ShouldGetBestowingCeremonyQuest(pawn, bestowingFaction));
         }
         return(RoyalTitleUtility.ShouldGetBestowingCeremonyQuest(pawn, out bestowingFaction));
     }
     pawn = null;
     foreach (Map map in Find.Maps)
     {
         if (!map.IsPlayerHome)
         {
             continue;
         }
         foreach (Pawn allPawn in map.mapPawns.AllPawns)
         {
             if (allPawn.Faction != null && allPawn.Faction.IsPlayer)
             {
                 if (bestowingFaction != null)
                 {
                     return(RoyalTitleUtility.ShouldGetBestowingCeremonyQuest(allPawn, bestowingFaction));
                 }
                 return(RoyalTitleUtility.ShouldGetBestowingCeremonyQuest(allPawn, out bestowingFaction));
             }
         }
     }
     bestowingFaction = null;
     return(false);
 }
Example #2
0
        private static int GetRoyalExpectations(Building_GuestBed bed, Pawn guest, Room room, out RoyalTitle title)
        {
            var royalExpectations = 0;

            title = guest.royalty?.HighestTitleWithBedroomRequirements();
            if (title != null)
            {
                if (room == null)
                {
                    royalExpectations -= 75;
                }
                else
                {
                    foreach (Building_Bed roomBeds in room.ContainedBeds)
                    {
                        if (roomBeds != bed && BedClaimedByStranger(roomBeds, guest))
                        {
                            royalExpectations -= 100;
                        }
                    }
                }

                if (RoyalTitleUtility.BedroomSatisfiesRequirements(room, title))
                {
                    royalExpectations += 100;
                }
            }

            return(royalExpectations);
        }
Example #3
0
        public override void PostExposeData(object obj)
        {
            if (Scribe.mode == LoadSaveMode.PostLoadInit)
            {
                int num = VersionControl.BuildFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion);
                Pawn_RoyaltyTracker pawn_RoyaltyTracker;
                if ((pawn_RoyaltyTracker = (obj as Pawn_RoyaltyTracker)) != null && num <= 2575)
                {
                    foreach (RoyalTitle item in pawn_RoyaltyTracker.AllTitlesForReading)
                    {
                        item.conceited = RoyalTitleUtility.ShouldBecomeConceitedOnNewTitle(pawn_RoyaltyTracker.pawn);
                    }
                }
                Pawn_NeedsTracker pawn_NeedsTracker;
                if ((pawn_NeedsTracker = (obj as Pawn_NeedsTracker)) != null)
                {
                    pawn_NeedsTracker.AllNeeds.RemoveAll((Need n) => n.def.defName == "Authority");
                }
            }
            Pawn pawn;

            if ((pawn = (obj as Pawn)) == null)
            {
                return;
            }
            if (pawn.abilities == null)
            {
                pawn.abilities = new Pawn_AbilityTracker(pawn);
            }
            if (pawn.health != null)
            {
                if (pawn.health.hediffSet.hediffs.RemoveAll((Hediff x) => x == null) != 0)
                {
                    Log.Error(pawn.ToStringSafe() + " had some null hediffs.");
                }
                Hediff hediff = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf.PsychicHangover);
                if (hediff != null)
                {
                    pawn.health.hediffSet.hediffs.Remove(hediff);
                }
                Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.WakeUpTolerance);
                if (firstHediffOfDef != null)
                {
                    pawn.health.hediffSet.hediffs.Remove(firstHediffOfDef);
                }
                Hediff firstHediffOfDef2 = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.GoJuiceTolerance);
                if (firstHediffOfDef2 != null)
                {
                    pawn.health.hediffSet.hediffs.Remove(firstHediffOfDef2);
                }
            }
        }
        private static string GetTitleTipString(Pawn pawn, Faction faction, RoyalTitle title, int favor)
        {
            RoyalTitleDef def = title.def;
            TaggedString  t   = "RoyalTitleTooltipHasTitle".Translate(pawn.Named("PAWN"), faction.Named("FACTION"), def.GetLabelCapFor(pawn).Named("TITLE"));

            t += "\n\n" + faction.def.royalFavorLabel.CapitalizeFirst() + ": " + favor;
            RoyalTitleDef nextTitle = def.GetNextTitle(faction);

            if (nextTitle != null)
            {
                t += "\n" + "RoyalTitleTooltipNextTitle".Translate() + ": " + nextTitle.GetLabelCapFor(pawn) + " (" + "RoyalTitleTooltipNextTitleFavorCost".Translate(nextTitle.favorCost.ToString(), faction.Named("FACTION")) + ")";
            }
            else
            {
                t += "\n" + "RoyalTitleTooltipFinalTitle".Translate();
            }
            if (title.def.canBeInherited)
            {
                Pawn heir = pawn.royalty.GetHeir(faction);
                if (heir != null)
                {
                    t += "\n\n" + "RoyalTitleTooltipInheritance".Translate(pawn.Named("PAWN"), heir.Named("HEIR"));
                    if (heir.Faction == null)
                    {
                        t += " " + "RoyalTitleTooltipHeirNoFaction".Translate(heir.Named("HEIR"));
                    }
                    else if (heir.Faction != faction)
                    {
                        t += " " + "RoyalTitleTooltipHeirDifferentFaction".Translate(heir.Named("HEIR"), heir.Faction.Named("FACTION"));
                    }
                }
                else
                {
                    t += "\n\n" + "RoyalTitleTooltipNoHeir".Translate(pawn.Named("PAWN"));
                }
            }
            else
            {
                t += "\n\n" + "LetterRoyalTitleCantBeInherited".Translate(title.def.Named("TITLE")).CapitalizeFirst() + " " + "LetterRoyalTitleNoHeir".Translate(pawn.Named("PAWN"));
            }
            t += "\n\n" + (title.conceited ? "RoyalTitleTooltipConceited" : "RoyalTitleTooltipNonConceited").Translate(pawn.Named("PAWN"));
            t += "\n\n" + RoyalTitleUtility.GetTitleProgressionInfo(faction, pawn);
            return((t + ("\n\n" + "ClickToLearnMore".Translate())).Resolve());
        }
Example #5
0
        public override void PostExposeData(object obj)
        {
            if (Scribe.mode == LoadSaveMode.PostLoadInit)
            {
                int num = VersionControl.BuildFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion);
                Pawn_RoyaltyTracker pawn_RoyaltyTracker;
                if ((pawn_RoyaltyTracker = obj as Pawn_RoyaltyTracker) != null && num <= 2575)
                {
                    foreach (RoyalTitle item in pawn_RoyaltyTracker.AllTitlesForReading)
                    {
                        item.conceited = RoyalTitleUtility.ShouldBecomeConceitedOnNewTitle(pawn_RoyaltyTracker.pawn);
                    }
                }
                Pawn_NeedsTracker pawn_NeedsTracker;
                if ((pawn_NeedsTracker = obj as Pawn_NeedsTracker) != null)
                {
                    pawn_NeedsTracker.AllNeeds.RemoveAll((Need n) => n.def.defName == "Authority");
                }
            }
            Pawn pawn;
            Map  map;

            if ((pawn = obj as Pawn) != null)
            {
                if (pawn.abilities == null)
                {
                    pawn.abilities = new Pawn_AbilityTracker(pawn);
                }
                if (pawn.health != null)
                {
                    if (pawn.health.hediffSet.hediffs.RemoveAll((Hediff x) => x == null) != 0)
                    {
                        Log.Error(pawn.ToStringSafe() + " had some null hediffs.");
                    }
                    Hediff hediff = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf.PsychicHangover);
                    if (hediff != null)
                    {
                        pawn.health.hediffSet.hediffs.Remove(hediff);
                    }
                    Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.WakeUpTolerance);
                    if (firstHediffOfDef != null)
                    {
                        pawn.health.hediffSet.hediffs.Remove(firstHediffOfDef);
                    }
                    Hediff firstHediffOfDef2 = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.GoJuiceTolerance);
                    if (firstHediffOfDef2 != null)
                    {
                        pawn.health.hediffSet.hediffs.Remove(firstHediffOfDef2);
                    }
                }
                if (pawn.equipment == null || pawn.apparel == null || pawn.inventory == null)
                {
                    return;
                }
                List <ThingWithComps> list = null;
                for (int i = 0; i < pawn.equipment.AllEquipmentListForReading.Count; i++)
                {
                    ThingWithComps thingWithComps = pawn.equipment.AllEquipmentListForReading[i];
                    if (thingWithComps.def.defName == "OrbitalTargeterBombardment" || thingWithComps.def.defName == "OrbitalTargeterPowerBeam" || thingWithComps.def.defName == "OrbitalTargeterMechCluster" || thingWithComps.def.defName == "TornadoGenerator")
                    {
                        list = list ?? new List <ThingWithComps>();
                        list.Add(thingWithComps);
                    }
                }
                if (list == null)
                {
                    return;
                }
                foreach (Apparel item2 in list)
                {
                    pawn.equipment.Remove(item2);
                    ResetVerbs(item2);
                    if (pawn.apparel.CanWearWithoutDroppingAnything(item2.def))
                    {
                        pawn.apparel.Wear(item2);
                    }
                    else
                    {
                        pawn.inventory.innerContainer.TryAdd(item2);
                    }
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars && (map = obj as Map) != null && map.temporaryThingDrawer == null)
            {
                map.temporaryThingDrawer = new TemporaryThingDrawer();
            }
        }
Example #6
0
        private static void DoPlayLoad()
        {
            DeepProfiler.Start("GraphicDatabase.Clear()");
            try
            {
                GraphicDatabase.Clear();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Load all active mods.");
            try
            {
                LoadedModManager.LoadAllActiveMods();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Load language metadata.");
            try
            {
                LanguageDatabase.InitAllMetadata();
            }
            finally
            {
                DeepProfiler.End();
            }
            LongEventHandler.SetCurrentEventText("LoadingDefs".Translate());
            DeepProfiler.Start("Copy all Defs from mods to global databases.");
            try
            {
                foreach (Type item in typeof(Def).AllSubclasses())
                {
                    GenGeneric.InvokeStaticMethodOnGenericType(typeof(DefDatabase <>), item, "AddAllInMods");
                }
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Resolve cross-references between non-implied Defs.");
            try
            {
                DirectXmlCrossRefLoader.ResolveAllWantedCrossReferences(FailMode.Silent);
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Rebind defs (early).");
            try
            {
                DefOfHelper.RebindAllDefOfs(earlyTryMode: true);
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("TKeySystem.BuildMappings()");
            try
            {
                TKeySystem.BuildMappings();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Inject selected language data into game data (early pass).");
            try
            {
                LanguageDatabase.activeLanguage.InjectIntoData_BeforeImpliedDefs();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Generate implied Defs (pre-resolve).");
            try
            {
                DefGenerator.GenerateImpliedDefs_PreResolve();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Resolve cross-references between Defs made by the implied defs.");
            try
            {
                DirectXmlCrossRefLoader.ResolveAllWantedCrossReferences(FailMode.LogErrors);
            }
            finally
            {
                DirectXmlCrossRefLoader.Clear();
                DeepProfiler.End();
            }
            DeepProfiler.Start("Rebind DefOfs (final).");
            try
            {
                DefOfHelper.RebindAllDefOfs(earlyTryMode: false);
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Other def binding, resetting and global operations (pre-resolve).");
            try
            {
                PlayerKnowledgeDatabase.ReloadAndRebind();
                LessonAutoActivator.Reset();
                CostListCalculator.Reset();
                Pawn.ResetStaticData();
                PawnApparelGenerator.Reset();
                RestUtility.Reset();
                ThoughtUtility.Reset();
                ThinkTreeKeyAssigner.Reset();
                ThingCategoryNodeDatabase.FinalizeInit();
                TrainableUtility.Reset();
                HaulAIUtility.Reset();
                GenConstruct.Reset();
                MedicalCareUtility.Reset();
                InspectPaneUtility.Reset();
                GraphicDatabaseHeadRecords.Reset();
                DateReadout.Reset();
                ResearchProjectDef.GenerateNonOverlappingCoordinates();
                BaseGen.Reset();
                ResourceCounter.ResetDefs();
                ApparelProperties.ResetStaticData();
                WildPlantSpawner.ResetStaticData();
                PawnGenerator.Reset();
                TunnelHiveSpawner.ResetStaticData();
                Hive.ResetStaticData();
                ExpectationsUtility.Reset();
                WealthWatcher.ResetStaticData();
                SkillUI.Reset();
                QuestNode_GetThingPlayerCanProduce.ResetStaticData();
                Pawn_PsychicEntropyTracker.ResetStaticData();
                ColoredText.ResetStaticData();
                QuestNode_GetRandomNegativeGameCondition.ResetStaticData();
                RoyalTitleUtility.ResetStaticData();
                RewardsGenerator.ResetStaticData();
                WorkGiver_FillFermentingBarrel.ResetStaticData();
                WorkGiver_DoBill.ResetStaticData();
                WorkGiver_InteractAnimal.ResetStaticData();
                WorkGiver_Warden_DoExecution.ResetStaticData();
                WorkGiver_GrowerSow.ResetStaticData();
                WorkGiver_Miner.ResetStaticData();
                WorkGiver_FixBrokenDownBuilding.ResetStaticData();
                WorkGiver_ConstructDeliverResources.ResetStaticData();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Resolve references.");
            try
            {
                DeepProfiler.Start("ThingCategoryDef resolver");
                try
                {
                    DefDatabase <ThingCategoryDef> .ResolveAllReferences();
                }
                finally
                {
                    DeepProfiler.End();
                }
                DeepProfiler.Start("RecipeDef resolver");
                try
                {
                    DeepProfiler.enabled = false;
                    DefDatabase <RecipeDef> .ResolveAllReferences(onlyExactlyMyType : true, parallel : true);

                    DeepProfiler.enabled = true;
                }
                finally
                {
                    DeepProfiler.End();
                }
                DeepProfiler.Start("Static resolver calls");
                try
                {
                    foreach (Type item2 in typeof(Def).AllSubclasses())
                    {
                        if (!(item2 == typeof(ThingDef)) && !(item2 == typeof(ThingCategoryDef)) && !(item2 == typeof(RecipeDef)))
                        {
                            GenGeneric.InvokeStaticMethodOnGenericType(typeof(DefDatabase <>), item2, "ResolveAllReferences", true, false);
                        }
                    }
                }
                finally
                {
                    DeepProfiler.End();
                }
                DeepProfiler.Start("ThingDef resolver");
                try
                {
                    DefDatabase <ThingDef> .ResolveAllReferences();
                }
                finally
                {
                    DeepProfiler.End();
                }
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Generate implied Defs (post-resolve).");
            try
            {
                DefGenerator.GenerateImpliedDefs_PostResolve();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Other def binding, resetting and global operations (post-resolve).");
            try
            {
                PawnWeaponGenerator.Reset();
                BuildingProperties.FinalizeInit();
                ThingSetMakerUtility.Reset();
            }
            finally
            {
                DeepProfiler.End();
            }
            if (Prefs.DevMode)
            {
                DeepProfiler.Start("Error check all defs.");
                try
                {
                    foreach (Type item3 in typeof(Def).AllSubclasses())
                    {
                        GenGeneric.InvokeStaticMethodOnGenericType(typeof(DefDatabase <>), item3, "ErrorCheckAllDefs");
                    }
                }
                finally
                {
                    DeepProfiler.End();
                }
            }
            LongEventHandler.SetCurrentEventText("Initializing".Translate());
            DeepProfiler.Start("Load keyboard preferences.");
            try
            {
                KeyPrefs.Init();
            }
            finally
            {
                DeepProfiler.End();
            }
            DeepProfiler.Start("Short hash giving.");
            try
            {
                ShortHashGiver.GiveAllShortHashes();
            }
            finally
            {
                DeepProfiler.End();
            }
            LongEventHandler.ExecuteWhenFinished(delegate
            {
                DeepProfiler.Start("Load backstories.");
                try
                {
                    BackstoryDatabase.ReloadAllBackstories();
                }
                finally
                {
                    DeepProfiler.End();
                }
            });
            LongEventHandler.ExecuteWhenFinished(delegate
            {
                DeepProfiler.Start("Inject selected language data into game data.");
                try
                {
                    LanguageDatabase.activeLanguage.InjectIntoData_AfterImpliedDefs();
                    GenLabel.ClearCache();
                }
                finally
                {
                    DeepProfiler.End();
                }
            });
            LongEventHandler.ExecuteWhenFinished(delegate
            {
                DeepProfiler.Start("Static constructor calls");
                try
                {
                    StaticConstructorOnStartupUtility.CallAll();
                    if (Prefs.DevMode)
                    {
                        StaticConstructorOnStartupUtility.ReportProbablyMissingAttributes();
                    }
                }
                finally
                {
                    DeepProfiler.End();
                }
                DeepProfiler.Start("Garbage Collection");
                try
                {
                    AbstractFilesystem.ClearAllCache();
                    GC.Collect(int.MaxValue, GCCollectionMode.Forced);
                }
                finally
                {
                    DeepProfiler.End();
                }
            });
        }