private static List <Reward> TryGenerateRewards_SocialOnly(RewardsGeneratorParams parms, bool disallowRoyalFavor) { parms.thingRewardDisallowed = true; if (disallowRoyalFavor) { parms.allowRoyalFavor = false; } return(TryGenerateNonRepeatingRewards(parms)); }
private static List <Reward> TryGenerateRewards_ThingsOnly(RewardsGeneratorParams parms) { if (parms.thingRewardDisallowed) { return(null); } parms.allowGoodwill = false; parms.allowRoyalFavor = false; return(TryGenerateNonRepeatingRewards(parms)); }
private static List <Reward> TryGenerateNonRepeatingRewards(RewardsGeneratorParams parms) { List <Reward> list = null; int num = 0; while (num < 10) { list = RewardsGenerator.Generate(parms); if (list.Any((Reward x) => x is Reward_Pawn)) { return(list); } Reward_Items reward_Items = (Reward_Items)list.FirstOrDefault((Reward x) => x is Reward_Items); if (reward_Items != null) { bool flag = false; for (int j = 0; j < generatedRewards.Count; j++) { Reward_Items otherGeneratedItems = null; for (int k = 0; k < generatedRewards[j].Count; k++) { otherGeneratedItems = generatedRewards[j][k] as Reward_Items; if (otherGeneratedItems != null) { break; } } if (otherGeneratedItems != null) { int i; for (i = 0; i < otherGeneratedItems.items.Count; i++) { if (reward_Items.items.Any((Thing x) => x.GetInnerIfMinified().def == otherGeneratedItems.items[i].GetInnerIfMinified().def)) { flag = true; break; } } } if (flag) { break; } } if (flag) { num++; continue; } } return(list); } return(list); }
private List <Reward> TryGenerateRewards_RoyalFavorOnly(RewardsGeneratorParams parms) { return(null); }
private List <Reward> TryGenerateRewards_SocialOnly(RewardsGeneratorParams parms, bool disallowRoyalFavor) { return(null); }
private List <Reward> GenerateRewards(RewardsGeneratorParams parmsResolved, Slate slate, bool addDescriptionRules, ref bool chosenPawnSignalUsed, QuestPart_Choice.Choice choice, int variants) { return(null); }
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); }
protected virtual void OpenBox([NotNull] Pawn usedBy) { var c = parent.Position; var map = parent.Map; if (ModLootBoxes.Settings.UseIngameRewardsGenerator) { Rand.PushState(parent.HashOffset()); var spawnCount = Rand.RangeInclusive(SetMinimum, Rand.RangeInclusive(SetMinimum, SetMaximum)); if (ModLootBoxes.Settings.UseBonusLootChance) { spawnCount = GenMath.RoundRandom(spawnCount * ModLootBoxes.Settings.BonusLootChance); } spawnCount = Math.Max(1, spawnCount); #if V10 var makerParams = default(ThingSetMakerParams); makerParams.qualityGenerator = QualityGenerator.Reward; makerParams.techLevel = usedBy.Faction.def.techLevel; makerParams.totalMarketValueRange = new FloatRange(0.7f, 1.3f) * MaximumMarketRewardValue; #else var generatorParams = new RewardsGeneratorParams { rewardValue = MaximumMarketRewardValue * Find.Storyteller.difficulty.questRewardValueFactor, minGeneratedRewardValue = 250f, giverFaction = usedBy.Faction, populationIntent = QuestTuning.PopIncreasingRewardWeightByPopIntentCurve.Evaluate(StorytellerUtilityPopulation.PopulationIntent), allowGoodwill = false, allowRoyalFavor = false, giveToCaravan = false, thingRewardItemsOnly = true, }; #endif var used = 0; do { var taken = spawnCount - used; #if V10 var generatedItems = ThingSetMakerDefOf.Reward_TradeRequest.root.Generate(makerParams); #else var generatedItems = new List <Thing>(); var firstGen = RewardsGenerator.Generate(generatorParams).Cast <Reward_Items>().SelectMany(k => k.items).ToArray(); for (var i = 0; i < firstGen.Length; i++) { var thing = firstGen[i]; if (thing.def == ThingDefOf.PsychicAmplifier && (!ModLootBoxes.Settings.AllowPsychicAmplifierSpawn || generatedItems.Exists(k => k.def == thing.def))) { generatorParams.disallowedThingDefs = new List <ThingDef> { ThingDefOf.PsychicAmplifier }; firstGen = RewardsGenerator.Generate(generatorParams).Cast <Reward_Items>().SelectMany(k => k.items).ToArray(); i = 0; continue; } generatedItems.Add(thing); } #endif var chosenItems = generatedItems.InRandomOrder().Take(spawnCount - used).ToList(); foreach (var reward in chosenItems) { if (IsLootBox(reward.def, out var type) && !ShouldDrop(LootBoxType, type)) { taken--; continue; } GenPlace.TryPlaceThing(reward, c, map, ThingPlaceMode.Near); #if V13 || V12 || V11 if (reward.def == ThingDefOf.PsychicAmplifier) { Find.History.Notify_PsylinkAvailable(); } #endif } used += Math.Min(taken, chosenItems.Count); } while (used < spawnCount); Rand.PopState(); } else { foreach (var t in CreateLoot()) { GenPlace.TryPlaceThing(t, c, map, ThingPlaceMode.Near); } } map.wealthWatcher.ForceRecount(); }
private static List <Reward> GenerateRewards(RewardsGeneratorParams parmsResolved, Slate slate, bool addDescriptionRules, ref bool chosenPawnSignalUsed, QuestPart_Choice.Choice choice, int variants, string customLetterLabel, string customLetterText, RulePack customLetterLabelRules, RulePack customLetterTextRules) { List <string> list; List <string> list2; if (addDescriptionRules) { list = new List <string>(); list2 = new List <string>(); } else { list = null; list2 = null; } bool flag = false; bool flag2 = false; for (int i = 0; i < generatedRewards.Count; i++) { for (int j = 0; j < generatedRewards[i].Count; j++) { if (generatedRewards[i][j] is Reward_Pawn) { flag2 = true; break; } } if (flag2) { break; } } if (flag2) { parmsResolved.thingRewardItemsOnly = true; } List <Reward> list3 = null; if (variants >= 2 && !generatedRewards.Any() && parmsResolved.allowGoodwill && !parmsResolved.thingRewardRequired) { list3 = TryGenerateRewards_SocialOnly(parmsResolved, variants >= 3); if (list3.NullOrEmpty() && variants >= 3) { list3 = TryGenerateRewards_ThingsOnly(parmsResolved); } if (list3.NullOrEmpty()) { list3 = TryGenerateNonRepeatingRewards(parmsResolved); } } else if (variants >= 3 && generatedRewards.Count == 1 && parmsResolved.allowRoyalFavor && !parmsResolved.thingRewardRequired) { list3 = TryGenerateRewards_RoyalFavorOnly(parmsResolved); if (list3.NullOrEmpty()) { list3 = TryGenerateRewards_ThingsOnly(parmsResolved); } if (list3.NullOrEmpty()) { list3 = TryGenerateNonRepeatingRewards(parmsResolved); } } else if (variants >= 2 && generatedRewards.Any() && !parmsResolved.thingRewardDisallowed) { list3 = TryGenerateRewards_ThingsOnly(parmsResolved); if (list3.NullOrEmpty()) { list3 = TryGenerateNonRepeatingRewards(parmsResolved); } } else { list3 = TryGenerateNonRepeatingRewards(parmsResolved); } if (list3.NullOrEmpty()) { return(null); } Reward_Items reward_Items = (Reward_Items)list3.Find((Reward x) => x is Reward_Items); if (reward_Items == null) { List <Type> b = list3.Select((Reward x) => x.GetType()).ToList(); for (int k = 0; k < generatedRewards.Count; k++) { if (generatedRewards[k].Select((Reward x) => x.GetType()).ToList().ListsEqualIgnoreOrder(b)) { return(null); } } } else if (list3.Count == 1) { List <ThingDef> b2 = reward_Items.ItemsListForReading.Select((Thing x) => x.def).ToList(); for (int l = 0; l < generatedRewards.Count; l++) { Reward_Items reward_Items2 = (Reward_Items)generatedRewards[l].Find((Reward x) => x is Reward_Items); if (reward_Items2 != null && reward_Items2.ItemsListForReading.Select((Thing x) => x.def).ToList().ListsEqualIgnoreOrder(b2)) { return(null); } } } list3.SortBy((Reward x) => x is Reward_Items); choice.rewards.AddRange(list3); for (int m = 0; m < list3.Count; m++) { if (addDescriptionRules) { list.Add(list3[m].GetDescription(parmsResolved)); if (!(list3[m] is Reward_Items)) { list2.Add(list3[m].GetDescription(parmsResolved)); } else if (m == list3.Count - 1) { flag = true; } } foreach (QuestPart item in list3[m].GenerateQuestParts(m, parmsResolved, customLetterLabel, customLetterText, customLetterLabelRules, customLetterTextRules)) { QuestGen.quest.AddPart(item); choice.questParts.Add(item); } if (!parmsResolved.chosenPawnSignal.NullOrEmpty() && list3[m].MakesUseOfChosenPawnSignal) { chosenPawnSignalUsed = true; } } if (addDescriptionRules) { string text = list.AsEnumerable().ToList().ToClauseSequence() .Resolve() .UncapitalizeFirst(); if (flag) { text = text.TrimEnd('.'); } QuestGen.AddQuestDescriptionRules(new List <Rule> { new Rule_String("allRewardsDescriptions", text.UncapitalizeFirst()), new Rule_String("allRewardsDescriptionsExceptItems", list2.Any() ? list2.AsEnumerable().ToList().ToClauseSequence() .Resolve() .UncapitalizeFirst() : "") }); } return(list3); }
public static QuestPart_Choice GiveRewards(this Quest quest, RewardsGeneratorParams parms, string inSignal = null, string customLetterLabel = null, string customLetterText = null, RulePack customLetterLabelRules = null, RulePack customLetterTextRules = null, bool?useDifficultyFactor = null, Action runIfChosenPawnSignalUsed = null, int?variants = null, bool addCampLootReward = false, Pawn asker = null, bool addShuttleLootReward = false, bool addPossibleFutureReward = false) { try { Slate slate = QuestGen.slate; RewardsGeneratorParams parmsResolved = parms; parmsResolved.rewardValue = ((parmsResolved.rewardValue == 0f) ? slate.Get("rewardValue", 0f) : parmsResolved.rewardValue); if (useDifficultyFactor ?? true) { parmsResolved.rewardValue *= Find.Storyteller.difficultyValues.EffectiveQuestRewardValueFactor; parmsResolved.rewardValue = Math.Max(1f, parmsResolved.rewardValue); } if (slate.Get("debugDontGenerateRewardThings", defaultValue: false)) { DebugActionsQuests.lastQuestGeneratedRewardValue += Mathf.Max(parmsResolved.rewardValue, 250f); return(null); } parmsResolved.minGeneratedRewardValue = 250f; parmsResolved.giverFaction = parmsResolved.giverFaction ?? asker?.Faction; parmsResolved.populationIntent = QuestTuning.PopIncreasingRewardWeightByPopIntentCurve.Evaluate(StorytellerUtilityPopulation.PopulationIntentForQuest); if (parmsResolved.giverFaction == null || parmsResolved.giverFaction.def.permanentEnemy) { parmsResolved.allowGoodwill = false; } if (parmsResolved.giverFaction == null || asker.royalty == null || !asker.royalty.HasAnyTitleIn(asker.Faction) || parmsResolved.giverFaction.HostileTo(Faction.OfPlayer)) { parmsResolved.allowRoyalFavor = false; } Slate.VarRestoreInfo restoreInfo = slate.GetRestoreInfo("inSignal"); if (inSignal.NullOrEmpty()) { inSignal = slate.Get <string>("inSignal"); } else { slate.Set("inSignal", QuestGenUtility.HardcodedSignalWithQuestID(inSignal)); } try { QuestPart_Choice questPart_Choice = new QuestPart_Choice(); questPart_Choice.inSignalChoiceUsed = slate.Get <string>("inSignal"); bool chosenPawnSignalUsed = false; int num = ((parmsResolved.allowGoodwill && parmsResolved.giverFaction != null && parmsResolved.giverFaction.HostileTo(Faction.OfPlayer)) ? 1 : (variants ?? (QuestGen.quest.root.autoAccept ? 1 : 3))); generatedRewards.Clear(); for (int i = 0; i < num; i++) { QuestPart_Choice.Choice choice = new QuestPart_Choice.Choice(); List <Reward> list = GenerateRewards(parmsResolved, slate, i == 0, ref chosenPawnSignalUsed, choice, num, customLetterLabel, customLetterText, customLetterLabelRules, customLetterTextRules); if (list != null) { questPart_Choice.choices.Add(choice); generatedRewards.Add(list); } } generatedRewards.Clear(); if (addCampLootReward) { for (int j = 0; j < questPart_Choice.choices.Count; j++) { questPart_Choice.choices[j].rewards.Add(new Reward_CampLoot()); } } if (addShuttleLootReward) { for (int k = 0; k < questPart_Choice.choices.Count; k++) { questPart_Choice.choices[k].rewards.Add(new Reward_ShuttleLoot()); } } if (addPossibleFutureReward) { for (int l = 0; l < questPart_Choice.choices.Count; l++) { questPart_Choice.choices[l].rewards.Add(new Reward_PossibleFutureReward()); } } questPart_Choice.choices.SortByDescending(GetDisplayPriority); QuestGen.quest.AddPart(questPart_Choice); if (chosenPawnSignalUsed && runIfChosenPawnSignalUsed != null) { tmpPrevQuestParts.Clear(); tmpPrevQuestParts.AddRange(QuestGen.quest.PartsListForReading); runIfChosenPawnSignalUsed(); List <QuestPart> partsListForReading = QuestGen.quest.PartsListForReading; for (int m = 0; m < partsListForReading.Count; m++) { if (tmpPrevQuestParts.Contains(partsListForReading[m])) { continue; } for (int n = 0; n < questPart_Choice.choices.Count; n++) { bool flag = false; for (int num2 = 0; num2 < questPart_Choice.choices[n].rewards.Count; num2++) { if (questPart_Choice.choices[n].rewards[num2].MakesUseOfChosenPawnSignal) { flag = true; break; } } if (flag) { questPart_Choice.choices[n].questParts.Add(partsListForReading[m]); } } } tmpPrevQuestParts.Clear(); } return(questPart_Choice); } finally { slate.Restore(restoreInfo); } } finally { generatedRewards.Clear(); } }
public override string GetDescription(RewardsGeneratorParams parms) { throw new NotImplementedException(); }
public override void InitFromValue(float rewardValue, RewardsGeneratorParams parms, out float valueActuallyUsed) { throw new NotImplementedException(); }
public override IEnumerable <QuestPart> GenerateQuestParts(int index, RewardsGeneratorParams parms, string customLetterLabel, string customLetterText, RulePack customLetterLabelRules, RulePack customLetterTextRules) { throw new NotImplementedException(); }
private List <Reward> TryGenerateRewards_ThingsOnly(RewardsGeneratorParams parms) { return(null); }
private static List <Reward> TryGenerateRewards_RoyalFavorOnly(RewardsGeneratorParams parms) { parms.allowGoodwill = false; parms.thingRewardDisallowed = true; return(TryGenerateNonRepeatingRewards(parms)); }
private List <Reward> TryGenerateNonRepeatingRewards(RewardsGeneratorParams parms) { return(null); }
protected override void RunInt() { Slate slate = QuestGen.slate; Pawn pawn = slate.Get <Pawn>("asker"); bool num = useDifficultyFactor.GetValue(slate) ?? true; RewardsGeneratorParams value = parms.GetValue(slate); value.rewardValue = slate.Get("rewardValue", 0f); if (num) { value.rewardValue *= Find.Storyteller.difficulty.questRewardValueFactor; } if (slate.Get("debugDontGenerateRewardThings", defaultValue: false)) { DebugActionsQuests.lastQuestGeneratedRewardValue += Mathf.Max(value.rewardValue, 250f); return; } value.minGeneratedRewardValue = 250f; value.giverFaction = pawn?.Faction; value.populationIntent = QuestTuning.PopIncreasingRewardWeightByPopIntentCurve.Evaluate(StorytellerUtilityPopulation.PopulationIntentForQuest); if (value.giverFaction == null || value.giverFaction.def.permanentEnemy) { value.allowGoodwill = false; } if (value.giverFaction == null || pawn.royalty == null || !pawn.royalty.HasAnyTitleIn(pawn.Faction) || value.giverFaction.HostileTo(Faction.OfPlayer)) { value.allowRoyalFavor = false; } Slate.VarRestoreInfo restoreInfo = slate.GetRestoreInfo("inSignal"); if (!inSignal.GetValue(slate).NullOrEmpty()) { slate.Set("inSignal", QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate))); } try { QuestPart_Choice questPart_Choice = new QuestPart_Choice(); questPart_Choice.inSignalChoiceUsed = slate.Get <string>("inSignal"); bool chosenPawnSignalUsed = false; int num2 = (value.allowGoodwill && value.giverFaction != null && value.giverFaction.HostileTo(Faction.OfPlayer)) ? 1 : (variants.GetValue(slate) ?? (QuestGen.quest.root.autoAccept ? 1 : 3)); generatedRewards.Clear(); for (int i = 0; i < num2; i++) { QuestPart_Choice.Choice choice = new QuestPart_Choice.Choice(); List <Reward> list = GenerateRewards(value, slate, i == 0, ref chosenPawnSignalUsed, choice, num2); if (list != null) { questPart_Choice.choices.Add(choice); generatedRewards.Add(list); } } generatedRewards.Clear(); if (addCampLootReward.GetValue(slate)) { for (int j = 0; j < questPart_Choice.choices.Count; j++) { questPart_Choice.choices[j].rewards.Add(new Reward_CampLoot()); } } questPart_Choice.choices.SortByDescending(GetDisplayPriority); QuestGen.quest.AddPart(questPart_Choice); if (chosenPawnSignalUsed && nodeIfChosenPawnSignalUsed != null) { tmpPrevQuestParts.Clear(); tmpPrevQuestParts.AddRange(QuestGen.quest.PartsListForReading); nodeIfChosenPawnSignalUsed.Run(); List <QuestPart> partsListForReading = QuestGen.quest.PartsListForReading; for (int k = 0; k < partsListForReading.Count; k++) { if (!tmpPrevQuestParts.Contains(partsListForReading[k])) { for (int l = 0; l < questPart_Choice.choices.Count; l++) { bool flag = false; for (int m = 0; m < questPart_Choice.choices[l].rewards.Count; m++) { if (questPart_Choice.choices[l].rewards[m].MakesUseOfChosenPawnSignal) { flag = true; break; } } if (flag) { questPart_Choice.choices[l].questParts.Add(partsListForReading[k]); } } } } tmpPrevQuestParts.Clear(); } } finally { slate.Restore(restoreInfo); } }