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("Shuttle crash rescue 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.", 8811221); return; } Quest quest = QuestGen.quest; Slate slate = QuestGen.slate; Map map = QuestGen_Get.GetMap(); float questPoints = slate.Get("points", 0f); slate.Set("map", map); slate.Set("rescueDelay", 20000); slate.Set("leaveDelay", 30000); slate.Set("rescueShuttleAfterRaidDelay", 10000); int max = Mathf.FloorToInt(MaxCiviliansByPointsCurve.Evaluate(questPoints)); int num = Rand.Range(1, max); int max2 = Mathf.FloorToInt(MaxSoldiersByPointsCurve.Evaluate(questPoints)); int num2 = Rand.Range(1, max2); TryFindEnemyFaction(out var enemyFaction); Thing crashedShuttle = ThingMaker.MakeThing(ThingDefOf.ShuttleCrashed); TryFindShuttleCrashPosition(map, Faction.Empire, crashedShuttle.def.size, out var shuttleCrashPosition); List <Pawn> civilians = new List <Pawn>(); List <Pawn> list = new List <Pawn>(); for (int i = 0; i < num - 1; i++) { Pawn pawn = quest.GetPawn(CivilianPawnParams); civilians.Add(pawn); list.Add(pawn); } Quest quest2 = quest; QuestGen_Pawns.GetPawnParms parms = new QuestGen_Pawns.GetPawnParms { mustBeOfFaction = Faction.Empire, canGeneratePawn = true, mustBeWorldPawn = true, seniorityRange = new FloatRange(100f, MaxAskerSeniorityByPointsCurve.Evaluate(questPoints)), mustHaveRoyalTitleInCurrentFaction = true }; Pawn asker = quest2.GetPawn(parms); civilians.Add(asker); PawnKindDef mustBeOfKind = new PawnKindDef[3] { PawnKindDefOf.Empire_Fighter_Trooper, PawnKindDefOf.Empire_Fighter_Janissary, PawnKindDefOf.Empire_Fighter_Cataphract }.RandomElement(); List <Pawn> soldiers = new List <Pawn>(); for (int j = 0; j < num2; j++) { Quest quest3 = quest; parms = new QuestGen_Pawns.GetPawnParms { mustBeOfFaction = Faction.Empire, canGeneratePawn = true, mustBeOfKind = mustBeOfKind, mustBeWorldPawn = true }; Pawn pawn2 = quest3.GetPawn(parms); soldiers.Add(pawn2); } List <Pawn> allPassengers = new List <Pawn>(); allPassengers.AddRange(soldiers); allPassengers.AddRange(civilians); quest.BiocodeWeapons(allPassengers); Thing rescueShuttle = QuestGen_Shuttle.GenerateShuttle(Faction.Empire, allPassengers, null, acceptColonists: false, onlyAcceptColonists: false, onlyAcceptHealthy: false, -1, dropEverythingIfUnsatisfied: false, leaveImmediatelyWhenSatisfied: true, dropEverythingOnArrival: false, stayAfterDroppedEverythingOnArrival: false, null, null, -1, null, permitShuttle: false, hideControls: true, allPassengers.Cast <Thing>().ToList()); quest.Delay(120, delegate { quest.Letter(LetterDefOf.NegativeEvent, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, label: "LetterLabelShuttleCrashed".Translate(), text: "LetterTextShuttleCrashed".Translate(), lookTargets: Gen.YieldSingle(crashedShuttle)); quest.SpawnSkyfaller(map, ThingDefOf.ShuttleCrashing, Gen.YieldSingle(crashedShuttle), Faction.OfPlayer, shuttleCrashPosition); quest.DropPods(map.Parent, allPassengers, null, null, null, null, dropSpot: shuttleCrashPosition, sendStandardLetter: false); quest.DefendPoint(map.Parent, shuttleCrashPosition, soldiers, Faction.Empire, null, null, 12f, isCaravanSendable: false, addFleeToil: false); IntVec3 position = shuttleCrashPosition + IntVec3.South; quest.WaitForEscort(map.Parent, civilians, Faction.Empire, position, null, addFleeToil: false); string inSignal4 = QuestGenUtility.HardcodedSignalWithQuestID("rescueShuttle.Spawned"); quest.ExitOnShuttle(map.Parent, allPassengers, Faction.Empire, rescueShuttle, inSignal4, addFleeToil: false); quest.SendShuttleAwayOnCleanup(rescueShuttle); quest.ShuttleDelay(20000, civilians, delegate { quest.Letter(LetterDefOf.NeutralEvent, null, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, Gen.YieldSingle(rescueShuttle), filterDeadPawnsFromLookTargets: false, "[rescueShuttleArrivedLetterText]", null, "[rescueShuttleArrivedLetterLabel]"); quest.SpawnSkyfaller(map, ThingDefOf.ShuttleIncoming, Gen.YieldSingle(rescueShuttle), Faction.Empire, null, null, lookForSafeSpot: false, tryLandInShipLandingZone: false, crashedShuttle); quest.ShuttleLeaveDelay(rescueShuttle, 30000, null, null, null, delegate { quest.SendShuttleAway(rescueShuttle); quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }); }, null, null, alert: true); IntVec3 walkIntSpot = default(IntVec3); TryFindRaidWalkInPosition(map, shuttleCrashPosition, out walkIntSpot); float soldiersTotalCombatPower = 0f; for (int k = 0; k < soldiers.Count; k++) { soldiersTotalCombatPower += soldiers[k].kindDef.combatPower; } quest.Delay(10000, delegate { List <Pawn> list2 = PawnGroupMakerUtility.GeneratePawns(new PawnGroupMakerParms { faction = enemyFaction, groupKind = PawnGroupKindDefOf.Combat, points = (questPoints + soldiersTotalCombatPower) * 0.37f, tile = map.Tile }).ToList(); for (int l = 0; l < list2.Count; l++) { Find.WorldPawns.PassToWorld(list2[l]); QuestGen.AddToGeneratedPawns(list2[l]); } QuestPart_PawnsArrive questPart_PawnsArrive = new QuestPart_PawnsArrive(); questPart_PawnsArrive.pawns.AddRange(list2); questPart_PawnsArrive.arrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn; questPart_PawnsArrive.joinPlayer = false; questPart_PawnsArrive.mapParent = map.Parent; questPart_PawnsArrive.spawnNear = walkIntSpot; questPart_PawnsArrive.inSignal = QuestGen.slate.Get <string>("inSignal"); questPart_PawnsArrive.sendStandardLetter = false; quest.AddPart(questPart_PawnsArrive); quest.AssaultThings(map.Parent, list2, enemyFaction, allPassengers, null, null, excludeFromLookTargets: true); quest.Letter(LetterDefOf.ThreatBig, null, null, enemyFaction, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, list2, filterDeadPawnsFromLookTargets: false, "[raidArrivedLetterText]", null, "[raidArrivedLetterLabel]"); }, null, null, null, reactivatable: false, null, null, isQuestTimeout: false, null, null, "RaidDelay"); }); string text = QuestGenUtility.HardcodedSignalWithQuestID("rescueShuttle.SentSatisfied"); string text2 = QuestGenUtility.HardcodedSignalWithQuestID("rescueShuttle.SentUnsatisfied"); string[] inSignalsShuttleSent = new string[2] { text, text2 }; string text3 = QuestGenUtility.HardcodedSignalWithQuestID("rescueShuttle.Destroyed"); string inSignal = QuestGenUtility.HardcodedSignalWithQuestID("asker.Destroyed"); quest.GoodwillChangeShuttleSentThings(Faction.Empire, list, -5, null, inSignalsShuttleSent, text3, "GoodwillChangeReason_CiviliansLost".Translate(), canSendMessage: true, canSendHostilityLetter: false, QuestPart.SignalListenMode.Always); quest.GoodwillChangeShuttleSentThings(Faction.Empire, Gen.YieldSingle(asker), -10, null, inSignalsShuttleSent, text3, "GoodwillChangeReason_CommanderLost".Translate(), canSendMessage: true, canSendHostilityLetter: false, QuestPart.SignalListenMode.Always); quest.Leave(allPassengers, "", sendStandardLetter: false); quest.Letter(LetterDefOf.PositiveEvent, text, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[questCompletedSuccessLetterText]", null, "[questCompletedSuccessLetterLabel]"); string questSuccess = QuestGen.GenerateNewSignal("QuestSuccess"); quest.SignalPass(delegate { RewardsGeneratorParams rewardsGeneratorParams = default(RewardsGeneratorParams); rewardsGeneratorParams.rewardValue = questPoints; rewardsGeneratorParams.allowGoodwill = true; rewardsGeneratorParams.allowRoyalFavor = true; RewardsGeneratorParams parms2 = rewardsGeneratorParams; quest.GiveRewards(parms2, null, null, null, null, null, null, null, null, addCampLootReward: false, asker, addShuttleLootReward: true); QuestGen_End.End(quest, QuestEndOutcome.Success); }, questSuccess); quest.SignalPass(null, text, questSuccess); quest.AnyOnTransporter(allPassengers, rescueShuttle, delegate { quest.AnyOnTransporter(Gen.YieldSingle(asker), rescueShuttle, delegate { quest.Letter(LetterDefOf.PositiveEvent, null, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[questCompletedCiviliansLostSuccessLetterText]", null, "[questCompletedCiviliansLostSuccessLetterLabel]"); quest.SignalPass(null, null, questSuccess); }, delegate { quest.Letter(LetterDefOf.NegativeEvent, null, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[askerLostLetterText]", null, "[askerLostLetterLabel]"); QuestGen_End.End(quest, QuestEndOutcome.Fail); }); }, delegate { quest.Letter(LetterDefOf.NegativeEvent, null, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[allLostLetterText]", null, "[allLostLetterLabel]"); QuestGen_End.End(quest, QuestEndOutcome.Fail); }, text2); quest.Letter(LetterDefOf.NegativeEvent, inSignal, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, Gen.YieldSingle(asker), filterDeadPawnsFromLookTargets: false, "[askerDiedLetterText]", null, "[askerDiedLetterLabel]"); quest.End(QuestEndOutcome.Fail, 0, null, inSignal); quest.Letter(LetterDefOf.NegativeEvent, text3, null, Faction.Empire, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, Gen.YieldSingle(rescueShuttle), filterDeadPawnsFromLookTargets: false, "[shuttleDestroyedLetterText]", null, "[shuttleDestroyedLetterLabel]"); quest.End(QuestEndOutcome.Fail, 0, null, text3); quest.End(QuestEndOutcome.Fail, 0, null, QuestGenUtility.HardcodedSignalWithQuestID("asker.LeftMap"), QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); string inSignal2 = QuestGenUtility.HardcodedSignalWithQuestID("askerFaction.BecameHostileToPlayer"); quest.End(QuestEndOutcome.Fail, 0, null, inSignal2, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.InvalidPreAcceptance, 0, null, inSignal2, QuestPart.SignalListenMode.NotYetAcceptedOnly); slate.Set("asker", asker); slate.Set("askerFaction", asker.Faction); slate.Set("enemyFaction", enemyFaction); slate.Set("soldiers", soldiers); slate.Set("civilians", civilians); slate.Set("civilianCountMinusOne", civilians.Count - 1); slate.Set("rescueShuttle", rescueShuttle); }
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); }