示例#1
0
        public static void RunInnerNode(QuestNode node, QuestPartActivable outerQuestPart)
        {
            string text = QuestGen.GenerateNewSignal("OuterNodeCompleted");

            outerQuestPart.outSignalsCompleted.Add(text);
            RunInnerNode(node, text);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        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);
            }
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#14
0
        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);
        }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#18
0
        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);
        }
示例#19
0
        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);
        }
示例#20
0
        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);
        }
示例#21
0
        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);
        }
示例#22
0
        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);
        }