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")); }
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); }
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); }