public static QuestPart_QuestEnd End(this Quest quest, QuestEndOutcome outcome, int goodwillChangeAmount = 0, Faction goodwillChangeFactionOf = null, string inSignal = null, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly, bool sendStandardLetter = false)
        {
            Slate slate = QuestGen.slate;

            if (goodwillChangeAmount != 0 && goodwillChangeFactionOf != null && goodwillChangeFactionOf != null)
            {
                QuestPart_FactionGoodwillChange questPart_FactionGoodwillChange = new QuestPart_FactionGoodwillChange();
                questPart_FactionGoodwillChange.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal");
                questPart_FactionGoodwillChange.faction  = goodwillChangeFactionOf;
                questPart_FactionGoodwillChange.change   = goodwillChangeAmount;
                slate.Set("goodwillPenalty", Mathf.Abs(goodwillChangeAmount).ToString());
                QuestGen.quest.AddPart(questPart_FactionGoodwillChange);
            }
            QuestPart_QuestEnd questPart_QuestEnd = new QuestPart_QuestEnd();

            questPart_QuestEnd.inSignal         = QuestGenUtility.HardcodedSignalWithQuestID(inSignal) ?? QuestGen.slate.Get <string>("inSignal");
            questPart_QuestEnd.outcome          = outcome;
            questPart_QuestEnd.signalListenMode = signalListenMode;
            questPart_QuestEnd.sendLetter       = sendStandardLetter;
            QuestGen.quest.AddPart(questPart_QuestEnd);
            return(questPart_QuestEnd);
        }
        protected override void RunInt()
        {
            Slate slate  = QuestGen.slate;
            int   value  = goodwillChangeAmount.GetValue(slate);
            Thing value2 = goodwillChangeFactionOf.GetValue(slate);

            if (value != 0 && value2 != null && value2.Faction != null)
            {
                QuestPart_FactionGoodwillChange questPart_FactionGoodwillChange = new QuestPart_FactionGoodwillChange();
                questPart_FactionGoodwillChange.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
                questPart_FactionGoodwillChange.faction  = value2.Faction;
                questPart_FactionGoodwillChange.change   = value;
                slate.Set("goodwillPenalty", Mathf.Abs(value).ToString());
                QuestGen.quest.AddPart(questPart_FactionGoodwillChange);
            }
            QuestPart_QuestEnd questPart_QuestEnd = new QuestPart_QuestEnd();

            questPart_QuestEnd.inSignal         = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
            questPart_QuestEnd.outcome          = outcome.GetValue(slate);
            questPart_QuestEnd.signalListenMode = signalListenMode.GetValue(slate) ?? QuestPart.SignalListenMode.OngoingOnly;
            questPart_QuestEnd.sendLetter       = sendStandardLetter.GetValue(slate) ?? false;
            QuestGen.quest.AddPart(questPart_QuestEnd);
        }