public static QuestPart_Delay Delay(this Quest quest, int delayTicks, Action inner, string inSignalEnable = null, string inSignalDisable = null, string outSignalComplete = null, bool reactivatable = false, IEnumerable <ISelectable> inspectStringTargets = null, string inspectString = null, bool isQuestTimeout = false, string expiryInfoPart = null, string expiryInfoPartTip = null, string debugLabel = null, bool tickHistorically = false, QuestPart.SignalListenMode signalListenMode = QuestPart.SignalListenMode.OngoingOnly)
        {
            QuestPart_Delay questPart_Delay = new QuestPart_Delay();

            questPart_Delay.delayTicks       = delayTicks;
            questPart_Delay.inSignalEnable   = QuestGenUtility.HardcodedSignalWithQuestID(inSignalEnable) ?? QuestGen.slate.Get <string>("inSignal");
            questPart_Delay.inSignalDisable  = QuestGenUtility.HardcodedSignalWithQuestID(inSignalDisable);
            questPart_Delay.reactivatable    = reactivatable;
            questPart_Delay.signalListenMode = signalListenMode;
            if (!inspectStringTargets.EnumerableNullOrEmpty())
            {
                questPart_Delay.inspectString        = inspectString;
                questPart_Delay.inspectStringTargets = new List <ISelectable>();
                questPart_Delay.inspectStringTargets.AddRange(inspectStringTargets);
            }
            if (isQuestTimeout)
            {
                questPart_Delay.isBad             = true;
                questPart_Delay.expiryInfoPart    = "QuestExpiresIn".Translate();
                questPart_Delay.expiryInfoPartTip = "QuestExpiresOn".Translate();
            }
            else
            {
                questPart_Delay.expiryInfoPart    = expiryInfoPart;
                questPart_Delay.expiryInfoPartTip = expiryInfoPartTip;
            }
            if (inner != null)
            {
                QuestGenUtility.RunInner(inner, questPart_Delay);
            }
            if (!outSignalComplete.NullOrEmpty())
            {
                questPart_Delay.outSignalsCompleted.Add(QuestGenUtility.HardcodedSignalWithQuestID(outSignalComplete));
            }
            if (!debugLabel.NullOrEmpty())
            {
                questPart_Delay.debugLabel = debugLabel;
            }
            quest.AddPart(questPart_Delay);
            return(questPart_Delay);
        }
        private void CreateDelayedIncident(int delayTicks, string delayInSignal, string disableSignal, IncidentDef incident, Map map, float points, Faction faction)
        {
            Quest           quest           = QuestGen.quest;
            QuestPart_Delay questPart_Delay = new QuestPart_Delay();

            questPart_Delay.delayTicks      = delayTicks;
            questPart_Delay.inSignalEnable  = delayInSignal;
            questPart_Delay.inSignalDisable = disableSignal;
            questPart_Delay.debugLabel      = questPart_Delay.delayTicks.ToStringTicksToDays() + "_" + incidentDef.ToString();
            quest.AddPart(questPart_Delay);
            QuestPart_Incident questPart_Incident = new QuestPart_Incident();

            questPart_Incident.incident = incident;
            questPart_Incident.inSignal = questPart_Delay.OutSignalCompleted;
            questPart_Incident.SetIncidentParmsAndRemoveTarget(new IncidentParms
            {
                forced  = true,
                target  = map,
                points  = points,
                faction = faction
            });
            quest.AddPart(questPart_Incident);
        }