protected override void RunInt() { Slate slate = QuestGen.slate; Map map = QuestGen.slate.Get <Map>("map"); if (map != null) { QuestPart_Infestation questPart = new QuestPart_Infestation(); questPart.mapParent = map.Parent; questPart.hivesCount = hivesCount.GetValue(slate); questPart.tag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { questPart.customLetterLabel = x; }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root")); } if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { questPart.customLetterText = x; }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root")); } questPart.inSignal = (QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal")); QuestGen.quest.AddPart(questPart); } }
protected override void RunInt() { Slate slate = QuestGen.slate; if (targets.GetValue(slate) != null) { string questTagToAdd = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); foreach (object item in targets.GetValue(slate)) { Thing thing = item as Thing; if (thing != null) { QuestUtility.AddQuestTag(ref thing.questTags, questTagToAdd); } else { WorldObject worldObject = item as WorldObject; if (worldObject != null) { QuestUtility.AddQuestTag(ref worldObject.questTags, questTagToAdd); } } } } }
protected override void RunInt() { Slate slate = QuestGen.slate; Map target = QuestGen.slate.Get <Map>("map"); float a = QuestGen.slate.Get("points", 0f); Faction faction = QuestGen.slate.Get <Faction>("enemyFaction"); QuestPart_Incident questPart_Incident = new QuestPart_Incident(); questPart_Incident.debugLabel = "raid"; questPart_Incident.incident = IncidentDefOf.RaidEnemy; IncidentParms incidentParms = new IncidentParms(); incidentParms.forced = true; incidentParms.target = target; incidentParms.points = Mathf.Max(a, faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat)); incidentParms.faction = faction; incidentParms.pawnGroupMakerSeed = Rand.Int; incidentParms.inSignalEnd = QuestGenUtility.HardcodedSignalWithQuestID(inSignalLeave.GetValue(slate)); incidentParms.questTag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterLabel = x; }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root")); } if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterText = x; }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root")); } IncidentWorker_Raid obj = (IncidentWorker_Raid)questPart_Incident.incident.Worker; obj.ResolveRaidStrategy(incidentParms, PawnGroupKindDefOf.Combat); obj.ResolveRaidArriveMode(incidentParms); if (incidentParms.raidArrivalMode.walkIn) { incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid; } PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms); defaultPawnGroupMakerParms.points = IncidentWorker_Raid.AdjustedRaidPoints(defaultPawnGroupMakerParms.points, incidentParms.raidArrivalMode, incidentParms.raidStrategy, defaultPawnGroupMakerParms.faction, PawnGroupKindDefOf.Combat); IEnumerable <PawnKindDef> pawnKinds = PawnGroupMakerUtility.GeneratePawnKindsExample(defaultPawnGroupMakerParms); questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms); questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"); QuestGen.quest.AddPart(questPart_Incident); QuestGen.AddQuestDescriptionRules(new List <Rule> { new Rule_String("raidPawnKinds", PawnUtility.PawnKindsToLineList(pawnKinds, " - ", ColoredText.ThreatColor)), new Rule_String("raidArrivalModeInfo", incidentParms.raidArrivalMode.textWillArrive.Formatted(faction)) }); }
public static void Raid(this Quest quest, Map map, float points, Faction faction, string inSignalLeave = null, string customLetterLabel = null, string customLetterText = null, RulePack customLetterLabelRules = null, RulePack customLetterTextRules = null, IntVec3?walkInSpot = null, string tag = null, string inSignal = null, string rootSymbol = "root", PawnsArrivalModeDef raidArrivalMode = null) { QuestPart_Incident questPart_Incident = new QuestPart_Incident(); questPart_Incident.debugLabel = "raid"; questPart_Incident.incident = IncidentDefOf.RaidEnemy; IncidentParms incidentParms = new IncidentParms(); incidentParms.forced = true; incidentParms.target = map; incidentParms.points = Mathf.Max(points, faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat)); incidentParms.faction = faction; incidentParms.pawnGroupMakerSeed = Rand.Int; incidentParms.inSignalEnd = inSignalLeave; incidentParms.questTag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag); incidentParms.raidArrivalMode = raidArrivalMode; if (!customLetterLabel.NullOrEmpty() || customLetterLabelRules != null) { QuestGen.AddTextRequest(rootSymbol, delegate(string x) { incidentParms.customLetterLabel = x; }, QuestGenUtility.MergeRules(customLetterLabelRules, customLetterLabel, rootSymbol)); } if (!customLetterText.NullOrEmpty() || customLetterTextRules != null) { QuestGen.AddTextRequest(rootSymbol, delegate(string x) { incidentParms.customLetterText = x; }, QuestGenUtility.MergeRules(customLetterTextRules, customLetterText, rootSymbol)); } IncidentWorker_Raid obj = (IncidentWorker_Raid)questPart_Incident.incident.Worker; obj.ResolveRaidStrategy(incidentParms, PawnGroupKindDefOf.Combat); obj.ResolveRaidArriveMode(incidentParms); if (incidentParms.raidArrivalMode.walkIn) { incidentParms.spawnCenter = walkInSpot ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid; } PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms); defaultPawnGroupMakerParms.points = IncidentWorker_Raid.AdjustedRaidPoints(defaultPawnGroupMakerParms.points, incidentParms.raidArrivalMode, incidentParms.raidStrategy, defaultPawnGroupMakerParms.faction, PawnGroupKindDefOf.Combat); IEnumerable <PawnKindDef> pawnKinds = PawnGroupMakerUtility.GeneratePawnKindsExample(defaultPawnGroupMakerParms); questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms); questPart_Incident.inSignal = inSignal ?? QuestGen.slate.Get <string>("inSignal"); QuestGen.quest.AddPart(questPart_Incident); QuestGen.AddQuestDescriptionRules(new List <Rule> { new Rule_String("raidPawnKinds", PawnUtility.PawnKindsToLineList(pawnKinds, " - ", ColoredText.ThreatColor)), new Rule_String("raidArrivalModeInfo", incidentParms.raidArrivalMode.textWillArrive.Formatted(faction)) }); }
protected override void RunInt() { Slate slate = QuestGen.slate; Map map = QuestGen.slate.Get <Map>("map"); float points = QuestGen.slate.Get("points", 0f); QuestPart_Incident questPart_Incident = new QuestPart_Incident(); questPart_Incident.incident = IncidentDefOf.ManhunterPack; IncidentParms incidentParms = new IncidentParms(); incidentParms.forced = true; incidentParms.target = map; incidentParms.points = points; incidentParms.questTag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid; incidentParms.pawnCount = animalCount.GetValue(slate); if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, map.Tile, out var animalKind)) { incidentParms.pawnKind = animalKind; } slate.Set("animalKindDef", animalKind); int num = ((incidentParms.pawnCount > 0) ? incidentParms.pawnCount : ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, points)); QuestGen.slate.Set("animalCount", num); if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterLabel = x; }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root")); } if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterText = x; }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root")); } questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms); questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"); QuestGen.quest.AddPart(questPart_Incident); List <Rule> rules = new List <Rule> { new Rule_String("animalKind_label", animalKind.label), new Rule_String("animalKind_labelPlural", animalKind.GetLabelPlural(num)) }; QuestGen.AddQuestDescriptionRules(rules); QuestGen.AddQuestNameRules(rules); }
protected override void RunInt() { Slate slate = QuestGen.slate; QuestPart_TrackWhenExitMentalState questPart_TrackWhenExitMentalState = new QuestPart_TrackWhenExitMentalState(); questPart_TrackWhenExitMentalState.mapParent = slate.Get <Map>("map").Parent; questPart_TrackWhenExitMentalState.tag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); questPart_TrackWhenExitMentalState.mentalStateDef = mentalStateDef.GetValue(slate); questPart_TrackWhenExitMentalState.outSignal = QuestGenUtility.HardcodedSignalWithQuestID(outSignal.GetValue(slate)); questPart_TrackWhenExitMentalState.inSignals = new List <string>(); foreach (string item in inSignals.GetValue(slate)) { questPart_TrackWhenExitMentalState.inSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(item)); } QuestGen.quest.AddPart(questPart_TrackWhenExitMentalState); }
protected override void RunInt() { Slate slate = QuestGen.slate; QuestPart_MechCluster questPart_MechCluster = new QuestPart_MechCluster(); questPart_MechCluster.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"); questPart_MechCluster.tag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); questPart_MechCluster.mapParent = slate.Get <Map>("map").Parent; questPart_MechCluster.sketch = GenerateSketch(slate); QuestGen.quest.AddPart(questPart_MechCluster); string text = ""; if (questPart_MechCluster.sketch.pawns != null) { text += PawnUtility.PawnKindsToLineList(questPart_MechCluster.sketch.pawns.Select((MechClusterSketch.Mech m) => m.kindDef), " - ", ColoredText.ThreatColor); } string[] array = (from t in questPart_MechCluster.sketch.buildingsSketch.Things where GenHostility.IsDefMechClusterThreat(t.def) group t by t.def.label).Select(delegate(IGrouping <string, SketchThing> grp) { int num = grp.Count(); return(num + " " + ((num > 1) ? Find.ActiveLanguageWorker.Pluralize(grp.Key, num) : grp.Key)); }).ToArray(); if (array.Any()) { if (text != "") { text += "\n"; } text += array.ToLineList(ColoredText.ThreatColor, " - "); } if (text != "") { QuestGen.AddQuestDescriptionRules(new List <Rule> { new Rule_String("allThreats", text) }); } }
protected override void RunInt() { if (!ModLister.RoyaltyInstalled) { Log.ErrorOnce("Missions 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.", 324345634); return; } Quest quest = QuestGen.quest; Slate slate = QuestGen.slate; string text = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(QuestTag); int num = slate.Get("points", 0); Pawn asker = GetAsker(quest); ResolveParameters(slate, out var requiredPawnCount, out var population, out var colonyMap); TryFindSiteTile(out var tile); slate.Set("asker", asker); slate.Set("askerFaction", asker.Faction); slate.Set("requiredPawnCount", requiredPawnCount); slate.Set("map", colonyMap); Site site = GenerateSite(asker, num, requiredPawnCount, population, tile); string inSignal = QuestGenUtility.HardcodedSignalWithQuestID("askerFaction.BecameHostileToPlayer"); string text2 = QuestGenUtility.QuestTagSignal(text, "AllEnemiesDefeated"); string signalSentSatisfied = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.SentSatisfied"); QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Spawned"); string text3 = QuestGenUtility.QuestTagSignal(text, "MapRemoved"); string signalChosenPawn = QuestGen.GenerateNewSignal("ChosenPawnSignal"); quest.GiveRewards(new RewardsGeneratorParams { allowGoodwill = true, allowRoyalFavor = true, giverFaction = asker.Faction, rewardValue = RewardValueCurve.Evaluate(num), chosenPawnSignal = signalChosenPawn }, text2, null, null, null, null, null, delegate { quest.Letter(LetterDefOf.ChoosePawn, null, label: asker.Faction.def.royalFavorLabel, text: "LetterTextHonorAward_BanditCamp".Translate(asker.Faction.def.royalFavorLabel), chosenPawnSignal: signalChosenPawn, relatedFaction: null, useColonistsOnMap: null, useColonistsFromCaravanArg: false, signalListenMode: QuestPart.SignalListenMode.OngoingOnly, lookTargets: null, filterDeadPawnsFromLookTargets: false, textRules: null, labelRules: null, getColonistsFromSignal: signalSentSatisfied); }, null, AddCampLootReward, asker); Thing shuttle = QuestGen_Shuttle.GenerateShuttle(null, null, null, acceptColonists: true, onlyAcceptColonists: true, onlyAcceptHealthy: false, requiredPawnCount, dropEverythingIfUnsatisfied: true, leaveImmediatelyWhenSatisfied: true, dropEverythingOnArrival: false, stayAfterDroppedEverythingOnArrival: true, site, colonyMap.Parent, requiredPawnCount, null, permitShuttle: false, hideControls: false); shuttle.TryGetComp <CompShuttle>().sendAwayIfQuestFinished = quest; slate.Set("shuttle", shuttle); quest.SpawnWorldObject(site, null, signalSentSatisfied); QuestUtility.AddQuestTag(ref shuttle.questTags, text); quest.SpawnSkyfaller(colonyMap, ThingDefOf.ShuttleIncoming, Gen.YieldSingle(shuttle), Faction.OfPlayer, null, null, lookForSafeSpot: true, tryLandInShipLandingZone: true); quest.ShuttleLeaveDelay(shuttle, 60000, null, Gen.YieldSingle(signalSentSatisfied), null, delegate { quest.SendShuttleAway(shuttle, dropEverything: true); quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }); string inSignal2 = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Killed"); quest.SetFactionRelations(asker.Faction, FactionRelationKind.Hostile, inSignal2); quest.End(QuestEndOutcome.Fail, 0, null, inSignal2, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.SignalPass(delegate { quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }, inSignal); quest.FeedPawns(null, shuttle, signalSentSatisfied); Quest quest2 = quest; Action action = delegate { quest.SendShuttleAway(shuttle, dropEverything: true); }; string inSignalDisable = signalSentSatisfied; quest2.SignalPassActivable(action, null, text2, null, null, inSignalDisable); QuestUtility.AddQuestTag(ref site.questTags, text); slate.Set("site", site); quest.SendShuttleAwayOnCleanup(shuttle, dropEverything: true); quest.SignalPassActivable(delegate { quest.Message("MessageMissionGetBackToShuttle".Translate(site.Faction.Named("FACTION")), MessageTypeDefOf.PositiveEvent, getLookTargetsFromSignal: false, null, new LookTargets(shuttle)); }, signalSentSatisfied, text2); quest.SignalPassAllSequence(delegate { quest.End(QuestEndOutcome.Success, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }, new List <string> { signalSentSatisfied, text2, text3 }); Quest quest3 = quest; Action action2 = delegate { quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }; inSignalDisable = text2; quest3.SignalPassActivable(action2, null, text3, null, null, inSignalDisable); int num2 = (int)(timeLimitDays.RandomInRange * 60000f); slate.Set("timeoutTicks", num2); quest.WorldObjectTimeout(site, num2); List <Rule> list = new List <Rule>(); list.AddRange(GrammarUtility.RulesForWorldObject("site", site)); QuestGen.AddQuestDescriptionRules(list); }
protected override void RunInt() { if (!ModLister.RoyaltyInstalled) { Log.ErrorOnce("Bestowing ceremony is 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.", 3454535); return; } Quest quest = QuestGen.quest; Slate slate = QuestGen.slate; if (!TryGetCeremonyTarget(QuestGen.slate, out var pawn, out var bestowingFaction)) { return; } RoyalTitleDef titleAwardedWhenUpdating = pawn.royalty.GetTitleAwardedWhenUpdating(bestowingFaction, pawn.royalty.GetFavor(bestowingFaction)); string text = QuestGenUtility.HardcodedTargetQuestTagWithQuestID("Bestowing"); string text2 = QuestGenUtility.QuestTagSignal(text, "CeremonyExpired"); string inSignal = QuestGenUtility.QuestTagSignal(text, "CeremonyFailed"); string inSignal2 = QuestGenUtility.QuestTagSignal(text, "CeremonyDone"); string inSignal3 = QuestGenUtility.QuestTagSignal(text, "TitleAwardedWhenUpdatingChanged"); Thing thing = QuestGen_Shuttle.GenerateShuttle(bestowingFaction, null, null, acceptColonists: false, onlyAcceptColonists: false, onlyAcceptHealthy: false, 0, dropEverythingIfUnsatisfied: false, leaveImmediatelyWhenSatisfied: true, dropEverythingOnArrival: true, stayAfterDroppedEverythingOnArrival: true); Pawn pawn2 = quest.GetPawn(new QuestGen_Pawns.GetPawnParms { mustBeOfKind = PawnKindDefOf.Empire_Royal_Bestower, canGeneratePawn = true, mustBeOfFaction = bestowingFaction, mustBeWorldPawn = true }); QuestUtility.AddQuestTag(ref thing.questTags, text); QuestUtility.AddQuestTag(ref pawn.questTags, text); ThingOwner <Thing> innerContainer = pawn2.inventory.innerContainer; for (int num = innerContainer.Count - 1; num >= 0; num--) { if (innerContainer[num].def == ThingDefOf.PsychicAmplifier) { Thing thing2 = innerContainer[num]; innerContainer.RemoveAt(num); thing2.Destroy(); } } int num2 = titleAwardedWhenUpdating.maxPsylinkLevel - pawn.GetPsylinkLevel(); for (int i = 0; i < num2 + 1; i++) { innerContainer.TryAdd(ThingMaker.MakeThing(ThingDefOf.PsychicAmplifier), 1); } List <Pawn> list = new List <Pawn>(); list.Add(pawn2); slate.Set("shuttleContents", list); slate.Set("shuttle", thing); slate.Set("target", pawn); slate.Set("bestowingFaction", bestowingFaction); List <Pawn> list2 = new List <Pawn>(); for (int j = 0; j < 6; j++) { Pawn item = quest.GeneratePawn(PawnKindDefOf.Empire_Fighter_Janissary, bestowingFaction); list.Add(item); list2.Add(item); } slate.Set("defenders", list2); CompShuttle compShuttle = thing.TryGetComp <CompShuttle>(); compShuttle.requiredPawns = list; compShuttle.sendAwayIfAllDespawned = list.Cast <Thing>().ToList(); compShuttle.sendAwayIfAllPawnsLeftToLoadAreNotOfFaction = bestowingFaction; quest.AddContentsToShuttle(thing, list); quest.SpawnSkyfaller(null, ThingDefOf.ShuttleIncoming, Gen.YieldSingle(thing), Faction.OfPlayer, null, null, lookForSafeSpot: true, tryLandInShipLandingZone: true, null, pawn); quest.FactionGoodwillChange(bestowingFaction, -5, QuestGenUtility.HardcodedSignalWithQuestID("defenders.Killed"), canSendMessage: true, canSendHostilityLetter: true, "GoodwillChangeReason_AttackedFaction".Translate(bestowingFaction)); QuestPart_BestowingCeremony questPart_BestowingCeremony = new QuestPart_BestowingCeremony(); questPart_BestowingCeremony.inSignal = QuestGen.slate.Get <string>("inSignal"); questPart_BestowingCeremony.pawns.Add(pawn2); questPart_BestowingCeremony.mapOfPawn = pawn; questPart_BestowingCeremony.faction = pawn2.Faction; questPart_BestowingCeremony.bestower = pawn2; questPart_BestowingCeremony.target = pawn; questPart_BestowingCeremony.shuttle = thing; questPart_BestowingCeremony.questTag = text; quest.AddPart(questPart_BestowingCeremony); QuestPart_EscortPawn questPart_EscortPawn = new QuestPart_EscortPawn(); questPart_EscortPawn.inSignal = QuestGen.slate.Get <string>("inSignal"); questPart_EscortPawn.escortee = pawn2; questPart_EscortPawn.pawns.AddRange(list2); questPart_EscortPawn.mapOfPawn = pawn; questPart_EscortPawn.faction = pawn2.Faction; questPart_EscortPawn.shuttle = thing; quest.AddPart(questPart_EscortPawn); string inSignal4 = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Killed"); quest.SetFactionRelations(bestowingFaction, FactionRelationKind.Hostile, inSignal4); quest.End(QuestEndOutcome.Fail, 0, null, inSignal4, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); QuestPart_RequirementsToAcceptThroneRoom questPart_RequirementsToAcceptThroneRoom = new QuestPart_RequirementsToAcceptThroneRoom(); questPart_RequirementsToAcceptThroneRoom.faction = bestowingFaction; questPart_RequirementsToAcceptThroneRoom.forPawn = pawn; questPart_RequirementsToAcceptThroneRoom.forTitle = titleAwardedWhenUpdating; quest.AddPart(questPart_RequirementsToAcceptThroneRoom); QuestPart_RequirementsToAcceptPawnOnColonyMap questPart_RequirementsToAcceptPawnOnColonyMap = new QuestPart_RequirementsToAcceptPawnOnColonyMap(); questPart_RequirementsToAcceptPawnOnColonyMap.pawn = pawn; quest.AddPart(questPart_RequirementsToAcceptPawnOnColonyMap); QuestPart_RequirementsToAcceptNoDanger questPart_RequirementsToAcceptNoDanger = new QuestPart_RequirementsToAcceptNoDanger(); questPart_RequirementsToAcceptNoDanger.map = pawn.Map; questPart_RequirementsToAcceptNoDanger.dangerTo = bestowingFaction; quest.AddPart(questPart_RequirementsToAcceptNoDanger); string inSignal5 = QuestGenUtility.HardcodedSignalWithQuestID("shuttleContents.Recruited"); string inSignal6 = QuestGenUtility.HardcodedSignalWithQuestID("bestowingFaction.BecameHostileToPlayer"); quest.Signal(inSignal5, delegate { quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }); quest.End(QuestEndOutcome.Fail, 0, null, QuestGenUtility.HardcodedSignalWithQuestID("target.Killed"), QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true); quest.Letter(LetterDefOf.NegativeEvent, text2, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, label: "LetterLabelBestowingCeremonyExpired".Translate(), text: "LetterTextBestowingCeremonyExpired".Translate(pawn.Named("TARGET"))); quest.End(QuestEndOutcome.Fail, 0, null, text2); quest.End(QuestEndOutcome.Fail, 0, null, inSignal6, QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, inSignal, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, inSignal3, QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true); quest.End(QuestEndOutcome.Success, 0, null, inSignal2); QuestPart_Choice questPart_Choice = quest.RewardChoice(); QuestPart_Choice.Choice item2 = new QuestPart_Choice.Choice { rewards = { (Reward) new Reward_BestowingCeremony { targetPawnName = pawn.NameShortColored.Resolve(), titleName = titleAwardedWhenUpdating.GetLabelCapFor(pawn), awardingFaction = bestowingFaction, givePsylink = (titleAwardedWhenUpdating.maxPsylinkLevel > pawn.GetPsylinkLevel()), royalTitle = titleAwardedWhenUpdating } } }; questPart_Choice.choices.Add(item2); List <Rule> list3 = new List <Rule>(); list3.AddRange(GrammarUtility.RulesForPawn("pawn", pawn)); list3.Add(new Rule_String("newTitle", titleAwardedWhenUpdating.GetLabelCapFor(pawn))); QuestGen.AddQuestNameRules(list3); List <Rule> list4 = new List <Rule>(); list4.AddRange(GrammarUtility.RulesForFaction("faction", bestowingFaction)); list4.AddRange(GrammarUtility.RulesForPawn("pawn", pawn)); list4.Add(new Rule_String("newTitle", pawn.royalty.GetTitleAwardedWhenUpdating(bestowingFaction, pawn.royalty.GetFavor(bestowingFaction)).GetLabelFor(pawn))); list4.Add(new Rule_String("psylinkLevel", titleAwardedWhenUpdating.maxPsylinkLevel.ToString())); QuestGen.AddQuestDescriptionRules(list4); }