protected override void RunInt()
        {
            Slate                   slate                   = QuestGen.slate;
            float                   points                  = QuestGen.slate.Get("points", 0f);
            GameCondition           gameCondition           = GameConditionMaker.MakeCondition(this.gameCondition.GetValue(slate), duration.GetValue(slate));
            QuestPart_GameCondition questPart_GameCondition = new QuestPart_GameCondition();

            questPart_GameCondition.gameCondition = gameCondition;
            List <Rule> list = new List <Rule>();
            Dictionary <string, string> dictionary = new Dictionary <string, string>();

            if (targetWorld.GetValue(slate))
            {
                questPart_GameCondition.targetWorld = true;
                gameCondition.RandomizeSettings(points, null, list, dictionary);
            }
            else
            {
                Map map = GetMap(QuestGen.slate);
                questPart_GameCondition.mapParent = map.Parent;
                gameCondition.RandomizeSettings(points, map, list, dictionary);
            }
            questPart_GameCondition.inSignal = (QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"));
            QuestGen.quest.AddPart(questPart_GameCondition);
            if (!storeGameConditionDescriptionFutureAs.GetValue(slate).NullOrEmpty())
            {
                slate.Set(storeGameConditionDescriptionFutureAs.GetValue(slate), gameCondition.def.descriptionFuture);
            }
            QuestGen.AddQuestNameRules(list);
            QuestGen.AddQuestDescriptionRules(list);
            QuestGen.AddQuestDescriptionConstants(dictionary);
        }
示例#2
0
 protected override void RunInt()
 {
     if (rules.GetValue(QuestGen.slate) != null)
     {
         QuestGen.AddQuestDescriptionRules(rules.GetValue(QuestGen.slate));
     }
     Resolve();
 }
示例#3
0
        protected override void RunInt()
        {
            Slate              slate              = QuestGen.slate;
            Map                target             = QuestGen.slate.Get <Map>("map");
            float              a                  = QuestGen.slate.Get("points", 0f);
            Faction            faction            = QuestGen.slate.Get <Faction>("enemyFaction");
            QuestPart_Incident questPart_Incident = new QuestPart_Incident();

            questPart_Incident.debugLabel = "raid";
            questPart_Incident.incident   = IncidentDefOf.RaidEnemy;
            IncidentParms incidentParms = new IncidentParms();

            incidentParms.forced             = true;
            incidentParms.target             = target;
            incidentParms.points             = Mathf.Max(a, faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat));
            incidentParms.faction            = faction;
            incidentParms.pawnGroupMakerSeed = Rand.Int;
            incidentParms.inSignalEnd        = QuestGenUtility.HardcodedSignalWithQuestID(inSignalLeave.GetValue(slate));
            incidentParms.questTag           = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate));
            if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterLabel = x;
                }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root"));
            }
            if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterText = x;
                }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root"));
            }
            IncidentWorker_Raid obj = (IncidentWorker_Raid)questPart_Incident.incident.Worker;

            obj.ResolveRaidStrategy(incidentParms, PawnGroupKindDefOf.Combat);
            obj.ResolveRaidArriveMode(incidentParms);
            if (incidentParms.raidArrivalMode.walkIn)
            {
                incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid;
            }
            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms);

            defaultPawnGroupMakerParms.points = IncidentWorker_Raid.AdjustedRaidPoints(defaultPawnGroupMakerParms.points, incidentParms.raidArrivalMode, incidentParms.raidStrategy, defaultPawnGroupMakerParms.faction, PawnGroupKindDefOf.Combat);
            IEnumerable <PawnKindDef> pawnKinds = PawnGroupMakerUtility.GeneratePawnKindsExample(defaultPawnGroupMakerParms);

            questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms);
            questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
            QuestGen.quest.AddPart(questPart_Incident);
            QuestGen.AddQuestDescriptionRules(new List <Rule>
            {
                new Rule_String("raidPawnKinds", PawnUtility.PawnKindsToLineList(pawnKinds, "  - ", ColoredText.ThreatColor)),
                new Rule_String("raidArrivalModeInfo", incidentParms.raidArrivalMode.textWillArrive.Formatted(faction))
            });
        }
示例#4
0
        public static void Raid(this Quest quest, Map map, float points, Faction faction, string inSignalLeave = null, string customLetterLabel = null, string customLetterText = null, RulePack customLetterLabelRules = null, RulePack customLetterTextRules = null, IntVec3?walkInSpot = null, string tag = null, string inSignal = null, string rootSymbol = "root", PawnsArrivalModeDef raidArrivalMode = null)
        {
            QuestPart_Incident questPart_Incident = new QuestPart_Incident();

            questPart_Incident.debugLabel = "raid";
            questPart_Incident.incident   = IncidentDefOf.RaidEnemy;
            IncidentParms incidentParms = new IncidentParms();

            incidentParms.forced             = true;
            incidentParms.target             = map;
            incidentParms.points             = Mathf.Max(points, faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat));
            incidentParms.faction            = faction;
            incidentParms.pawnGroupMakerSeed = Rand.Int;
            incidentParms.inSignalEnd        = inSignalLeave;
            incidentParms.questTag           = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag);
            incidentParms.raidArrivalMode    = raidArrivalMode;
            if (!customLetterLabel.NullOrEmpty() || customLetterLabelRules != null)
            {
                QuestGen.AddTextRequest(rootSymbol, delegate(string x)
                {
                    incidentParms.customLetterLabel = x;
                }, QuestGenUtility.MergeRules(customLetterLabelRules, customLetterLabel, rootSymbol));
            }
            if (!customLetterText.NullOrEmpty() || customLetterTextRules != null)
            {
                QuestGen.AddTextRequest(rootSymbol, delegate(string x)
                {
                    incidentParms.customLetterText = x;
                }, QuestGenUtility.MergeRules(customLetterTextRules, customLetterText, rootSymbol));
            }
            IncidentWorker_Raid obj = (IncidentWorker_Raid)questPart_Incident.incident.Worker;

            obj.ResolveRaidStrategy(incidentParms, PawnGroupKindDefOf.Combat);
            obj.ResolveRaidArriveMode(incidentParms);
            if (incidentParms.raidArrivalMode.walkIn)
            {
                incidentParms.spawnCenter = walkInSpot ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid;
            }
            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms);

            defaultPawnGroupMakerParms.points = IncidentWorker_Raid.AdjustedRaidPoints(defaultPawnGroupMakerParms.points, incidentParms.raidArrivalMode, incidentParms.raidStrategy, defaultPawnGroupMakerParms.faction, PawnGroupKindDefOf.Combat);
            IEnumerable <PawnKindDef> pawnKinds = PawnGroupMakerUtility.GeneratePawnKindsExample(defaultPawnGroupMakerParms);

            questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms);
            questPart_Incident.inSignal = inSignal ?? QuestGen.slate.Get <string>("inSignal");
            QuestGen.quest.AddPart(questPart_Incident);
            QuestGen.AddQuestDescriptionRules(new List <Rule>
            {
                new Rule_String("raidPawnKinds", PawnUtility.PawnKindsToLineList(pawnKinds, "  - ", ColoredText.ThreatColor)),
                new Rule_String("raidArrivalModeInfo", incidentParms.raidArrivalMode.textWillArrive.Formatted(faction))
            });
        }
        protected override void RunInt()
        {
            Slate slate  = QuestGen.slate;
            Map   map    = QuestGen.slate.Get <Map>("map");
            float points = QuestGen.slate.Get("points", 0f);
            QuestPart_Incident questPart_Incident = new QuestPart_Incident();

            questPart_Incident.incident = IncidentDefOf.ManhunterPack;
            IncidentParms incidentParms = new IncidentParms();

            incidentParms.forced      = true;
            incidentParms.target      = map;
            incidentParms.points      = points;
            incidentParms.questTag    = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate));
            incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid;
            incidentParms.pawnCount   = animalCount.GetValue(slate);
            if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, map.Tile, out var animalKind))
            {
                incidentParms.pawnKind = animalKind;
            }
            slate.Set("animalKindDef", animalKind);
            int num = ((incidentParms.pawnCount > 0) ? incidentParms.pawnCount : ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, points));

            QuestGen.slate.Set("animalCount", num);
            if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterLabel = x;
                }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root"));
            }
            if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterText = x;
                }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root"));
            }
            questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms);
            questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
            QuestGen.quest.AddPart(questPart_Incident);
            List <Rule> rules = new List <Rule>
            {
                new Rule_String("animalKind_label", animalKind.label),
                new Rule_String("animalKind_labelPlural", animalKind.GetLabelPlural(num))
            };

            QuestGen.AddQuestDescriptionRules(rules);
            QuestGen.AddQuestNameRules(rules);
        }
示例#6
0
        protected override void RunInt()
        {
            Slate slate = QuestGen.slate;

            switch (target.GetValue(slate))
            {
            case TextRulesTarget.Description:
                QuestGen.AddQuestDescriptionRules(rules.GetValue(slate));
                break;

            case TextRulesTarget.Name:
                QuestGen.AddQuestNameRules(rules.GetValue(slate));
                break;

            case TextRulesTarget.DecriptionAndName:
                QuestGen.AddQuestDescriptionRules(rules.GetValue(slate));
                QuestGen.AddQuestNameRules(rules.GetValue(slate));
                break;
            }
        }
        protected override void RunInt()
        {
            Slate slate = QuestGen.slate;
            QuestPart_MechCluster questPart_MechCluster = new QuestPart_MechCluster();

            questPart_MechCluster.inSignal  = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
            questPart_MechCluster.tag       = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate));
            questPart_MechCluster.mapParent = slate.Get <Map>("map").Parent;
            questPart_MechCluster.sketch    = GenerateSketch(slate);
            QuestGen.quest.AddPart(questPart_MechCluster);
            string text = "";

            if (questPart_MechCluster.sketch.pawns != null)
            {
                text += PawnUtility.PawnKindsToLineList(questPart_MechCluster.sketch.pawns.Select((MechClusterSketch.Mech m) => m.kindDef), "  - ", ColoredText.ThreatColor);
            }
            string[] array = (from t in questPart_MechCluster.sketch.buildingsSketch.Things
                              where GenHostility.IsDefMechClusterThreat(t.def)
                              group t by t.def.label).Select(delegate(IGrouping <string, SketchThing> grp)
            {
                int num = grp.Count();
                return(num + " " + ((num > 1) ? Find.ActiveLanguageWorker.Pluralize(grp.Key, num) : grp.Key));
            }).ToArray();
            if (array.Any())
            {
                if (text != "")
                {
                    text += "\n";
                }
                text += array.ToLineList(ColoredText.ThreatColor, "  - ");
            }
            if (text != "")
            {
                QuestGen.AddQuestDescriptionRules(new List <Rule>
                {
                    new Rule_String("allThreats", text)
                });
            }
        }
        protected override void RunInt()
        {
            if (!ModLister.RoyaltyInstalled)
            {
                Log.ErrorOnce("Missions are 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.", 324345634);
                return;
            }
            Quest  quest = QuestGen.quest;
            Slate  slate = QuestGen.slate;
            string text  = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(QuestTag);
            int    num   = slate.Get("points", 0);
            Pawn   asker = GetAsker(quest);

            ResolveParameters(slate, out var requiredPawnCount, out var population, out var colonyMap);
            TryFindSiteTile(out var tile);
            slate.Set("asker", asker);
            slate.Set("askerFaction", asker.Faction);
            slate.Set("requiredPawnCount", requiredPawnCount);
            slate.Set("map", colonyMap);
            Site   site                = GenerateSite(asker, num, requiredPawnCount, population, tile);
            string inSignal            = QuestGenUtility.HardcodedSignalWithQuestID("askerFaction.BecameHostileToPlayer");
            string text2               = QuestGenUtility.QuestTagSignal(text, "AllEnemiesDefeated");
            string signalSentSatisfied = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.SentSatisfied");

            QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Spawned");
            string text3            = QuestGenUtility.QuestTagSignal(text, "MapRemoved");
            string signalChosenPawn = QuestGen.GenerateNewSignal("ChosenPawnSignal");

            quest.GiveRewards(new RewardsGeneratorParams
            {
                allowGoodwill    = true,
                allowRoyalFavor  = true,
                giverFaction     = asker.Faction,
                rewardValue      = RewardValueCurve.Evaluate(num),
                chosenPawnSignal = signalChosenPawn
            }, text2, null, null, null, null, null, delegate
            {
                quest.Letter(LetterDefOf.ChoosePawn, null, label: asker.Faction.def.royalFavorLabel, text: "LetterTextHonorAward_BanditCamp".Translate(asker.Faction.def.royalFavorLabel), chosenPawnSignal: signalChosenPawn, relatedFaction: null, useColonistsOnMap: null, useColonistsFromCaravanArg: false, signalListenMode: QuestPart.SignalListenMode.OngoingOnly, lookTargets: null, filterDeadPawnsFromLookTargets: false, textRules: null, labelRules: null, getColonistsFromSignal: signalSentSatisfied);
            }, null, AddCampLootReward, asker);
            Thing shuttle = QuestGen_Shuttle.GenerateShuttle(null, null, null, acceptColonists: true, onlyAcceptColonists: true, onlyAcceptHealthy: false, requiredPawnCount, dropEverythingIfUnsatisfied: true, leaveImmediatelyWhenSatisfied: true, dropEverythingOnArrival: false, stayAfterDroppedEverythingOnArrival: true, site, colonyMap.Parent, requiredPawnCount, null, permitShuttle: false, hideControls: false);

            shuttle.TryGetComp <CompShuttle>().sendAwayIfQuestFinished = quest;
            slate.Set("shuttle", shuttle);
            quest.SpawnWorldObject(site, null, signalSentSatisfied);
            QuestUtility.AddQuestTag(ref shuttle.questTags, text);
            quest.SpawnSkyfaller(colonyMap, ThingDefOf.ShuttleIncoming, Gen.YieldSingle(shuttle), Faction.OfPlayer, null, null, lookForSafeSpot: true, tryLandInShipLandingZone: true);
            quest.ShuttleLeaveDelay(shuttle, 60000, null, Gen.YieldSingle(signalSentSatisfied), null, delegate
            {
                quest.SendShuttleAway(shuttle, dropEverything: true);
                quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            });
            string inSignal2 = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Killed");

            quest.SetFactionRelations(asker.Faction, FactionRelationKind.Hostile, inSignal2);
            quest.End(QuestEndOutcome.Fail, 0, null, inSignal2, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            quest.SignalPass(delegate
            {
                quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            }, inSignal);
            quest.FeedPawns(null, shuttle, signalSentSatisfied);
            Quest  quest2 = quest;
            Action action = delegate
            {
                quest.SendShuttleAway(shuttle, dropEverything: true);
            };
            string inSignalDisable = signalSentSatisfied;

            quest2.SignalPassActivable(action, null, text2, null, null, inSignalDisable);
            QuestUtility.AddQuestTag(ref site.questTags, text);
            slate.Set("site", site);
            quest.SendShuttleAwayOnCleanup(shuttle, dropEverything: true);
            quest.SignalPassActivable(delegate
            {
                quest.Message("MessageMissionGetBackToShuttle".Translate(site.Faction.Named("FACTION")), MessageTypeDefOf.PositiveEvent, getLookTargetsFromSignal: false, null, new LookTargets(shuttle));
            }, signalSentSatisfied, text2);
            quest.SignalPassAllSequence(delegate
            {
                quest.End(QuestEndOutcome.Success, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            }, new List <string>
            {
                signalSentSatisfied,
                text2,
                text3
            });
            Quest  quest3  = quest;
            Action action2 = delegate
            {
                quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            };

            inSignalDisable = text2;
            quest3.SignalPassActivable(action2, null, text3, null, null, inSignalDisable);
            int num2 = (int)(timeLimitDays.RandomInRange * 60000f);

            slate.Set("timeoutTicks", num2);
            quest.WorldObjectTimeout(site, num2);
            List <Rule> list = new List <Rule>();

            list.AddRange(GrammarUtility.RulesForWorldObject("site", site));
            QuestGen.AddQuestDescriptionRules(list);
        }
示例#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);
        }
示例#10
0
        public static Site GenerateSite(IEnumerable <SitePartDefWithParams> sitePartsParams, int tile, Faction faction, bool hiddenSitePartsPossible = false, RulePack singleSitePartRules = null)
        {
            _ = QuestGen.slate;
            bool flag = false;

            foreach (SitePartDefWithParams sitePartsParam in sitePartsParams)
            {
                if (sitePartsParam.def.defaultHidden)
                {
                    flag = true;
                    break;
                }
            }
            if (flag || hiddenSitePartsPossible)
            {
                SitePartParams        parms = SitePartDefOf.PossibleUnknownThreatMarker.Worker.GenerateDefaultParams(0f, tile, faction);
                SitePartDefWithParams val   = new SitePartDefWithParams(SitePartDefOf.PossibleUnknownThreatMarker, parms);
                sitePartsParams = sitePartsParams.Concat(Gen.YieldSingle(val));
            }
            Site        site = SiteMaker.MakeSite(sitePartsParams, tile, faction);
            List <Rule> list = new List <Rule>();
            Dictionary <string, string> dictionary = new Dictionary <string, string>();
            List <string> list2 = new List <string>();
            int           num   = 0;

            for (int i = 0; i < site.parts.Count; i++)
            {
                List <Rule> list3 = new List <Rule>();
                Dictionary <string, string> dictionary2 = new Dictionary <string, string>();
                site.parts[i].def.Worker.Notify_GeneratedByQuestGen(site.parts[i], QuestGen.slate, list3, dictionary2);
                if (site.parts[i].hidden)
                {
                    continue;
                }
                if (singleSitePartRules != null)
                {
                    List <Rule> list4 = new List <Rule>();
                    list4.AddRange(list3);
                    list4.AddRange(singleSitePartRules.Rules);
                    string text = QuestGenUtility.ResolveLocalText(list4, dictionary2, "root", capitalizeFirstSentence: false);
                    list.Add(new Rule_String("sitePart" + num + "_description", text));
                    if (!text.NullOrEmpty())
                    {
                        list2.Add(text);
                    }
                }
                for (int j = 0; j < list3.Count; j++)
                {
                    Rule        rule        = list3[j].DeepCopy();
                    Rule_String rule_String = rule as Rule_String;
                    if (rule_String != null && num != 0)
                    {
                        rule_String.keyword = "sitePart" + num + "_" + rule_String.keyword;
                    }
                    list.Add(rule);
                }
                foreach (KeyValuePair <string, string> item in dictionary2)
                {
                    string text2 = item.Key;
                    if (num != 0)
                    {
                        text2 = "sitePart" + num + "_" + text2;
                    }
                    if (!dictionary.ContainsKey(text2))
                    {
                        dictionary.Add(text2, item.Value);
                    }
                }
                num++;
            }
            if (!list2.Any())
            {
                list.Add(new Rule_String("allSitePartsDescriptions", "HiddenOrNoSitePartDescription".Translate()));
                list.Add(new Rule_String("allSitePartsDescriptionsExceptFirst", "HiddenOrNoSitePartDescription".Translate()));
            }
            else
            {
                list.Add(new Rule_String("allSitePartsDescriptions", list2.ToClauseSequence().Resolve()));
                if (list2.Count >= 2)
                {
                    list.Add(new Rule_String("allSitePartsDescriptionsExceptFirst", list2.Skip(1).ToList().ToClauseSequence()));
                }
                else
                {
                    list.Add(new Rule_String("allSitePartsDescriptionsExceptFirst", "HiddenOrNoSitePartDescription".Translate()));
                }
            }
            QuestGen.AddQuestDescriptionRules(list);
            QuestGen.AddQuestNameRules(list);
            QuestGen.AddQuestDescriptionConstants(dictionary);
            QuestGen.AddQuestNameConstants(dictionary);
            QuestGen.AddQuestNameRules(new List <Rule>
            {
                new Rule_String("site_label", site.Label)
            });
            return(site);
        }
示例#11
0
        protected override void RunInt()
        {
            if (!ModLister.RoyaltyInstalled)
            {
                Log.ErrorOnce("Bestowing ceremony 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.", 3454535);
                return;
            }
            Quest quest = QuestGen.quest;
            Slate slate = QuestGen.slate;

            if (!TryGetCeremonyTarget(QuestGen.slate, out var pawn, out var bestowingFaction))
            {
                return;
            }
            RoyalTitleDef titleAwardedWhenUpdating = pawn.royalty.GetTitleAwardedWhenUpdating(bestowingFaction, pawn.royalty.GetFavor(bestowingFaction));
            string        text      = QuestGenUtility.HardcodedTargetQuestTagWithQuestID("Bestowing");
            string        text2     = QuestGenUtility.QuestTagSignal(text, "CeremonyExpired");
            string        inSignal  = QuestGenUtility.QuestTagSignal(text, "CeremonyFailed");
            string        inSignal2 = QuestGenUtility.QuestTagSignal(text, "CeremonyDone");
            string        inSignal3 = QuestGenUtility.QuestTagSignal(text, "TitleAwardedWhenUpdatingChanged");
            Thing         thing     = QuestGen_Shuttle.GenerateShuttle(bestowingFaction, null, null, acceptColonists: false, onlyAcceptColonists: false, onlyAcceptHealthy: false, 0, dropEverythingIfUnsatisfied: false, leaveImmediatelyWhenSatisfied: true, dropEverythingOnArrival: true, stayAfterDroppedEverythingOnArrival: true);
            Pawn          pawn2     = quest.GetPawn(new QuestGen_Pawns.GetPawnParms
            {
                mustBeOfKind    = PawnKindDefOf.Empire_Royal_Bestower,
                canGeneratePawn = true,
                mustBeOfFaction = bestowingFaction,
                mustBeWorldPawn = true
            });

            QuestUtility.AddQuestTag(ref thing.questTags, text);
            QuestUtility.AddQuestTag(ref pawn.questTags, text);
            ThingOwner <Thing> innerContainer = pawn2.inventory.innerContainer;

            for (int num = innerContainer.Count - 1; num >= 0; num--)
            {
                if (innerContainer[num].def == ThingDefOf.PsychicAmplifier)
                {
                    Thing thing2 = innerContainer[num];
                    innerContainer.RemoveAt(num);
                    thing2.Destroy();
                }
            }
            int num2 = titleAwardedWhenUpdating.maxPsylinkLevel - pawn.GetPsylinkLevel();

            for (int i = 0; i < num2 + 1; i++)
            {
                innerContainer.TryAdd(ThingMaker.MakeThing(ThingDefOf.PsychicAmplifier), 1);
            }
            List <Pawn> list = new List <Pawn>();

            list.Add(pawn2);
            slate.Set("shuttleContents", list);
            slate.Set("shuttle", thing);
            slate.Set("target", pawn);
            slate.Set("bestowingFaction", bestowingFaction);
            List <Pawn> list2 = new List <Pawn>();

            for (int j = 0; j < 6; j++)
            {
                Pawn item = quest.GeneratePawn(PawnKindDefOf.Empire_Fighter_Janissary, bestowingFaction);
                list.Add(item);
                list2.Add(item);
            }
            slate.Set("defenders", list2);
            CompShuttle compShuttle = thing.TryGetComp <CompShuttle>();

            compShuttle.requiredPawns          = list;
            compShuttle.sendAwayIfAllDespawned = list.Cast <Thing>().ToList();
            compShuttle.sendAwayIfAllPawnsLeftToLoadAreNotOfFaction = bestowingFaction;
            quest.AddContentsToShuttle(thing, list);
            quest.SpawnSkyfaller(null, ThingDefOf.ShuttleIncoming, Gen.YieldSingle(thing), Faction.OfPlayer, null, null, lookForSafeSpot: true, tryLandInShipLandingZone: true, null, pawn);
            quest.FactionGoodwillChange(bestowingFaction, -5, QuestGenUtility.HardcodedSignalWithQuestID("defenders.Killed"), canSendMessage: true, canSendHostilityLetter: true, "GoodwillChangeReason_AttackedFaction".Translate(bestowingFaction));
            QuestPart_BestowingCeremony questPart_BestowingCeremony = new QuestPart_BestowingCeremony();

            questPart_BestowingCeremony.inSignal = QuestGen.slate.Get <string>("inSignal");
            questPart_BestowingCeremony.pawns.Add(pawn2);
            questPart_BestowingCeremony.mapOfPawn = pawn;
            questPart_BestowingCeremony.faction   = pawn2.Faction;
            questPart_BestowingCeremony.bestower  = pawn2;
            questPart_BestowingCeremony.target    = pawn;
            questPart_BestowingCeremony.shuttle   = thing;
            questPart_BestowingCeremony.questTag  = text;
            quest.AddPart(questPart_BestowingCeremony);
            QuestPart_EscortPawn questPart_EscortPawn = new QuestPart_EscortPawn();

            questPart_EscortPawn.inSignal = QuestGen.slate.Get <string>("inSignal");
            questPart_EscortPawn.escortee = pawn2;
            questPart_EscortPawn.pawns.AddRange(list2);
            questPart_EscortPawn.mapOfPawn = pawn;
            questPart_EscortPawn.faction   = pawn2.Faction;
            questPart_EscortPawn.shuttle   = thing;
            quest.AddPart(questPart_EscortPawn);
            string inSignal4 = QuestGenUtility.HardcodedSignalWithQuestID("shuttle.Killed");

            quest.SetFactionRelations(bestowingFaction, FactionRelationKind.Hostile, inSignal4);
            quest.End(QuestEndOutcome.Fail, 0, null, inSignal4, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            QuestPart_RequirementsToAcceptThroneRoom questPart_RequirementsToAcceptThroneRoom = new QuestPart_RequirementsToAcceptThroneRoom();

            questPart_RequirementsToAcceptThroneRoom.faction  = bestowingFaction;
            questPart_RequirementsToAcceptThroneRoom.forPawn  = pawn;
            questPart_RequirementsToAcceptThroneRoom.forTitle = titleAwardedWhenUpdating;
            quest.AddPart(questPart_RequirementsToAcceptThroneRoom);
            QuestPart_RequirementsToAcceptPawnOnColonyMap questPart_RequirementsToAcceptPawnOnColonyMap = new QuestPart_RequirementsToAcceptPawnOnColonyMap();

            questPart_RequirementsToAcceptPawnOnColonyMap.pawn = pawn;
            quest.AddPart(questPart_RequirementsToAcceptPawnOnColonyMap);
            QuestPart_RequirementsToAcceptNoDanger questPart_RequirementsToAcceptNoDanger = new QuestPart_RequirementsToAcceptNoDanger();

            questPart_RequirementsToAcceptNoDanger.map      = pawn.Map;
            questPart_RequirementsToAcceptNoDanger.dangerTo = bestowingFaction;
            quest.AddPart(questPart_RequirementsToAcceptNoDanger);
            string inSignal5 = QuestGenUtility.HardcodedSignalWithQuestID("shuttleContents.Recruited");
            string inSignal6 = QuestGenUtility.HardcodedSignalWithQuestID("bestowingFaction.BecameHostileToPlayer");

            quest.Signal(inSignal5, delegate
            {
                quest.End(QuestEndOutcome.Fail, 0, null, null, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            });
            quest.End(QuestEndOutcome.Fail, 0, null, QuestGenUtility.HardcodedSignalWithQuestID("target.Killed"), QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true);
            quest.Letter(LetterDefOf.NegativeEvent, text2, null, null, null, useColonistsFromCaravanArg: false, QuestPart.SignalListenMode.OngoingOnly, null, filterDeadPawnsFromLookTargets: false, label: "LetterLabelBestowingCeremonyExpired".Translate(), text: "LetterTextBestowingCeremonyExpired".Translate(pawn.Named("TARGET")));
            quest.End(QuestEndOutcome.Fail, 0, null, text2);
            quest.End(QuestEndOutcome.Fail, 0, null, inSignal6, QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true);
            quest.End(QuestEndOutcome.Fail, 0, null, inSignal, QuestPart.SignalListenMode.OngoingOnly, sendStandardLetter: true);
            quest.End(QuestEndOutcome.Fail, 0, null, inSignal3, QuestPart.SignalListenMode.OngoingOrNotYetAccepted, sendStandardLetter: true);
            quest.End(QuestEndOutcome.Success, 0, null, inSignal2);
            QuestPart_Choice questPart_Choice = quest.RewardChoice();

            QuestPart_Choice.Choice item2 = new QuestPart_Choice.Choice
            {
                rewards =
                {
                    (Reward) new Reward_BestowingCeremony
                    {
                        targetPawnName  = pawn.NameShortColored.Resolve(),
                        titleName       = titleAwardedWhenUpdating.GetLabelCapFor(pawn),
                        awardingFaction = bestowingFaction,
                        givePsylink     = (titleAwardedWhenUpdating.maxPsylinkLevel > pawn.GetPsylinkLevel()),
                        royalTitle      = titleAwardedWhenUpdating
                    }
                }
            };
            questPart_Choice.choices.Add(item2);
            List <Rule> list3 = new List <Rule>();

            list3.AddRange(GrammarUtility.RulesForPawn("pawn", pawn));
            list3.Add(new Rule_String("newTitle", titleAwardedWhenUpdating.GetLabelCapFor(pawn)));
            QuestGen.AddQuestNameRules(list3);
            List <Rule> list4 = new List <Rule>();

            list4.AddRange(GrammarUtility.RulesForFaction("faction", bestowingFaction));
            list4.AddRange(GrammarUtility.RulesForPawn("pawn", pawn));
            list4.Add(new Rule_String("newTitle", pawn.royalty.GetTitleAwardedWhenUpdating(bestowingFaction, pawn.royalty.GetFavor(bestowingFaction)).GetLabelFor(pawn)));
            list4.Add(new Rule_String("psylinkLevel", titleAwardedWhenUpdating.maxPsylinkLevel.ToString()));
            QuestGen.AddQuestDescriptionRules(list4);
        }