Esempio n. 1
0
 private static List <Reward> TryGenerateRewards_SocialOnly(RewardsGeneratorParams parms, bool disallowRoyalFavor)
 {
     parms.thingRewardDisallowed = true;
     if (disallowRoyalFavor)
     {
         parms.allowRoyalFavor = false;
     }
     return(TryGenerateNonRepeatingRewards(parms));
 }
Esempio n. 2
0
 private static List <Reward> TryGenerateRewards_ThingsOnly(RewardsGeneratorParams parms)
 {
     if (parms.thingRewardDisallowed)
     {
         return(null);
     }
     parms.allowGoodwill   = false;
     parms.allowRoyalFavor = false;
     return(TryGenerateNonRepeatingRewards(parms));
 }
Esempio n. 3
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);
        }
Esempio n. 4
0
 private List <Reward> TryGenerateRewards_RoyalFavorOnly(RewardsGeneratorParams parms)
 {
     return(null);
 }
Esempio n. 5
0
 private List <Reward> TryGenerateRewards_SocialOnly(RewardsGeneratorParams parms, bool disallowRoyalFavor)
 {
     return(null);
 }
Esempio n. 6
0
 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();
        }
Esempio n. 9
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);
        }
Esempio n. 10
0
 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();
     }
 }
Esempio n. 11
0
 public override string GetDescription(RewardsGeneratorParams parms)
 {
     throw new NotImplementedException();
 }
Esempio n. 12
0
 public override void InitFromValue(float rewardValue, RewardsGeneratorParams parms, out float valueActuallyUsed)
 {
     throw new NotImplementedException();
 }
Esempio n. 13
0
 public override IEnumerable <QuestPart> GenerateQuestParts(int index, RewardsGeneratorParams parms, string customLetterLabel, string customLetterText, RulePack customLetterLabelRules, RulePack customLetterTextRules)
 {
     throw new NotImplementedException();
 }
Esempio n. 14
0
 private List <Reward> TryGenerateRewards_ThingsOnly(RewardsGeneratorParams parms)
 {
     return(null);
 }
Esempio n. 15
0
 private static List <Reward> TryGenerateRewards_RoyalFavorOnly(RewardsGeneratorParams parms)
 {
     parms.allowGoodwill         = false;
     parms.thingRewardDisallowed = true;
     return(TryGenerateNonRepeatingRewards(parms));
 }
Esempio n. 16
0
 private List <Reward> TryGenerateNonRepeatingRewards(RewardsGeneratorParams parms)
 {
     return(null);
 }
Esempio n. 17
0
        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);
            }
        }