예제 #1
0
 public override TaggedString GetExplanation()
 {
     return(defaultExplanation + "\n" + Targets.Select(delegate(Pawn t)
     {
         RoyalTitle royalTitle = t.royalty.HighestTitleWithBedroomRequirements();
         RoyalTitleDef royalTitleDef = (royalTitle.RoomRequirementGracePeriodActive(t) ? royalTitle.def.GetPreviousTitle(royalTitle.faction) : royalTitle.def);
         string[] array = t.royalty.GetUnmetBedroomRequirements(includeOnGracePeriod: false).ToArray();
         string[] array2 = t.royalty.GetUnmetBedroomRequirements(includeOnGracePeriod: true, onlyOnGracePeriod: true).ToArray();
         bool flag = royalTitleDef != null && array.Length != 0;
         StringBuilder stringBuilder = new StringBuilder();
         if (flag)
         {
             stringBuilder.Append(t.LabelShort + " (" + royalTitleDef.GetLabelFor(t.gender) + "):\n" + array.ToLineList("- "));
         }
         if (array2.Length != 0)
         {
             if (flag)
             {
                 stringBuilder.Append("\n\n");
             }
             stringBuilder.Append(t.LabelShort + " (" + royalTitle.def.GetLabelFor(t.gender) + ", " + "RoomRequirementGracePeriodDesc".Translate(royalTitle.RoomRequirementGracePeriodDaysLeft.ToString("0.0")) + ")" + ":\n" + array2.ToLineList("- "));
         }
         return stringBuilder.ToString();
     }).ToLineList("\n"));
 }
예제 #2
0
        public static void DrawRecordsCard(Rect rect, Pawn pawn)
        {
            if (!ModLister.RoyaltyInstalled)
            {
                Log.ErrorOnce("Permits are a Royalty-specific game system. If you want to use this code please check ModLister.RoyaltyInstalled before calling it. See rules on the Ludeon forum for more info.", 43244);
                return;
            }
            rect.yMax -= 4f;
            if (ShowSwitchFactionButton)
            {
                Rect rect2 = new Rect(rect.x, rect.y, 32f, 32f);
                if (Widgets.ButtonImage(rect2, SwitchFactionIcon))
                {
                    List <FloatMenuOption> list = new List <FloatMenuOption>();
                    foreach (Faction item in Find.FactionManager.AllFactionsVisibleInViewOrder)
                    {
                        if (!item.IsPlayer && !item.def.permanentEnemy)
                        {
                            Faction localFaction = item;
                            list.Add(new FloatMenuOption(localFaction.Name, delegate
                            {
                                selectedFaction = localFaction;
                                selectedPermit  = null;
                            }, localFaction.def.FactionIcon, localFaction.Color));
                        }
                    }
                    Find.WindowStack.Add(new FloatMenu(list));
                }
                TooltipHandler.TipRegion(rect2, "SwitchFaction_Desc".Translate());
            }
            if (selectedFaction.def.HasRoyalTitles)
            {
                string label = "ReturnAllPermits".Translate();
                Rect   rect3 = new Rect(rect.xMax - 180f, rect.y - 4f, 180f, 51f);
                int    num   = TotalReturnPermitsCost(pawn);
                if (Widgets.ButtonText(rect3, label))
                {
                    if (!pawn.royalty.PermitsFromFaction(selectedFaction).Any())
                    {
                        Messages.Message("NoPermitsToReturn".Translate(pawn.Named("PAWN")), new LookTargets(pawn), MessageTypeDefOf.RejectInput, historical: false);
                    }
                    else if (pawn.royalty.GetFavor(selectedFaction) < num)
                    {
                        Messages.Message("NotEnoughFavor".Translate(num.Named("FAVORCOST"), selectedFaction.def.royalFavorLabel.Named("FAVOR"), pawn.Named("PAWN"), pawn.royalty.GetFavor(selectedFaction).Named("CURFAVOR")), MessageTypeDefOf.RejectInput);
                    }
                    else
                    {
                        string str = "ReturnAllPermits_Confirm".Translate(8.Named("BASEFAVORCOST"), num.Named("FAVORCOST"), selectedFaction.def.royalFavorLabel.Named("FAVOR"), selectedFaction.Named("FACTION"));
                        Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation(str, delegate
                        {
                            pawn.royalty.RefundPermits(8, selectedFaction);
                        }, destructive: true));
                    }
                }
                TooltipHandler.TipRegion(rect3, "ReturnAllPermits_Desc".Translate(8.Named("BASEFAVORCOST"), num.Named("FAVORCOST"), selectedFaction.def.royalFavorLabel.Named("FAVOR")));
            }
            RoyalTitleDef currentTitle = pawn.royalty.GetCurrentTitle(selectedFaction);
            Rect          rect4        = new Rect(rect.xMax - 360f - 4f, rect.y - 4f, 360f, 55f);
            string        text         = (string)("CurrentTitle".Translate() + ": " + ((currentTitle != null) ? currentTitle.GetLabelFor(pawn).CapitalizeFirst() : ((string)"None".Translate())) + "\n" + "UnusedPermits".Translate() + ": ") + pawn.royalty.GetPermitPoints(selectedFaction);

            if (!selectedFaction.def.royalFavorLabel.NullOrEmpty())
            {
                text = text + "\n" + selectedFaction.def.royalFavorLabel.CapitalizeFirst() + ": " + pawn.royalty.GetFavor(selectedFaction);
            }
            Widgets.Label(rect4, text);
            rect.yMin += 55f;
            Rect rect5 = new Rect(rect);

            rect5.width *= 0.33f;
            DoLeftRect(rect5, pawn);
            Rect rect6 = new Rect(rect);

            rect6.xMin = rect5.xMax + 10f;
            DoRightRect(rect6, pawn);
        }
예제 #3
0
        public static string BuildDifferenceExplanationText(RoyalTitleDef currentTitle, RoyalTitleDef newTitle, Faction faction, Pawn pawn)
        {
            StringBuilder   stringBuilder = new StringBuilder();
            bool            flag          = ShouldBecomeConceitedOnNewTitle(pawn);
            List <WorkTags> list          = pawn.story.DisabledWorkTagsBackstoryAndTraits.GetAllSelectedItems <WorkTags>().ToList();
            List <WorkTags> obj           = ((newTitle == null) ? new List <WorkTags>() : newTitle.disabledWorkTags.GetAllSelectedItems <WorkTags>().ToList());
            List <WorkTags> list2         = new List <WorkTags>();

            foreach (WorkTags item in obj)
            {
                if (!list.Contains(item))
                {
                    list2.Add(item);
                }
            }
            int num = ((newTitle != null) ? faction.def.RoyalTitlesAwardableInSeniorityOrderForReading.IndexOf(newTitle) : (-1));

            if (newTitle != null && flag)
            {
                stringBuilder.AppendLine("LetterRoyalTitleConceitedTrait".Translate(pawn.Named("PAWN"), (from t in GetConceitedTraits(pawn)
                                                                                                         select t.Label).ToCommaList(useAnd: true)));
                stringBuilder.AppendLine();
                if (newTitle.minExpectation != null)
                {
                    stringBuilder.AppendLine("LetterRoyalTitleExpectation".Translate(pawn.Named("PAWN"), newTitle.minExpectation.label).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
            }
            if (newTitle != null)
            {
                if (newTitle.canBeInherited)
                {
                    Pawn         heir         = pawn.royalty.GetHeir(faction);
                    TaggedString taggedString = ((heir != null) ? "LetterRoyalTitleHeir".Translate(pawn.Named("PAWN"), heir.Named("HEIR")) : "LetterRoyalTitleNoHeir".Translate(pawn.Named("PAWN")));
                    stringBuilder.Append(taggedString);
                    if (heir != null && heir.Faction != Faction.OfPlayer)
                    {
                        stringBuilder.Append(" " + "LetterRoyalTitleHeirFactionWarning".Translate(heir.Named("PAWN"), faction.Named("FACTION")));
                    }
                    stringBuilder.AppendLine(" " + "LetterRoyalTitleChangingHeir".Translate(faction.Named("FACTION")));
                }
                else
                {
                    stringBuilder.Append("LetterRoyalTitleCantBeInherited".Translate(newTitle.Named("TITLE")).CapitalizeFirst());
                    stringBuilder.Append(" " + "LetterRoyalTitleNoHeir".Translate(pawn.Named("PAWN")));
                    stringBuilder.AppendLine();
                }
                stringBuilder.AppendLine();
                if (newTitle.permitPointsAwarded > 0 && pawn.royalty.NewHighestTitle(faction, newTitle))
                {
                    stringBuilder.AppendLine("PermitPointsAwarded".Translate(newTitle.permitPointsAwarded));
                    stringBuilder.AppendLine();
                }
            }
            if (flag && list2.Count > 0)
            {
                stringBuilder.AppendLine("LetterRoyalTitleDisabledWorkTag".Translate(pawn.Named("PAWN"), (from t in list2
                                                                                                          orderby FirstTitleDisablingWorkTags(t).seniority
                                                                                                          select $"{t.LabelTranslated()} ({FirstTitleDisablingWorkTags(t).GetLabelFor(pawn)})").ToLineList("- ")).CapitalizeFirst());
                stringBuilder.AppendLine();
            }
            if (newTitle != null)
            {
                if ((int)newTitle.requiredMinimumApparelQuality > 0)
                {
                    stringBuilder.AppendLine("LetterRoyalTitleApparelQualityRequirement".Translate(pawn.Named("PAWN"), newTitle.requiredMinimumApparelQuality.GetLabel().ToLower()).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
                if (newTitle.requiredApparel != null && newTitle.requiredApparel.Count > 0)
                {
                    stringBuilder.AppendLine("LetterRoyalTitleApparelRequirement".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                    foreach (RoyalTitleDef.ApparelRequirement item2 in newTitle.requiredApparel)
                    {
                        int j = 0;
                        stringBuilder.Append("- ");
                        stringBuilder.AppendLine(string.Join(", ", item2.AllRequiredApparelForPawn(pawn, ignoreGender : false, includeWorn : true).Select(delegate(ThingDef a)
                        {
                            string result = ((j == 0) ? a.LabelCap.Resolve() : a.label);
                            j++;
                            return(result);
                        }).ToArray()));
                    }
                    stringBuilder.AppendLine("- " + "ApparelRequirementAnyPrestigeArmor".Translate());
                    stringBuilder.AppendLine("- " + "ApparelRequirementAnyPsycasterApparel".Translate());
                    stringBuilder.AppendLine();
                }
                if (!newTitle.throneRoomRequirements.NullOrEmpty())
                {
                    stringBuilder.AppendLine("LetterRoyalTitleThroneroomRequirements".Translate(pawn.Named("PAWN"), "\n" + newTitle.throneRoomRequirements.Select((RoomRequirement r) => r.LabelCap()).ToLineList("- ")).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
                if (!newTitle.GetBedroomRequirements(pawn).EnumerableNullOrEmpty())
                {
                    stringBuilder.AppendLine("LetterRoyalTitleBedroomRequirements".Translate(pawn.Named("PAWN"), "\n" + (from r in newTitle.GetBedroomRequirements(pawn)
                                                                                                                         select r.LabelCap()).ToLineList("- ")).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
                if (flag && newTitle.foodRequirement.Defined && newTitle.SatisfyingMeals().Any() && (pawn.story == null || !pawn.story.traits.HasTrait(TraitDefOf.Ascetic)))
                {
                    stringBuilder.AppendLine("LetterRoyalTitleFoodRequirements".Translate(pawn.Named("PAWN"), "\n" + (from m in newTitle.SatisfyingMeals(includeDrugs: false)
                                                                                                                      select m.LabelCap.Resolve()).ToLineList("- ")).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
            }
            FindLostAndGainedPermits(currentTitle, newTitle, out var _, out var lostPermits);
            if (newTitle != null && newTitle.permits != null)
            {
                stringBuilder.AppendLine("LetterRoyalTitlePermits".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                foreach (RoyalTitlePermitDef item3 in newTitle.permits.OrderBy((RoyalTitlePermitDef p) => FirstTitleWithPermit(p)?.seniority))
                {
                    RoyalTitleDef royalTitleDef = FirstTitleWithPermit(item3);
                    if (royalTitleDef != null)
                    {
                        stringBuilder.AppendLine("- " + item3.LabelCap + " (" + royalTitleDef.GetLabelFor(pawn) + ")");
                    }
                }
                stringBuilder.AppendLine();
            }
            if (lostPermits.Count > 0)
            {
                stringBuilder.AppendLine("LetterRoyalTitleLostPermits".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                foreach (RoyalTitlePermitDef item4 in lostPermits)
                {
                    stringBuilder.AppendLine("- " + item4.LabelCap);
                }
                stringBuilder.AppendLine();
            }
            if (newTitle != null)
            {
                if (newTitle.grantedAbilities.Contains(AbilityDefOf.Speech) && (currentTitle == null || !currentTitle.grantedAbilities.Contains(AbilityDefOf.Speech)))
                {
                    stringBuilder.AppendLine("LetterRoyalTitleSpeechAbilityGained".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
                List <JoyKindDef> list3 = DefDatabase <JoyKindDef> .AllDefsListForReading.Where((JoyKindDef def) => def.titleRequiredAny != null && def.titleRequiredAny.Contains(newTitle)).ToList();

                if (list3.Count > 0)
                {
                    stringBuilder.AppendLine("LetterRoyalTitleEnabledJoyKind".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                    foreach (JoyKindDef item5 in list3)
                    {
                        stringBuilder.AppendLine("- " + item5.LabelCap);
                    }
                    stringBuilder.AppendLine();
                }
                if (flag && !newTitle.disabledJoyKinds.NullOrEmpty())
                {
                    stringBuilder.AppendLine("LetterRoyalTitleDisabledJoyKind".Translate(pawn.Named("PAWN")).CapitalizeFirst());
                    foreach (JoyKindDef disabledJoyKind in newTitle.disabledJoyKinds)
                    {
                        stringBuilder.AppendLine("- " + disabledJoyKind.LabelCap);
                    }
                    stringBuilder.AppendLine();
                }
                if (faction.def.royalImplantRules != null)
                {
                    List <RoyalImplantRule> list4 = new List <RoyalImplantRule>();
                    foreach (RoyalImplantRule royalImplantRule in faction.def.royalImplantRules)
                    {
                        RoyalTitleDef minTitleForImplant = faction.GetMinTitleForImplant(royalImplantRule.implantHediff);
                        int           num2 = faction.def.RoyalTitlesAwardableInSeniorityOrderForReading.IndexOf(minTitleForImplant);
                        if (num >= num2)
                        {
                            if (royalImplantRule.maxLevel == 0)
                            {
                                list4.Add(royalImplantRule);
                            }
                            else
                            {
                                list4.AddDistinct(faction.GetMaxAllowedImplantLevel(royalImplantRule.implantHediff, newTitle));
                            }
                        }
                    }
                    if (list4.Count > 0)
                    {
                        stringBuilder.AppendLine("LetterRoyalTitleAllowedImplants".Translate(pawn.Named("PAWN"), "\n" + list4.Select((RoyalImplantRule i) => (i.maxLevel == 0) ? $"{i.implantHediff.LabelCap} ({faction.GetMinTitleForImplant(i.implantHediff).GetLabelFor(pawn)})" : $"{i.implantHediff.LabelCap}({i.maxLevel}x) ({i.minTitle.GetLabelFor(pawn)})").ToLineList("- ")).CapitalizeFirst());
                        stringBuilder.AppendLine();
                    }
                }
                if (currentTitle != null && newTitle.seniority < currentTitle.seniority)
                {
                    List <Hediff> list5 = new List <Hediff>();
                    if (pawn.health != null && pawn.health.hediffSet != null)
                    {
                        foreach (Hediff hediff in pawn.health.hediffSet.hediffs)
                        {
                            if (hediff.def.HasComp(typeof(HediffComp_RoyalImplant)))
                            {
                                RoyalTitleDef minTitleForImplant2 = faction.GetMinTitleForImplant(hediff.def, HediffComp_RoyalImplant.GetImplantLevel(hediff));
                                if (faction.def.RoyalTitlesAwardableInSeniorityOrderForReading.IndexOf(minTitleForImplant2) > num)
                                {
                                    list5.Add(hediff);
                                }
                            }
                        }
                    }
                    if (list5.Count > 0)
                    {
                        stringBuilder.AppendLine("LetterRoyalTitleImplantsMustBeRemoved".Translate(pawn.Named("PAWN"), "\n" + list5.Select((Hediff i) => i.LabelCap).ToLineList("- ")).Resolve());
                        stringBuilder.AppendLine("LetterRoyalTitleImplantGracePeriod".Translate());
                        stringBuilder.AppendLine();
                    }
                }
                if (pawn.royalty.NewHighestTitle(faction, newTitle) && !newTitle.rewards.NullOrEmpty())
                {
                    stringBuilder.AppendLine("LetterRoyalTitleRewardGranted".Translate(pawn.Named("PAWN"), "\n" + newTitle.rewards.Select((ThingDefCountClass r) => r.Label).ToLineList("- ")).CapitalizeFirst());
                    stringBuilder.AppendLine();
                }
            }
            return(stringBuilder.ToString().TrimEndNewlines());

            RoyalTitleDef FirstTitleDisablingWorkTags(WorkTags t)
            {
                return(faction.def.RoyalTitlesAllInSeniorityOrderForReading.FirstOrDefault((RoyalTitleDef title) => (t & title.disabledWorkTags) != 0));
            }

            RoyalTitleDef FirstTitleWithPermit(RoyalTitlePermitDef permitDef)
            {
                return(faction.def.RoyalTitlesAwardableInSeniorityOrderForReading.FirstOrDefault((RoyalTitleDef t) => t.permits != null && t.permits.Contains(permitDef)));
            }
        }
        public override AcceptanceReport CanAccept()
        {
            acceptanceReportUnmetRequirements.Clear();
            if (forTitle.throneRoomRequirements.NullOrEmpty())
            {
                return(true);
            }
            Building_Throne assignedThrone = forPawn.ownership.AssignedThrone;

            if (assignedThrone == null)
            {
                return("QuestThroneRoomRequirementsUnsatisfied".Translate(forPawn.Named("PAWN"), forTitle.GetLabelFor(forPawn).Named("TITLE")));
            }
            foreach (RoomRequirement throneRoomRequirement in forTitle.throneRoomRequirements)
            {
                if (!throneRoomRequirement.Met(assignedThrone.GetRoom(), forPawn))
                {
                    acceptanceReportUnmetRequirements.Add(throneRoomRequirement.LabelCap(assignedThrone.GetRoom()));
                }
            }
            if (acceptanceReportUnmetRequirements.Count != 0)
            {
                return(new AcceptanceReport("QuestThroneRoomRequirementsUnsatisfied".Translate(forPawn.Named("PAWN"), forTitle.GetLabelFor(forPawn).Named("TITLE")) + ":\n\n" + acceptanceReportUnmetRequirements.ToLineList("- ")));
            }
            return(true);
        }