public static void QuestExample()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (QuestScriptDef allDef in DefDatabase <QuestScriptDef> .AllDefs)
            {
                QuestScriptDef localRuleDef = allDef;
                list.Add(new DebugMenuOption(localRuleDef.defName, DebugMenuOptionMode.Action, delegate
                {
                    List <DebugMenuOption> list2 = new List <DebugMenuOption>();
                    float localPoints            = default(float);
                    foreach (float item in DebugActionsUtility.PointsOptions(extended: true))
                    {
                        localPoints = item;
                        list2.Add(new DebugMenuOption(item.ToString("F0"), DebugMenuOptionMode.Action, delegate
                        {
                            Slate slate = new Slate();
                            slate.Set("points", localPoints);
                            Quest saveable = QuestGen.Generate(localRuleDef, slate);
                            Log.Message(Scribe.saver.DebugOutputFor(saveable));
                        }));
                    }
                    Find.WindowStack.Add(new Dialog_DebugOptionListLister(list2));
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
 public QuestTracker(QuestTracker reference) : base(reference)
 {
     def            = reference.def;
     outcome        = reference.outcome;
     count          = reference.count;
     triggeredCount = reference.triggeredCount;
 }
Exemplo n.º 3
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     if (!respawningAfterLoad && !this.initialized)
     {
         //Log.Message(this + " is created", true);
         this.initialized   = true;
         this.questToUnlock = DefDatabase <QuestScriptDef> .AllDefs.Where(q => q.IsRootAny && this.HasMapNode(q.root)).RandomElement();
     }
 }
Exemplo n.º 4
0
        public static bool Prefix(ref bool __result, QuestScriptDef __instance)
        {
            TechLevel questTech;

            if (IgnoranceSettings.changeQuests && IgnoranceBase.questScriptDefs.TryGetValue(__instance.defName, out questTech))
            {
                if (!IgnoranceBase.TechIsEligibleForIncident(questTech))
                {
                    __result = false;
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 5
0
        public override void Execute()
        {
            QuestScriptDef scriptDef = DefDatabase <QuestScriptDef> .GetNamed("TKUtilsViewerRescue");

            float threatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            var component = Current.Game.GetComponent <GameComponentPawns>();

            if (component != null && component.pawnHistory.ContainsKey(Viewer.username.ToLower()))
            {
                component.pawnHistory.Remove(Viewer.username.ToLower());
            }

            ViewerRescue.QueuedViewers.Enqueue(_report);
            QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(scriptDef, threatPoints));
            Viewer.Charge(storeIncident);
        }
 private void SetPoints(QuestScriptDef script, Slate slate, float points)
 {
     if (script != null)
     {
         if (script.IsRootDecree)
         {
             slate.Set("asker", PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.RandomElement());
         }
         if (script == QuestScriptDefOf.LongRangeMineralScannerLump)
         {
             slate.Set("targetMineableThing", ThingDefOf.Gold);
             slate.Set("targetMineable", ThingDefOf.MineableGold);
             slate.Set("worker", PawnsFinder.AllMaps_FreeColonists.FirstOrDefault());
         }
         slate.Set("points", points);
     }
 }
 public override bool TryExecuteEvent()
 {
     try
     {
         Slate          slate  = new Slate();
         float          points = StorytellerUtility.DefaultSiteThreatPointsNow();
         QuestScriptDef script = NaturalRandomQuestChooser.ChooseNaturalRandomQuest(points, Find.CurrentMap);
         SetPoints(script, slate, points);
         GenerateQuest(script, slate);
     }
     catch (Exception ex)
     {
         Log.Error($"Failed to generate random quest reward. Exception: {ex.Message}");
         return(false);
     }
     return(true);
 }
Exemplo n.º 8
0
 public void TestNode(QuestNode node, Pawn questGiver, QuestScriptDef script)
 {
     if (node is QuestNode_Sequence sequence)
     {
         foreach (var newNode in sequence.nodes.ListFullCopy())
         {
             Log.Message(script + " - Node2: " + newNode);
             TestNode(newNode, questGiver, script);
         }
     }
     else if (node is QuestNode_RandomNode randomNode)
     {
         foreach (var newNode in randomNode.nodes)
         {
             Log.Message(script + " - Node2: " + newNode);
             TestNode(newNode, questGiver, script);
         }
     }
 }
Exemplo n.º 9
0
        public static void Postfix(QuestScriptDef root, Slate initialVars, ref Quest __result)
        {
            if (RealInvolvedFactions(__result).Any(f => f.def.HasModExtension <ExcludeFromQuestsExtension>()))
            {
                // Log.Message($"QuestGen Generate - {__result.name} contains not allowed faction(s) - Regenerating quest...");
                Quest newResult = null;

                while (newResult == null || RealInvolvedFactions(newResult).Any(f => f.def.HasModExtension <ExcludeFromQuestsExtension>()))
                {
                    newResult = QuestGen.Generate(root, initialVars);
                    iterationNumber++;
                }

                __result = newResult;
            }
            if (iterationNumber > 0)
            {
                // Log.Message($"QuestGen Generate - Regenerated quest {iterationNumber} time - Regeneration ended...");
                iterationNumber = 0;
            }
        }
 private void GenerateQuest(QuestScriptDef script, Slate slate)
 {
     if (script.IsRootDecree)
     {
         Pawn pawn = slate.Get <Pawn>("asker");
         if (pawn.royalty.AllTitlesForReading.NullOrEmpty())
         {
             pawn.royalty.SetTitle(Faction.OfEmpire, RoyalTitleDefOf.Knight, grantRewards: false);
             Messages.Message("Dev: Gave " + RoyalTitleDefOf.Knight.label + " title to " + pawn.LabelCap, pawn, MessageTypeDefOf.NeutralEvent, historical: false);
         }
         Find.CurrentMap.StoryState.RecordDecreeFired(script);
     }
     else
     {
         Quest quest = QuestUtility.GenerateQuestAndMakeAvailable(script, slate);
         if (!quest.hidden)
         {
             QuestUtility.SendLetterQuestAvailable(quest);
         }
     }
 }
Exemplo n.º 11
0
 private bool IsAcceptableQuest(QuestScriptDef x)
 {
     return((x.defName.Contains("OpportunitySite_") ||
             (x.defName.Contains("Hospitality_") && !x.defName.Contains("Util_"))) &&
            (x.GetModExtension <RimQuest_ModExtension>()?.canBeARimQuest ?? true)); //mod extension value if not null, otherwise assumed true.
 }
Exemplo n.º 12
0
        public static Quest Generate(QuestScriptDef root, Slate initialVars)
        {
            if (DeepProfiler.enabled)
            {
                DeepProfiler.Start("Generate quest");
            }
            Quest result = null;

            try
            {
                if (working)
                {
                    throw new Exception("Called Generate() while already working.");
                }
                working       = true;
                QuestGen.root = root;
                slate.Reset();
                slate.SetAll(initialVars);
                quest = Quest.MakeRaw();
                quest.ticksUntilAcceptanceExpiry = (int)(root.expireDaysRange.RandomInRange * 60000f);
                if (root.defaultChallengeRating > 0)
                {
                    quest.challengeRating = root.defaultChallengeRating;
                }
                quest.root   = root;
                quest.hidden = root.defaultHidden;
                slate.SetIfNone("inSignal", quest.InitiateSignal);
                root.Run();
                try
                {
                    QuestNode_ResolveQuestName.Resolve();
                }
                catch (Exception arg)
                {
                    Log.Error("Error while generating quest name: " + arg);
                }
                try
                {
                    QuestNode_ResolveQuestDescription.Resolve();
                }
                catch (Exception arg2)
                {
                    Log.Error("Error while generating quest description: " + arg2);
                }
                try
                {
                    QuestNode_ResolveTextRequests.Resolve();
                }
                catch (Exception arg3)
                {
                    Log.Error("Error while resolving text requests: " + arg3);
                }
                AddSlateQuestTags();
                bool flag = root.autoAccept;
                if (flag)
                {
                    List <QuestPart> partsListForReading = quest.PartsListForReading;
                    for (int i = 0; i < partsListForReading.Count; i++)
                    {
                        if (partsListForReading[i].PreventsAutoAccept)
                        {
                            flag = false;
                            break;
                        }
                    }
                }
                if (flag)
                {
                    quest.SetInitiallyAccepted();
                }
                result = quest;
                return(result);
            }
            catch (Exception arg4)
            {
                Log.Error("Error in QuestGen: " + arg4);
                return(result);
            }
            finally
            {
                if (DeepProfiler.enabled)
                {
                    DeepProfiler.End();
                }
                quest         = null;
                QuestGen.root = null;
                working       = false;
                generatedPawns.Clear();
                textRequests.Clear();
                slate.Reset();
                questDescriptionRules.Clear();
                questDescriptionConstants.Clear();
                questNameRules.Clear();
                questNameConstants.Clear();
                questContentRules.Clear();
                slateQuestTagsToAddWhenFinished.Clear();
                ResetIdCounters();
            }
        }
Exemplo n.º 13
0
        private static void GenerateQuests(int count, bool logDescOnly)
        {
            List <DebugMenuOption> list      = new List <DebugMenuOption>();
            float localPoints                = default(float);
            Slate testSlate                  = default(Slate);
            Action <QuestScriptDef> generate = delegate(QuestScriptDef script)
            {
                List <DebugMenuOption> list2 = new List <DebugMenuOption>();
                foreach (float item in DebugActionsUtility.PointsOptions(extended: false))
                {
                    localPoints = item;
                    string text = item.ToString("F0");
                    testSlate = new Slate();
                    testSlate.Set("points", localPoints);
                    if (script != null)
                    {
                        if (script.IsRootDecree)
                        {
                            testSlate.Set("asker", PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.RandomElement());
                        }
                        if (script == QuestScriptDefOf.LongRangeMineralScannerLump)
                        {
                            testSlate.Set("targetMineable", ThingDefOf.MineableGold);
                            testSlate.Set("worker", PawnsFinder.AllMaps_FreeColonists.FirstOrDefault());
                        }
                        if (!script.CanRun(testSlate))
                        {
                            text += " [not now]";
                        }
                    }
                    list2.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate
                    {
                        int num   = 0;
                        bool flag = script == null;
                        for (int i = 0; i < count; i++)
                        {
                            if (flag)
                            {
                                script = NaturalRandomQuestChooser.ChooseNaturalRandomQuest(localPoints, Find.CurrentMap);
                                Find.CurrentMap.StoryState.RecordRandomQuestFired(script);
                            }
                            if (script.IsRootDecree)
                            {
                                Pawn pawn = testSlate.Get <Pawn>("asker");
                                if (pawn.royalty.AllTitlesForReading.NullOrEmpty())
                                {
                                    pawn.royalty.SetTitle(Faction.Empire, RoyalTitleDefOf.Knight, grantRewards: false);
                                    Messages.Message("Dev: Gave " + RoyalTitleDefOf.Knight.label + " title to " + pawn.LabelCap, pawn, MessageTypeDefOf.NeutralEvent, historical: false);
                                }
                                Find.CurrentMap.StoryState.RecordDecreeFired(script);
                            }
                            if (count != 1 && !script.CanRun(testSlate))
                            {
                                num++;
                            }
                            else if (!logDescOnly)
                            {
                                QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(script, testSlate));
                            }
                            else
                            {
                                Quest quest = QuestUtility.GenerateQuestAndMakeAvailable(script, testSlate);
                                Log.Message(quest.name + " (" + localPoints + " points)\n--------------\n" + quest.description + "\n--------------");
                                Find.QuestManager.Remove(quest);
                            }
                        }
                        if (num != 0)
                        {
                            Messages.Message("Dev: Generated only " + (count - num) + " quests.", MessageTypeDefOf.RejectInput, historical: false);
                        }
                    }));
                }
                Find.WindowStack.Add(new Dialog_DebugOptionListLister(list2));
            };

            list.Add(new DebugMenuOption("*Natural random", DebugMenuOptionMode.Action, delegate
            {
                generate(null);
            }));
            foreach (QuestScriptDef item2 in DefDatabase <QuestScriptDef> .AllDefs.Where((QuestScriptDef x) => x.IsRootAny))
            {
                QuestScriptDef localRuleDef = item2;
                string         defName      = localRuleDef.defName;
                list.Add(new DebugMenuOption(defName, DebugMenuOptionMode.Action, delegate
                {
                    generate(localRuleDef);
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list.OrderBy((DebugMenuOption op) => op.label)));
        }
        private static void RoyalFavorAvailability()
        {
            StorytellerCompProperties_OnOffCycle storytellerCompProperties_OnOffCycle = (StorytellerCompProperties_OnOffCycle)StorytellerDefOf.Cassandra.comps.Find(delegate(StorytellerCompProperties x)
            {
                StorytellerCompProperties_OnOffCycle storytellerCompProperties_OnOffCycle2 = x as StorytellerCompProperties_OnOffCycle;
                if (storytellerCompProperties_OnOffCycle2 == null)
                {
                    return(false);
                }
                if (storytellerCompProperties_OnOffCycle2.IncidentCategory != IncidentCategoryDefOf.GiveQuest)
                {
                    return(false);
                }
                return((storytellerCompProperties_OnOffCycle2.enableIfAnyModActive != null && storytellerCompProperties_OnOffCycle2.enableIfAnyModActive.Any((string m) => m.ToLower() == ModContentPack.RoyaltyModPackageId)) ? true : false);
            });
            float       onDays      = storytellerCompProperties_OnOffCycle.onDays;
            float       average     = storytellerCompProperties_OnOffCycle.numIncidentsRange.Average;
            float       num         = average / onDays;
            SimpleCurve simpleCurve = new SimpleCurve
            {
                new CurvePoint(0f, 35f),
                new CurvePoint(15f, 150f),
                new CurvePoint(150f, 5000f)
            };
            int num2 = 0;
            List <RoyalTitleDef> royalTitlesAwardableInSeniorityOrderForReading = FactionDefOf.Empire.RoyalTitlesAwardableInSeniorityOrderForReading;

            for (int i = 0; i < royalTitlesAwardableInSeniorityOrderForReading.Count; i++)
            {
                num2 += royalTitlesAwardableInSeniorityOrderForReading[i].favorCost;
                if (royalTitlesAwardableInSeniorityOrderForReading[i] == RoyalTitleDefOf.Count)
                {
                    break;
                }
            }
            float      num3       = 0f;
            int        num4       = 0;
            int        num5       = 0;
            int        num6       = 0;
            int        num7       = 0;
            int        num8       = -1;
            int        num9       = -1;
            int        num10      = -1;
            int        ticksGame  = Find.TickManager.TicksGame;
            StoryState storyState = new StoryState(Find.World);

            for (int j = 0; j < 200; j++)
            {
                Find.TickManager.DebugSetTicksGame(j * 60000);
                num3 += num * storytellerCompProperties_OnOffCycle.acceptFractionByDaysPassedCurve.Evaluate(j);
                while (num3 >= 1f)
                {
                    num3 -= 1f;
                    num4++;
                    float points = simpleCurve.Evaluate(j);
                    Slate slate  = new Slate();
                    slate.Set("points", points);
                    QuestScriptDef questScriptDef = DefDatabase <QuestScriptDef> .AllDefsListForReading.Where((QuestScriptDef x) => x.IsRootRandomSelected && x.CanRun(slate)).RandomElementByWeight((QuestScriptDef x) => NaturalRandomQuestChooser.GetNaturalRandomSelectionWeight(x, points, storyState));

                    Quest quest = QuestGen.Generate(questScriptDef, slate);
                    if (quest.InvolvedFactions.Contains(Faction.Empire))
                    {
                        num7++;
                    }
                    QuestPart_GiveRoyalFavor questPart_GiveRoyalFavor = (QuestPart_GiveRoyalFavor)quest.PartsListForReading.Find((QuestPart x) => x is QuestPart_GiveRoyalFavor);
                    if (questPart_GiveRoyalFavor != null)
                    {
                        num5 += questPart_GiveRoyalFavor.amount;
                        num6++;
                        if (num5 >= num2 && num8 < 0)
                        {
                            num8 = j;
                        }
                        if (num9 < 0 || questPart_GiveRoyalFavor.amount < num9)
                        {
                            num9 = questPart_GiveRoyalFavor.amount;
                        }
                        if (num10 < 0 || questPart_GiveRoyalFavor.amount > num10)
                        {
                            num10 = questPart_GiveRoyalFavor.amount;
                        }
                    }
                    storyState.RecordRandomQuestFired(questScriptDef);
                    quest.CleanupQuestParts();
                }
            }
            Find.TickManager.DebugSetTicksGame(ticksGame);
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("Results for: Days=" + 200 + ", intervalDays=" + onDays + ", questsPerInterval=" + average + ":");
            stringBuilder.AppendLine("Quests: " + num4);
            stringBuilder.AppendLine("Quests with honor: " + num6);
            stringBuilder.AppendLine("Quests from Empire: " + num7);
            stringBuilder.AppendLine("Min honor reward: " + num9);
            stringBuilder.AppendLine("Max honor reward: " + num10);
            stringBuilder.AppendLine("Total honor: " + num5);
            stringBuilder.AppendLine("Honor required for Count: " + num2);
            stringBuilder.AppendLine("Count title possible on day: " + num8);
            Log.Message(stringBuilder.ToString());
        }
Exemplo n.º 15
0
 public void GetNewRoot(QuestNode origRoot, ref QuestNode newRoot, Pawn questGiver, QuestScriptDef script)
 {
     if (origRoot is QuestNode_Sequence sequence1)
     {
         var newSequence     = new QuestNode_Sequence();
         var newSequenceNode = (QuestNode)newSequence;
         if (newRoot is QuestNode_Sequence sequence5)
         {
             sequence5.nodes.Add(newSequence);
         }
         else if (newRoot is QuestNode_RandomNode sequence6)
         {
             sequence6.nodes.Add(newSequence);
         }
         foreach (var node in sequence1.nodes)
         {
             GetNewRoot(node, ref newSequenceNode, questGiver, script);
         }
     }
     else if (origRoot is QuestNode_RandomNode sequence2)
     {
         var newSequence     = new QuestNode_RandomNode();
         var newSequenceNode = (QuestNode)newSequence;
         if (newRoot is QuestNode_Sequence sequence5)
         {
             sequence5.nodes.Add(newSequence);
         }
         else if (newRoot is QuestNode_RandomNode sequence6)
         {
             sequence6.nodes.Add(newSequence);
         }
         foreach (var node in sequence2.nodes)
         {
             GetNewRoot(node, ref newSequenceNode, questGiver, script);
         }
     }
     else if (origRoot is QuestNode_GetPawn)
     {
         var getPawn2 = new QuestNode_GetPawnForQuest();
         getPawn2.questGiver = questGiver;
         if (newRoot is QuestNode_Sequence sequence3)
         {
             sequence3.nodes.Add(getPawn2);
         }
         else if (newRoot is QuestNode_RandomNode sequence4)
         {
             sequence4.nodes.Add(getPawn2);
         }
     }
     else if (origRoot is QuestNode_GetFaction)
     {
         var getFaction2 = new QuestNode_GetFactionForQuest();
         getFaction2.questGiverFaction = questGiver.Faction;
         if (newRoot is QuestNode_Sequence sequence3)
         {
             sequence3.nodes.Add(getFaction2);
         }
         else if (newRoot is QuestNode_RandomNode sequence4)
         {
             sequence4.nodes.Add(getFaction2);
         }
     }
     else
     {
         if (newRoot is QuestNode_Sequence sequence3)
         {
             sequence3.nodes.Add(origRoot);
         }
         else if (newRoot is QuestNode_RandomNode sequence4)
         {
             sequence4.nodes.Add(origRoot);
         }
     }
 }
        public static void QuestRewardsSampled()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (QuestScriptDef quest in DefDatabase <QuestScriptDef> .AllDefsListForReading)
            {
                if (!quest.IsRootAny)
                {
                    continue;
                }
                QuestScriptDef localQuest = quest;
                list.Add(new DebugMenuOption(quest.defName, DebugMenuOptionMode.Action, delegate
                {
                    Dictionary <float, int> numQuestsRating1           = new Dictionary <float, int>();
                    Dictionary <float, int> numQuestsRating2           = new Dictionary <float, int>();
                    Dictionary <float, int> numQuestsRating3           = new Dictionary <float, int>();
                    Dictionary <float, float> rewardRating1min         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating1max         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating1accumulated = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating2min         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating2max         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating2accumulated = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating3min         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating3max         = new Dictionary <float, float>();
                    Dictionary <float, float> rewardRating3accumulated = new Dictionary <float, float>();
                    float[] questRewardDebugPointLevels = QuestRewardDebugPointLevels;
                    foreach (float num in questRewardDebugPointLevels)
                    {
                        if (!(num < quest.rootMinPoints))
                        {
                            numQuestsRating1.Add(num, 0);
                            numQuestsRating2.Add(num, 0);
                            numQuestsRating3.Add(num, 0);
                            Slate slate = new Slate();
                            slate.Set("points", num);
                            slate.Set("debugDontGenerateRewardThings", var: true);
                            rewardRating1min.Add(num, 9999999f);
                            rewardRating2min.Add(num, 9999999f);
                            rewardRating3min.Add(num, 9999999f);
                            rewardRating1max.Add(num, -9999999f);
                            rewardRating2max.Add(num, -9999999f);
                            rewardRating3max.Add(num, -9999999f);
                            rewardRating1accumulated.Add(num, 0f);
                            rewardRating2accumulated.Add(num, 0f);
                            rewardRating3accumulated.Add(num, 0f);
                            for (int j = 0; j < 20; j++)
                            {
                                lastQuestGeneratedRewardValue = 0f;
                                Quest quest2 = QuestGen.Generate(localQuest, slate.DeepCopy());
                                float num2   = lastQuestGeneratedRewardValue;
                                if (quest2.challengeRating == 1)
                                {
                                    numQuestsRating1[num]++;
                                    rewardRating1min[num]          = Mathf.Min(rewardRating1min[num], num2);
                                    rewardRating1max[num]          = Mathf.Max(rewardRating1max[num], num2);
                                    rewardRating1accumulated[num] += num2;
                                }
                                else if (quest2.challengeRating == 2)
                                {
                                    numQuestsRating2[num]++;
                                    rewardRating2min[num]          = Mathf.Min(rewardRating2min[num], num2);
                                    rewardRating2max[num]          = Mathf.Max(rewardRating2max[num], num2);
                                    rewardRating2accumulated[num] += num2;
                                }
                                else if (quest2.challengeRating == 3)
                                {
                                    numQuestsRating3[num]++;
                                    rewardRating3min[num]          = Mathf.Min(rewardRating3min[num], num2);
                                    rewardRating3max[num]          = Mathf.Max(rewardRating3max[num], num2);
                                    rewardRating3accumulated[num] += num2;
                                }
                            }
                        }
                    }
                    DebugTables.MakeTablesDialog(QuestRewardDebugPointLevels, new TableDataGetter <float>("points", (float v) => v.ToString()), new TableDataGetter <float>("rating 1\nquest count\nof " + 20, (float v) => numQuestsRating1[v].ToString()), new TableDataGetter <float>("rating 1\nrewardValue\nmin", (float v) => (rewardRating1min[v] != 9999999f) ? ((int)rewardRating1min[v]).ToString() : "-"), new TableDataGetter <float>("rating 1\nrewardValue\navg", (float v) => (!(rewardRating1accumulated[v] <= 0f)) ? ((int)(rewardRating1accumulated[v] / (float)numQuestsRating1[v])).ToString() : "-"), new TableDataGetter <float>("rating 1\nrewardValue\nmax", (float v) => (rewardRating1max[v] != -9999999f) ? ((int)rewardRating1max[v]).ToString() : "-"), new TableDataGetter <float>("rating 2\nquest count\nof " + 20, (float v) => numQuestsRating2[v].ToString()), new TableDataGetter <float>("rating 2\nrewardValue\nmin", (float v) => (rewardRating2min[v] != 9999999f) ? ((int)rewardRating2min[v]).ToString() : "-"), new TableDataGetter <float>("rating 2\nrewardValue\navg", (float v) => (!(rewardRating2accumulated[v] <= 0f)) ? ((int)(rewardRating2accumulated[v] / (float)numQuestsRating2[v])).ToString() : "-"), new TableDataGetter <float>("rating 2\nrewardValue\nmax", (float v) => (rewardRating2max[v] != -9999999f) ? ((int)rewardRating2max[v]).ToString() : "-"), new TableDataGetter <float>("rating 3\nquest count\nof " + 20, (float v) => numQuestsRating3[v].ToString()), new TableDataGetter <float>("rating 3\nrewardValue\nmin", (float v) => (rewardRating3min[v] != 9999999f) ? ((int)rewardRating3min[v]).ToString() : "-"), new TableDataGetter <float>("rating 3\nrewardValue\navg", (float v) => (!(rewardRating3accumulated[v] <= 0f)) ? ((int)(rewardRating3accumulated[v] / (float)numQuestsRating3[v])).ToString() : "-"), new TableDataGetter <float>("rating 3\nrewardValue\nmax", (float v) => (rewardRating3max[v] != -9999999f) ? ((int)rewardRating3max[v]).ToString() : "-"));
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
        private static void GenerateQuests(int count, bool logDescOnly)
        {
            Action <QuestScriptDef, Slate> generateQuest = delegate(QuestScriptDef script, Slate slate)
            {
                int num = 0;
                for (int i = 0; i < count; i++)
                {
                    if (script.IsRootDecree)
                    {
                        Pawn pawn = slate.Get <Pawn>("asker");
                        if (pawn.royalty.AllTitlesForReading.NullOrEmpty())
                        {
                            pawn.royalty.SetTitle(Faction.Empire, RoyalTitleDefOf.Knight, grantRewards: false);
                            Messages.Message("Dev: Gave " + RoyalTitleDefOf.Knight.label + " title to " + pawn.LabelCap, pawn, MessageTypeDefOf.NeutralEvent, historical: false);
                        }
                        Find.CurrentMap.StoryState.RecordDecreeFired(script);
                    }
                    if (count != 1 && !script.CanRun(slate))
                    {
                        num++;
                    }
                    else if (!logDescOnly)
                    {
                        Quest quest = QuestUtility.GenerateQuestAndMakeAvailable(script, slate);
                        if (!quest.hidden)
                        {
                            QuestUtility.SendLetterQuestAvailable(quest);
                        }
                    }
                    else
                    {
                        Quest  quest2 = QuestUtility.GenerateQuestAndMakeAvailable(script, slate);
                        string text2  = quest2.name;
                        if (slate.Exists("points"))
                        {
                            text2 = text2 + "(" + slate.Get("points", 0f) + " points)";
                        }
                        if (slate.Exists("population"))
                        {
                            text2 = text2 + "(" + slate.Get("population", 0) + " population)";
                        }
                        text2 += "\n--------------\n" + quest2.description + "\n--------------";
                        Log.Message(text2);
                        Find.QuestManager.Remove(quest2);
                    }
                }
                if (num != 0)
                {
                    Messages.Message("Dev: Generated only " + (count - num) + " quests.", MessageTypeDefOf.RejectInput, historical: false);
                }
            };
            Action <QuestScriptDef, Slate, Action> selectPoints = delegate(QuestScriptDef script, Slate slate, Action next)
            {
                List <DebugMenuOption> list3 = new List <DebugMenuOption>();
                float localPoints            = default(float);
                foreach (float item in DebugActionsUtility.PointsOptions(extended: false))
                {
                    localPoints = item;
                    string text = item.ToString("F0") + " points";
                    if (script != null)
                    {
                        if (script.IsRootDecree)
                        {
                            slate.Set("asker", PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.RandomElement());
                        }
                        if (script == QuestScriptDefOf.LongRangeMineralScannerLump)
                        {
                            slate.Set("targetMineableThing", ThingDefOf.Gold);
                            slate.Set("targetMineable", ThingDefOf.MineableGold);
                            slate.Set("worker", PawnsFinder.AllMaps_FreeColonists.FirstOrDefault());
                        }
                        slate.Set("points", localPoints);
                        if (!script.CanRun(slate))
                        {
                            text += " [not now]";
                        }
                    }
                    list3.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate
                    {
                        slate.Set("points", localPoints);
                        next();
                    }));
                }
                Find.WindowStack.Add(new Dialog_DebugOptionListLister(list3));
            };
            Action <Slate, Action> selectPopulation = delegate(Slate slate, Action next)
            {
                List <DebugMenuOption> list2 = new List <DebugMenuOption>
                {
                    new DebugMenuOption("*Don't set", DebugMenuOptionMode.Action, next)
                };
                int localPopulation = default(int);
                foreach (int item2 in DebugActionsUtility.PopulationOptions())
                {
                    localPopulation = item2;
                    list2.Add(new DebugMenuOption(item2.ToString("F0") + " colony population", DebugMenuOptionMode.Action, delegate
                    {
                        slate.Set("population", localPopulation);
                        next();
                    }));
                }
                Find.WindowStack.Add(new Dialog_DebugOptionListLister(list2));
            };
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            list.Add(new DebugMenuOption("*Natural random", DebugMenuOptionMode.Action, delegate
            {
                Slate slate3 = new Slate();
                selectPoints(null, slate3, delegate
                {
                    float points           = slate3.Get("points", 0f);
                    QuestScriptDef script2 = NaturalRandomQuestChooser.ChooseNaturalRandomQuest(points, Find.CurrentMap);
                    if (script2.affectedByPopulation)
                    {
                        selectPopulation(slate3, delegate
                        {
                            generateQuest(script2, slate3);
                        });
                    }
                    else
                    {
                        generateQuest(script2, slate3);
                    }
                });
            }));
            foreach (QuestScriptDef scriptDef in DefDatabase <QuestScriptDef> .AllDefs.Where((QuestScriptDef x) => x.IsRootAny))
            {
                QuestScriptDef localScriptDef = scriptDef;
                string         defName        = localScriptDef.defName;
                list.Add(new DebugMenuOption(defName, DebugMenuOptionMode.Action, delegate
                {
                    Slate slate2 = new Slate();
                    if (localScriptDef.affectedByPoints && localScriptDef.affectedByPopulation)
                    {
                        selectPoints(localScriptDef, slate2, delegate
                        {
                            selectPopulation(slate2, delegate
                            {
                                generateQuest(localScriptDef, slate2);
                            });
                        });
                    }
                    else if (scriptDef.affectedByPoints)
                    {
                        selectPoints(localScriptDef, slate2, delegate
                        {
                            generateQuest(localScriptDef, slate2);
                        });
                    }
                    else if (localScriptDef.affectedByPopulation)
                    {
                        selectPopulation(slate2, delegate
                        {
                            generateQuest(localScriptDef, slate2);
                        });
                    }
                    else
                    {
                        generateQuest(localScriptDef, slate2);
                    }
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list.OrderBy((DebugMenuOption op) => op.label)));
        }
Exemplo n.º 18
0
 public QuestGenOption(QuestScriptDef def, float selectionWeight)
 {
     this.def             = def;
     this.selectionWeight = selectionWeight;
 }