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); }
protected override void RunInt() { Slate slate = QuestGen.slate; IEnumerable <Thing> value = items.GetValue(slate); if (!value.EnumerableNullOrEmpty()) { QuestPart_Choice questPart_Choice = new QuestPart_Choice(); questPart_Choice.inSignalChoiceUsed = QuestGenUtility.HardcodedSignalWithQuestID(inSignalChoiceUsed.GetValue(slate)); QuestPart_Choice.Choice choice = new QuestPart_Choice.Choice(); Reward_Items reward_Items = new Reward_Items(); reward_Items.items.AddRange(value); choice.rewards.Add(reward_Items); questPart_Choice.choices.Add(choice); QuestGen.quest.AddPart(questPart_Choice); } }
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); }