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; }
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(); } }
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); }
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); }
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); } } }
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); } } }
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. }
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(); } }
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()); }
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))); }
public QuestGenOption(QuestScriptDef def, float selectionWeight) { this.def = def; this.selectionWeight = selectionWeight; }