예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
        }