public static void RunInnerNode(QuestNode node, QuestPartActivable outerQuestPart) { string text = QuestGen.GenerateNewSignal("OuterNodeCompleted"); outerQuestPart.outSignalsCompleted.Add(text); RunInnerNode(node, text); }
public static QuestPart_BetrayalOffer BetrayalOffer(this Quest quest, IEnumerable <Pawn> pawns, ExtraFaction extraFaction, Pawn asker, Action success = null, Action failure = null, Action enabled = null, IEnumerable <string> inSignals = null, string inSignalEnable = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_BetrayalOffer questPart_BetrayalOffer = new QuestPart_BetrayalOffer(); questPart_BetrayalOffer.pawns.AddRange(pawns); questPart_BetrayalOffer.asker = asker; questPart_BetrayalOffer.extraFaction = extraFaction; questPart_BetrayalOffer.inSignalEnable = inSignalEnable ?? QuestGen.slate.Get <string>("inSignal"); questPart_BetrayalOffer.signalListenMode = signalListenMode; if (inSignals != null) { questPart_BetrayalOffer.inSignals.AddRange(inSignals); } if (success != null) { string text = QuestGen.GenerateNewSignal("BetrayalOfferSuccess"); QuestGenUtility.RunInner(success, text); questPart_BetrayalOffer.outSignalSuccess = text; } if (failure != null) { string text2 = QuestGen.GenerateNewSignal("BetrayalOfferFailure"); QuestGenUtility.RunInner(failure, text2); questPart_BetrayalOffer.outSignalFailure = text2; } if (enabled != null) { string text3 = QuestGen.GenerateNewSignal("BetrayalOfferEnabled"); QuestGenUtility.RunInner(enabled, text3); questPart_BetrayalOffer.outSignalEnabled = text3; } quest.AddPart(questPart_BetrayalOffer); return(questPart_BetrayalOffer); }
public static QuestPart_ShuttleLeaveDelay ShuttleLeaveDelay(this Quest quest, Thing shuttle, int delayTicks, string inSignalEnable = null, IEnumerable <string> inSignalsDisable = null, string outSignalComplete = null, Action complete = null) { QuestPart_ShuttleLeaveDelay questPart_ShuttleLeaveDelay = new QuestPart_ShuttleLeaveDelay(); questPart_ShuttleLeaveDelay.inSignalEnable = inSignalEnable ?? QuestGen.slate.Get <string>("inSignal"); questPart_ShuttleLeaveDelay.delayTicks = delayTicks; questPart_ShuttleLeaveDelay.shuttle = shuttle; questPart_ShuttleLeaveDelay.expiryInfoPart = "ShuttleDepartsIn".Translate(); questPart_ShuttleLeaveDelay.expiryInfoPartTip = "ShuttleDepartsOn".Translate(); if (inSignalsDisable != null) { foreach (string item in inSignalsDisable) { questPart_ShuttleLeaveDelay.inSignalsDisable.Add(item); } } if (!outSignalComplete.NullOrEmpty()) { questPart_ShuttleLeaveDelay.outSignalsCompleted.Add(outSignalComplete); } if (complete != null) { string text = QuestGen.GenerateNewSignal("ShuttleLeaveDelay"); QuestGenUtility.RunInner(complete, text); questPart_ShuttleLeaveDelay.outSignalsCompleted.Add(text); } quest.AddPart(questPart_ShuttleLeaveDelay); return(questPart_ShuttleLeaveDelay); }
protected override void RunInt() { Slate slate = QuestGen.slate; MapParent parent = slate.Get <Map>("map").Parent; string text = QuestGen.GenerateNewSignal("PawnOfRaceKilled"); QuestPart_PawnsKilled questPart_PawnsKilled = new QuestPart_PawnsKilled(); questPart_PawnsKilled.inSignalEnable = (QuestGenUtility.HardcodedSignalWithQuestID(inSignalEnable.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal")); questPart_PawnsKilled.race = race.GetValue(slate); questPart_PawnsKilled.requiredInstigatorFaction = Faction.OfPlayer; questPart_PawnsKilled.count = count.GetValue(slate); questPart_PawnsKilled.mapParent = parent; questPart_PawnsKilled.outSignalPawnKilled = text; if (node != null) { QuestGenUtility.RunInnerNode(node, questPart_PawnsKilled); } if (!outSignalComplete.GetValue(slate).NullOrEmpty()) { questPart_PawnsKilled.outSignalsCompleted.Add(QuestGenUtility.HardcodedSignalWithQuestID(outSignalComplete.GetValue(slate))); } QuestGen.quest.AddPart(questPart_PawnsKilled); QuestPart_PawnsAvailable questPart_PawnsAvailable = new QuestPart_PawnsAvailable(); questPart_PawnsAvailable.inSignalEnable = (QuestGenUtility.HardcodedSignalWithQuestID(inSignalEnable.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal")); if (!outSignalPawnsNotAvailable.GetValue(slate).NullOrEmpty()) { questPart_PawnsAvailable.outSignalPawnsNotAvailable = QuestGenUtility.HardcodedSignalWithQuestID(outSignalPawnsNotAvailable.GetValue(slate)); } questPart_PawnsAvailable.race = race.GetValue(slate); questPart_PawnsAvailable.requiredCount = count.GetValue(slate); questPart_PawnsAvailable.mapParent = parent; questPart_PawnsAvailable.inSignalDecrement = text; QuestGen.quest.AddPart(questPart_PawnsAvailable); }
public static QuestPart_PassActivable SignalPassActivable(this Quest quest, Action action = null, string inSignalEnable = null, string inSignal = null, string outSignalCompleted = null, IEnumerable <string> outSignalsCompleted = null, string inSignalDisable = null, bool reactivatable = false) { QuestPart_PassActivable questPart_PassActivable = new QuestPart_PassActivable(); questPart_PassActivable.inSignalEnable = inSignalEnable ?? QuestGen.slate.Get <string>("inSignal"); questPart_PassActivable.inSignalDisable = inSignalDisable; questPart_PassActivable.inSignal = inSignal; questPart_PassActivable.reactivatable = reactivatable; if (action != null) { string text = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, text); questPart_PassActivable.outSignalsCompleted.Add(text); } if (outSignalsCompleted != null) { questPart_PassActivable.outSignalsCompleted.AddRange(outSignalsCompleted); } if (!outSignalCompleted.NullOrEmpty()) { questPart_PassActivable.outSignalsCompleted.Add(outSignalCompleted); } quest.AddPart(questPart_PassActivable); return(questPart_PassActivable); }
public static string HardcodedSignalWithQuestID(string signal) { if (!QuestGen.Working) { return(signal); } if (signal.NullOrEmpty()) { return(null); } if (signal.StartsWith("Quest") && signal.IndexOf('.') >= 0) { return(signal); } if (signal.IndexOf('.') >= 0) { int num = signal.IndexOf('.'); string text = signal.Substring(0, num); string str = signal.Substring(num + 1); if (!QuestGen.slate.CurrentPrefix.NullOrEmpty()) { text = QuestGen.slate.CurrentPrefix + "/" + text; } text = NormalizeVarPath(text); QuestGen.AddSlateQuestTagToAddWhenFinished(text); return(QuestGen.GenerateNewSignal(text + "." + str, ensureUnique: false)); } if (!QuestGen.slate.CurrentPrefix.NullOrEmpty()) { signal = QuestGen.slate.CurrentPrefix + "/" + signal; } signal = NormalizeVarPath(signal); return(QuestGen.GenerateNewSignal(signal, ensureUnique: false)); }
protected override void RunInt() { Slate slate = QuestGen.slate; QuestPart_Filter_DecreeNotPossible questPart_Filter_DecreeNotPossible = new QuestPart_Filter_DecreeNotPossible(); questPart_Filter_DecreeNotPossible.inSignal = (QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal")); if (node != null) { questPart_Filter_DecreeNotPossible.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInnerNode(node, questPart_Filter_DecreeNotPossible.outSignal); } QuestGen.quest.AddPart(questPart_Filter_DecreeNotPossible); }
public static void SignalPass(this Quest quest, Action action = null, string inSignal = null, string outSignal = null) { QuestPart_Pass questPart_Pass = new QuestPart_Pass(); questPart_Pass.inSignal = inSignal ?? QuestGen.slate.Get <string>("inSignal"); if (action != null) { outSignal = outSignal ?? QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, outSignal); } questPart_Pass.outSignal = outSignal; quest.AddPart(questPart_Pass); }
protected override void RunInt() { Slate slate = QuestGen.slate; QuestPart_Filter_FactionNonPlayer questPart_Filter_FactionNonPlayer = new QuestPart_Filter_FactionNonPlayer(); questPart_Filter_FactionNonPlayer.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"); if (node != null) { questPart_Filter_FactionNonPlayer.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInnerNode(node, questPart_Filter_FactionNonPlayer.outSignal); } QuestGen.quest.AddPart(questPart_Filter_FactionNonPlayer); }
public static void SignalRandom(this Quest quest, IEnumerable <Action> actions, string inSignal = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_PassOutRandom questPart_PassOutRandom = new QuestPart_PassOutRandom(); questPart_PassOutRandom.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal"); questPart_PassOutRandom.signalListenMode = signalListenMode; quest.AddPart(questPart_PassOutRandom); foreach (Action action in actions) { string text = QuestGen.GenerateNewSignal("OuterNodeCompleted"); questPart_PassOutRandom.outSignals.Add(text); QuestGenUtility.RunInner(action, text); } }
protected override void RunInt() { Slate slate = QuestGen.slate; switch (((outSignals.GetValue(slate) != null) ? outSignals.GetValue(slate).Count() : 0) + ((node != null) ? 1 : 0)) { case 0: return; case 1: { QuestPart_PassAny questPart_PassAny = new QuestPart_PassAny(); foreach (string item in inSignals.GetValue(slate)) { questPart_PassAny.inSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(item)); } if (node != null) { questPart_PassAny.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInnerNode(node, questPart_PassAny.outSignal); } else { questPart_PassAny.outSignal = QuestGenUtility.HardcodedSignalWithQuestID(outSignals.GetValue(slate).First()); } questPart_PassAny.signalListenMode = signalListenMode.GetValue(slate) ?? QuestPart.SignalListenMode.OngoingOnly; QuestGen.quest.AddPart(questPart_PassAny); return; } } QuestPart_PassAnyOutMany questPart_PassAnyOutMany = new QuestPart_PassAnyOutMany(); foreach (string item2 in inSignals.GetValue(slate)) { questPart_PassAnyOutMany.inSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(item2)); } if (node != null) { string text = QuestGen.GenerateNewSignal("OuterNodeCompleted"); questPart_PassAnyOutMany.outSignals.Add(text); QuestGenUtility.RunInnerNode(node, text); } foreach (string item3 in outSignals.GetValue(slate)) { questPart_PassAnyOutMany.outSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(item3)); } questPart_PassAnyOutMany.signalListenMode = signalListenMode.GetValue(slate) ?? QuestPart.SignalListenMode.OngoingOnly; QuestGen.quest.AddPart(questPart_PassAnyOutMany); }
public static void AnySignal(this Quest quest, IEnumerable <string> inSignals = null, Action action = null, IEnumerable <string> outSignals = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { _ = QuestGen.slate; switch ((outSignals?.Count() ?? 0) + ((action != null) ? 1 : 0)) { case 0: return; case 1: { QuestPart_PassAny questPart_PassAny = new QuestPart_PassAny(); foreach (string inSignal in inSignals) { questPart_PassAny.inSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(inSignal)); } if (action != null) { questPart_PassAny.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, questPart_PassAny.outSignal); } else { questPart_PassAny.outSignal = QuestGenUtility.HardcodedSignalWithQuestID(outSignals.First()); } questPart_PassAny.signalListenMode = signalListenMode; quest.AddPart(questPart_PassAny); return; } } QuestPart_PassAnyOutMany questPart_PassAnyOutMany = new QuestPart_PassAnyOutMany(); foreach (string inSignal2 in inSignals) { questPart_PassAnyOutMany.inSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(inSignal2)); } if (action != null) { string text = QuestGen.GenerateNewSignal("OuterNodeCompleted"); questPart_PassAnyOutMany.outSignals.Add(text); QuestGenUtility.RunInner(action, text); } foreach (string outSignal in outSignals) { questPart_PassAnyOutMany.outSignals.Add(QuestGenUtility.HardcodedSignalWithQuestID(outSignal)); } questPart_PassAnyOutMany.signalListenMode = signalListenMode; quest.AddPart(questPart_PassAnyOutMany); }
public static void SignalPassAllSequence(this Quest quest, Action action = null, List <string> inSignals = null, string outSignal = null) { QuestPart_PassAllSequence questPart_PassAllSequence = new QuestPart_PassAllSequence(); questPart_PassAllSequence.inSignals = inSignals ?? new List <string> { QuestGen.slate.Get <string>("inSignal") }; if (action != null) { outSignal = outSignal ?? QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, outSignal); } questPart_PassAllSequence.outSignal = outSignal; quest.AddPart(questPart_PassAllSequence); }
protected override void RunInt() { Slate slate = QuestGen.slate; QuestPart_Filter_AnyPawnAlive questPart_Filter_AnyPawnAlive = new QuestPart_Filter_AnyPawnAlive { inSignal = (QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal")), pawns = pawns.GetValue(slate) }; if (node != null) { questPart_Filter_AnyPawnAlive.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInnerNode(node, questPart_Filter_AnyPawnAlive.outSignal); } QuestGen.quest.AddPart(questPart_Filter_AnyPawnAlive); }
public static QuestPart_PawnJoinOffer PawnJoinOffer(this Quest quest, Pawn pawn, string letterLabel, string letterTitle, string letterText, Action accepted = null, string inSignal = null, string outSignalPawnAccepted = null) { QuestPart_PawnJoinOffer questPart_PawnJoinOffer = new QuestPart_PawnJoinOffer(); questPart_PawnJoinOffer.pawn = pawn; questPart_PawnJoinOffer.inSignalEnable = inSignal ?? QuestGen.slate.Get <string>("inSignal"); questPart_PawnJoinOffer.outSignalPawnAccepted = outSignalPawnAccepted ?? QuestGen.GenerateNewSignal("Accepted"); questPart_PawnJoinOffer.letterLabel = letterLabel; questPart_PawnJoinOffer.letterText = letterText; questPart_PawnJoinOffer.letterTitle = letterTitle; if (accepted != null) { QuestGenUtility.RunInner(accepted, questPart_PawnJoinOffer.outSignalPawnAccepted); } quest.AddPart(questPart_PawnJoinOffer); return(questPart_PawnJoinOffer); }
public static void SignalPassOutMany(this Quest quest, Action action = null, string inSignal = null, IEnumerable <string> outSignals = null) { QuestPart_PassOutMany questPart_PassOutMany = new QuestPart_PassOutMany(); questPart_PassOutMany.inSignal = inSignal ?? QuestGen.slate.Get <string>("inSignal"); if (action != null) { string innerNodeInSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, innerNodeInSignal); } if (outSignals != null) { foreach (string outSignal in outSignals) { questPart_PassOutMany.outSignals.Add(outSignal); } } quest.AddPart(questPart_PassOutMany); }
public static QuestPart_ShuttleDelay ShuttleDelay(this Quest quest, int delayTicks, IEnumerable <Pawn> lodgers, Action complete = null, string inSignalEnable = null, IEnumerable <string> inSignalsDisable = null, bool alert = false) { QuestPart_ShuttleDelay questPart_ShuttleDelay = new QuestPart_ShuttleDelay(); questPart_ShuttleDelay.inSignalEnable = inSignalEnable ?? QuestGen.slate.Get <string>("inSignal"); questPart_ShuttleDelay.delayTicks = delayTicks; questPart_ShuttleDelay.alert = alert; if (lodgers != null) { questPart_ShuttleDelay.lodgers.AddRange(lodgers); } questPart_ShuttleDelay.expiryInfoPart = "ShuttleArrivesIn".Translate(); questPart_ShuttleDelay.expiryInfoPartTip = "ShuttleArrivesOn".Translate(); if (complete != null) { string text = QuestGen.GenerateNewSignal("ShuttleDelay"); QuestGenUtility.RunInner(complete, text); questPart_ShuttleDelay.outSignalsCompleted.Add(text); } quest.AddPart(questPart_ShuttleDelay); return(questPart_ShuttleDelay); }
public static void SignalPassWithFaction(this Quest quest, Faction faction, Action action = null, Action outAction = null, string inSignal = null, string outSignal = null) { QuestPart_PassWithFactionArg questPart_PassWithFactionArg = new QuestPart_PassWithFactionArg(); questPart_PassWithFactionArg.inSignal = inSignal ?? QuestGen.slate.Get <string>("inSignal"); questPart_PassWithFactionArg.faction = faction; questPart_PassWithFactionArg.outSignal = outSignal; if (action != null) { string innerNodeInSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); QuestGenUtility.RunInner(action, innerNodeInSignal); } if (outAction != null) { if (questPart_PassWithFactionArg.outSignal == null) { questPart_PassWithFactionArg.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted"); } QuestGenUtility.RunInner(outAction, questPart_PassWithFactionArg.outSignal); } quest.AddPart(questPart_PassWithFactionArg); }
public static QuestPart_Filter_AnyPawnPlayerControlled AnyPawnPlayerControlled(this Quest quest, IEnumerable <Pawn> pawns, Action action = null, Action elseAction = null, string inSignal = null, string outSignal = null, string outSignalElse = null, string inSignalRemovePawn = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_Filter_AnyPawnPlayerControlled questPart_Filter_AnyPawnPlayerControlled = new QuestPart_Filter_AnyPawnPlayerControlled(); questPart_Filter_AnyPawnPlayerControlled.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal"); questPart_Filter_AnyPawnPlayerControlled.signalListenMode = signalListenMode; questPart_Filter_AnyPawnPlayerControlled.pawns = pawns.ToList(); questPart_Filter_AnyPawnPlayerControlled.inSignalRemovePawn = inSignalRemovePawn; if (action != null) { QuestGenUtility.RunInner(action, questPart_Filter_AnyPawnPlayerControlled.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } if (elseAction != null) { QuestGenUtility.RunInner(elseAction, questPart_Filter_AnyPawnPlayerControlled.outSignalElse = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } quest.AddPart(questPart_Filter_AnyPawnPlayerControlled); return(questPart_Filter_AnyPawnPlayerControlled); }
public static QuestPart_Filter_FactionHostileToOtherFaction FactionHostileToOtherFaction(this Quest quest, Faction faction, Faction other, Action action = null, Action elseAction = null, string inSignal = null, string outSignal = null, string outSignalElse = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_Filter_FactionHostileToOtherFaction questPart_Filter_FactionHostileToOtherFaction = new QuestPart_Filter_FactionHostileToOtherFaction(); questPart_Filter_FactionHostileToOtherFaction.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal"); questPart_Filter_FactionHostileToOtherFaction.signalListenMode = signalListenMode; questPart_Filter_FactionHostileToOtherFaction.faction = faction; questPart_Filter_FactionHostileToOtherFaction.other = other; if (action != null) { QuestGenUtility.RunInner(action, questPart_Filter_FactionHostileToOtherFaction.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } if (elseAction != null) { QuestGenUtility.RunInner(elseAction, questPart_Filter_FactionHostileToOtherFaction.outSignalElse = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } quest.AddPart(questPart_Filter_FactionHostileToOtherFaction); return(questPart_Filter_FactionHostileToOtherFaction); }
public static QuestPart_Filter_AnyOnTransporter AnyOnTransporter(this Quest quest, IEnumerable <Pawn> pawns, Thing shuttle, Action action = null, Action elseAction = null, string inSignal = null, string outSignal = null, string outSignalElse = null, string inSignalRemovePawn = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_Filter_AnyOnTransporter questPart_Filter_AnyOnTransporter = new QuestPart_Filter_AnyOnTransporter(); questPart_Filter_AnyOnTransporter.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal"); questPart_Filter_AnyOnTransporter.signalListenMode = signalListenMode; questPart_Filter_AnyOnTransporter.pawns = pawns.ToList(); questPart_Filter_AnyOnTransporter.outSignal = outSignal; questPart_Filter_AnyOnTransporter.outSignalElse = outSignalElse; questPart_Filter_AnyOnTransporter.transporter = shuttle; if (action != null) { QuestGenUtility.RunInner(action, questPart_Filter_AnyOnTransporter.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } if (elseAction != null) { QuestGenUtility.RunInner(elseAction, questPart_Filter_AnyOnTransporter.outSignalElse = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } quest.AddPart(questPart_Filter_AnyOnTransporter); return(questPart_Filter_AnyOnTransporter); }
public static QuestPart_Filter_FactionNonPlayer FactionNonPlayer(this Quest quest, Action action = null, Action elseAction = null, string inSignal = null, string outSignal = null, string outSignalElse = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly) { QuestPart_Filter_FactionNonPlayer questPart_Filter_FactionNonPlayer = new QuestPart_Filter_FactionNonPlayer(); questPart_Filter_FactionNonPlayer.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal"); questPart_Filter_FactionNonPlayer.signalListenMode = signalListenMode; if (action != null) { QuestGenUtility.RunInner(action, questPart_Filter_FactionNonPlayer.outSignal = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } if (elseAction != null) { QuestGenUtility.RunInner(elseAction, questPart_Filter_FactionNonPlayer.outSignalElse = QuestGen.GenerateNewSignal("OuterNodeCompleted")); } quest.AddPart(questPart_Filter_FactionNonPlayer); return(questPart_Filter_FactionNonPlayer); }
protected override void RunInt() { if (!ModLister.RoyaltyInstalled) { Log.ErrorOnce("Hospitality refugee 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(); int num = (slate.Exists("population") ? slate.Get("population", 0) : map.mapPawns.FreeColonistsSpawnedCount); int lodgerCount = Mathf.Max(Mathf.RoundToInt(LodgerCountBasedOnColonyPopulationFactorRange.RandomInRange * (float)num), 1); lodgerCount = Mathf.Min(lodgerCount, MaxLodgerCount); int questDurationDays = QuestDurationDaysRange.RandomInRange; int questDurationTicks = questDurationDays * 60000; List <FactionRelation> list = new List <FactionRelation>(); foreach (Faction item4 in Find.FactionManager.AllFactionsListForReading) { if (!item4.def.permanentEnemy) { list.Add(new FactionRelation { other = item4, goodwill = 0, kind = FactionRelationKind.Neutral }); } } Faction faction = FactionGenerator.NewGeneratedFactionWithRelations(FactionDefOf.OutlanderRefugee, list); faction.hidden = true; faction.temporary = true; faction.hostileFromMemberCapture = false; Find.FactionManager.Add(faction); string lodgerRecruitedSignal = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.Recruited"); string text = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.Arrested"); string lodgerDestroyedSignal = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.Destroyed"); string lodgerKidnapped = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.Kidnapped"); string lodgerLeftMap = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.LeftMap"); string lodgerBanished = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.Banished"); List <Pawn> pawns = new List <Pawn>(); for (int i = 0; i < lodgerCount; i++) { Pawn pawn = quest.GeneratePawn(PawnKindDefOf.Refugee, faction, allowAddictions: true, null, 0f, mustBeCapableOfViolence: true, null, 0f, 0f, ensureNonNumericName: false, forceGenerateNewPawn: true); pawns.Add(pawn); quest.PawnJoinOffer(pawn, "LetterJoinOfferLabel".Translate(pawn.Named("PAWN")), "LetterJoinOfferTitle".Translate(pawn.Named("PAWN")), "LetterJoinOfferText".Translate(pawn.Named("PAWN"), map.Parent.Named("MAP")), delegate { quest.Letter(LetterDefOf.PositiveEvent, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, label: "LetterLabelMessageRecruitSuccess".Translate() + ": " + pawn.LabelShortCap, text: "MessageRecruitJoinOfferAccepted".Translate(pawn.Named("RECRUITEE"))); quest.SignalPass(null, null, lodgerRecruitedSignal); }); } slate.Set("lodgers", pawns); faction.leader = pawns.First(); Pawn var = pawns.First(); quest.SetFactionHidden(faction); QuestPart_ExtraFaction extraFactionPart = quest.ExtraFaction(faction, pawns, ExtraFactionType.MiniFaction, areHelpers: false, lodgerRecruitedSignal); quest.PawnsArrive(pawns, null, map.Parent, null, joinPlayer: true, null, "[lodgersArriveLetterLabel]", "[lodgersArriveLetterText]"); QuestPart_Choice questPart_Choice = quest.RewardChoice(); QuestPart_Choice.Choice item = new QuestPart_Choice.Choice { rewards = { (Reward) new Reward_VisitorsHelp(), (Reward) new Reward_PossibleFutureReward() } }; questPart_Choice.choices.Add(item); bool mutiny = false; string assaultColonySignal = QuestGen.GenerateNewSignal("AssaultColony"); Action item2 = delegate { int num4 = Mathf.FloorToInt(MutinyTimeRange.RandomInRange * (float)questDurationTicks); quest.Delay(num4, delegate { quest.Letter(LetterDefOf.ThreatBig, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[mutinyLetterText]", null, "[mutinyLetterLabel]"); quest.SignalPass(null, null, assaultColonySignal); QuestGen_End.End(quest, QuestEndOutcome.Unknown); }, null, null, null, reactivatable: false, null, null, isQuestTimeout: false, null, null, "Mutiny (" + num4.ToStringTicksToDays() + ")"); mutiny = true; }; Action item3 = delegate { Pawn factionOpponent = quest.GetPawn(new QuestGen_Pawns.GetPawnParms { mustBeWorldPawn = true, mustBeFactionLeader = true, canGeneratePawn = true, mustBeNonHostileToPlayer = true }); slate.Set("factionOpponent", factionOpponent); int num2 = Mathf.FloorToInt(BetrayalOfferTimeRange.RandomInRange * (float)questDurationTicks); quest.Delay(num2, delegate { float val2 = (float)lodgerCount * 300f; FloatRange value = new FloatRange(0.7f, 1.3f) * val2 * Find.Storyteller.difficultyValues.EffectiveQuestRewardValueFactor; ThingSetMakerParams parms = default(ThingSetMakerParams); parms.totalMarketValueRange = value; parms.qualityGenerator = QualityGenerator.Reward; parms.makingFaction = faction; List <Thing> betrayalRewardThings = ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(parms); quest.BetrayalOffer(pawns, extraFactionPart.extraFaction, factionOpponent, delegate { float num3 = 0f; for (int j = 0; j < betrayalRewardThings.Count; j++) { num3 += betrayalRewardThings[j].MarketValue * (float)betrayalRewardThings[j].stackCount; } slate.Set("betrayalRewards", GenLabel.ThingsLabel(betrayalRewardThings)); slate.Set("betrayalRewardMarketValue", num3); quest.DropPods(map.Parent, betrayalRewardThings, null, null, null, null, true, useTradeDropSpot: false, joinPlayer: false, makePrisoners: false, null, null, QuestPart.SignalListenMode.Always, null, destroyItemsOnCleanup: false); quest.FactionGoodwillChange(factionOpponent.Faction, 10, null, canSendMessage: true, canSendHostilityLetter: true, "GoodwillChangeReason_AttackedFaction".Translate(faction), getLookTargetFromSignal: true, QuestPart.SignalListenMode.Always); quest.Letter(LetterDefOf.PositiveEvent, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.Always, betrayalRewardThings, filterDeadPawnsFromLookTargets: false, "[betrayalOfferRewardLetterText]", null, "[betrayalOfferRewardLetterLabel]"); }, delegate { quest.DestroyThingsOrPassToWorld(betrayalRewardThings, null, questLookTargets: true, QuestPart.SignalListenMode.Always); quest.Letter(LetterDefOf.NegativeEvent, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.Always, null, filterDeadPawnsFromLookTargets: false, "[betrayalOfferFailedLetterText]", null, "[betrayalOfferFailedLetterLabel]"); }, delegate { (quest.Letter(LetterDefOf.BetrayVisitors, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[betrayalOffserLetterText]", null, "[betrayalOfferLetterLabel]").letter as ChoiceLetter_BetrayVisitors).pawns.AddRange(pawns); }, new List <string> { lodgerDestroyedSignal, lodgerKidnapped, lodgerLeftMap, lodgerBanished }, null, QuestPart.SignalListenMode.Always); }, null, null, null, reactivatable: false, null, null, isQuestTimeout: false, null, null, "BetrayalOffer (" + num2.ToStringTicksToDays() + ")"); }; if (new List <Tuple <float, Action> > { Tuple.Create(0.25f, item2), Tuple.Create(0.25f, item3), Tuple.Create <float, Action>(0.5f, delegate { }) }.TryRandomElementByWeight((Tuple <float, Action> t) => t.Item1, out var result)) { result.Item2(); } QuestPart_RefugeeInteractions questPart_RefugeeInteractions = new QuestPart_RefugeeInteractions(); questPart_RefugeeInteractions.inSignalEnable = QuestGen.slate.Get <string>("inSignal"); questPart_RefugeeInteractions.inSignalDestroyed = lodgerDestroyedSignal; questPart_RefugeeInteractions.inSignalArrested = text; questPart_RefugeeInteractions.inSignalSurgeryViolation = QuestGenUtility.HardcodedSignalWithQuestID("lodgers.SurgeryViolation"); questPart_RefugeeInteractions.inSignalKidnapped = lodgerKidnapped; questPart_RefugeeInteractions.inSignalRecruited = lodgerRecruitedSignal; questPart_RefugeeInteractions.inSignalAssaultColony = assaultColonySignal; questPart_RefugeeInteractions.inSignalLeftMap = lodgerLeftMap; questPart_RefugeeInteractions.inSignalBanished = lodgerBanished; questPart_RefugeeInteractions.outSignalDestroyed_AssaultColony = QuestGen.GenerateNewSignal("LodgerDestroyed_AssaultColony"); questPart_RefugeeInteractions.outSignalDestroyed_LeaveColony = QuestGen.GenerateNewSignal("LodgerDestroyed_LeaveColony"); questPart_RefugeeInteractions.outSignalDestroyed_BadThought = QuestGen.GenerateNewSignal("LodgerDestroyed_BadThought"); questPart_RefugeeInteractions.outSignalArrested_AssaultColony = QuestGen.GenerateNewSignal("LodgerArrested_AssaultColony"); questPart_RefugeeInteractions.outSignalArrested_LeaveColony = QuestGen.GenerateNewSignal("LodgerArrested_LeaveColony"); questPart_RefugeeInteractions.outSignalArrested_BadThought = QuestGen.GenerateNewSignal("LodgerArrested_BadThought"); questPart_RefugeeInteractions.outSignalSurgeryViolation_AssaultColony = QuestGen.GenerateNewSignal("LodgerSurgeryViolation_AssaultColony"); questPart_RefugeeInteractions.outSignalSurgeryViolation_LeaveColony = QuestGen.GenerateNewSignal("LodgerSurgeryViolation_LeaveColony"); questPart_RefugeeInteractions.outSignalSurgeryViolation_BadThought = QuestGen.GenerateNewSignal("LodgerSurgeryViolation_BadThought"); questPart_RefugeeInteractions.outSignalLast_Destroyed = QuestGen.GenerateNewSignal("LastLodger_Destroyed"); questPart_RefugeeInteractions.outSignalLast_Arrested = QuestGen.GenerateNewSignal("LastLodger_Arrested"); questPart_RefugeeInteractions.outSignalLast_Kidnapped = QuestGen.GenerateNewSignal("LastLodger_Kidnapped"); questPart_RefugeeInteractions.outSignalLast_Recruited = QuestGen.GenerateNewSignal("LastLodger_Recruited"); questPart_RefugeeInteractions.outSignalLast_LeftMapAllHealthy = QuestGen.GenerateNewSignal("LastLodger_LeftMapAllHealthy"); questPart_RefugeeInteractions.outSignalLast_LeftMapAllNotHealthy = QuestGen.GenerateNewSignal("LastLodger_LeftMapAllNotHealthy"); questPart_RefugeeInteractions.outSignalLast_Banished = QuestGen.GenerateNewSignal("LastLodger_Banished"); questPart_RefugeeInteractions.pawns.AddRange(pawns); questPart_RefugeeInteractions.faction = faction; questPart_RefugeeInteractions.mapParent = map.Parent; questPart_RefugeeInteractions.signalListenMode = QuestPart.SignalListenMode.Always; quest.AddPart(questPart_RefugeeInteractions); string lodgerArrestedOrRecruited = QuestGen.GenerateNewSignal("Lodger_ArrestedOrRecruited"); quest.AnySignal(new List <string> { lodgerRecruitedSignal, text }, null, new List <string> { lodgerArrestedOrRecruited }); if (!mutiny) { quest.Delay(questDurationTicks, delegate { quest.SignalPassWithFaction(faction, null, delegate { quest.Letter(LetterDefOf.PositiveEvent, null, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgersLeavingLetterText]", null, "[lodgersLeavingLetterLabel]"); }); quest.Leave(pawns, null, sendStandardLetter: false, leaveOnCleanup: false, lodgerArrestedOrRecruited); }, null, null, null, reactivatable: false, null, null, isQuestTimeout: false, "GuestsDepartsIn".Translate(), "GuestsDepartsOn".Translate(), "QuestDelay"); } quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalDestroyed_BadThought, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerDiedMemoryThoughtLetterText]", null, "[lodgerDiedMemoryThoughtLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalDestroyed_AssaultColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerDiedAttackPlayerLetterText]", null, "[lodgerDiedAttackPlayerLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalDestroyed_LeaveColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerDiedLeaveMapLetterText]", null, "[lodgerDiedLeaveMapLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalLast_Destroyed, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgersAllDiedLetterText]", null, "[lodgersAllDiedLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalArrested_BadThought, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerArrestedMemoryThoughtLetterText]", null, "[lodgerArrestedMemoryThoughtLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalArrested_AssaultColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerArrestedAttackPlayerLetterText]", null, "[lodgerArrestedAttackPlayerLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalArrested_LeaveColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerArrestedLeaveMapLetterText]", null, "[lodgerArrestedLeaveMapLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalLast_Arrested, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgersAllArrestedLetterText]", null, "[lodgersAllArrestedLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalSurgeryViolation_BadThought, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerViolatedMemoryThoughtLetterText]", null, "[lodgerViolatedMemoryThoughtLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalSurgeryViolation_AssaultColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerViolatedAttackPlayerLetterText]", null, "[lodgerViolatedAttackPlayerLetterLabel]"); quest.Letter(LetterDefOf.NegativeEvent, questPart_RefugeeInteractions.outSignalSurgeryViolation_LeaveColony, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, "[lodgerViolatedLeaveMapLetterText]", null, "[lodgerViolatedLeaveMapLetterLabel]"); quest.AddMemoryThought(pawns, ThoughtDefOf.OtherTravelerDied, questPart_RefugeeInteractions.outSignalDestroyed_BadThought); quest.AddMemoryThought(pawns, ThoughtDefOf.OtherTravelerArrested, questPart_RefugeeInteractions.outSignalArrested_BadThought); quest.AddMemoryThought(pawns, ThoughtDefOf.OtherTravelerSurgicallyViolated, questPart_RefugeeInteractions.outSignalSurgeryViolation_BadThought); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalDestroyed_AssaultColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalDestroyed_LeaveColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalLast_Destroyed); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalArrested_AssaultColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalArrested_LeaveColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalLast_Arrested); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalSurgeryViolation_AssaultColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalSurgeryViolation_LeaveColony, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalLast_Kidnapped, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Fail, 0, null, questPart_RefugeeInteractions.outSignalLast_Banished, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Success, 0, null, questPart_RefugeeInteractions.outSignalLast_Recruited, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.End(QuestEndOutcome.Success, 0, null, questPart_RefugeeInteractions.outSignalLast_LeftMapAllNotHealthy, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); quest.SignalPass(delegate { if (Rand.Chance(0.5f)) { float val = (float)(lodgerCount * questDurationDays) * 55f; FloatRange marketValueRange = new FloatRange(0.7f, 1.3f) * val * Find.Storyteller.difficultyValues.EffectiveQuestRewardValueFactor; quest.AddQuestRefugeeDelayedReward(quest.AccepterPawn, faction, pawns, marketValueRange); } quest.End(QuestEndOutcome.Success, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true); }, questPart_RefugeeInteractions.outSignalLast_LeftMapAllHealthy); slate.Set("lodgerCount", lodgerCount); slate.Set("lodgersCountMinusOne", lodgerCount - 1); slate.Set("asker", var); slate.Set("map", map); slate.Set("questDurationTicks", questDurationTicks); slate.Set("faction", faction); }
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); }