コード例 #1
0
        public static Quest GenerateQuestAndMakeAvailable(QuestScriptDef root, float points)
        {
            Slate slate = new Slate();

            slate.Set("points", points);
            return(GenerateQuestAndMakeAvailable(root, slate));
        }
コード例 #2
0
        public static Quest GenerateQuestAndMakeAvailable(QuestScriptDef root, Slate vars)
        {
            Quest quest = RimWorld.QuestGen.QuestGen.Generate(root, vars);

            Find.QuestManager.Add(quest);
            return(quest);
        }
コード例 #3
0
        protected override void GiveQuest(IncidentParms parms, QuestScriptDef questDef)
        {
            Slate slate = new Slate();

            slate.Set("points", parms.points);
            slate.Set("map", (Map)parms.target);
            QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(questDef, slate));
        }
コード例 #4
0
 public void RecordDecreeFired(QuestScriptDef questScript)
 {
     recentRandomDecrees.Insert(0, questScript);
     while (recentRandomDecrees.Count > 5)
     {
         recentRandomDecrees.RemoveAt(recentRandomDecrees.Count - 1);
     }
 }
コード例 #5
0
        public static float GetNaturalRandomSelectionWeight(QuestScriptDef quest, float points, StoryState storyState)
        {
            if (quest.rootSelectionWeight <= 0f || points < quest.rootMinPoints || StorytellerUtility.GetProgressScore(storyState.Target) < quest.rootMinProgressScore)
            {
                return(0f);
            }
            float num = quest.rootSelectionWeight;

            for (int i = 0; i < storyState.RecentRandomQuests.Count; i++)
            {
                if (storyState.RecentRandomQuests[i] == quest)
                {
                    switch (i)
                    {
                    case 0:
                        num *= 0.01f;
                        break;

                    case 1:
                        num *= 0.3f;
                        break;

                    case 2:
                        num *= 0.5f;
                        break;

                    case 3:
                        num *= 0.7f;
                        break;

                    case 4:
                        num *= 0.9f;
                        break;
                    }
                }
            }
            if (!quest.canGiveRoyalFavor && PlayerWantsRoyalFavorFromAnyFaction())
            {
                int   num2 = (storyState.LastRoyalFavorQuestTick != -1) ? storyState.LastRoyalFavorQuestTick : 0;
                float x    = (float)(Find.TickManager.TicksGame - num2) / 60000f;
                num *= QuestTuning.NonFavorQuestSelectionWeightFactorByDaysSinceFavorQuestCurve.Evaluate(x);
            }
            return(num);

            bool PlayerWantsRoyalFavorFromAnyFaction()
            {
                List <Faction> allFactionsListForReading = Find.FactionManager.AllFactionsListForReading;

                for (int j = 0; j < allFactionsListForReading.Count; j++)
                {
                    if (allFactionsListForReading[j].allowRoyalFavorRewards && allFactionsListForReading[j] != Faction.OfPlayer && allFactionsListForReading[j].def.HasRoyalTitles)
                    {
                        return(true);
                    }
                }
                return(false);
            }
        }
コード例 #6
0
 public void RecordRandomQuestFired(QuestScriptDef questScript)
 {
     recentRandomQuests.Insert(0, questScript);
     while (recentRandomQuests.Count > 5)
     {
         recentRandomQuests.RemoveAt(recentRandomQuests.Count - 1);
     }
     if (questScript.canGiveRoyalFavor)
     {
         lastRoyalFavorQuestTick = Find.TickManager.TicksGame;
     }
 }
コード例 #7
0
        public static DiaNode RoyalHeirChangeCandidates(Faction faction, Pawn factionRepresentative, Pawn negotiator)
        {
            DiaNode       diaNode = new DiaNode("ChooseHeir".Translate(negotiator.Named("HOLDER")));
            RoyalTitleDef title   = negotiator.royalty.GetCurrentTitle(faction);
            Pawn          heir2   = negotiator.royalty.GetHeir(faction);

            foreach (Pawn item in PawnsFinder.AllMaps_FreeColonistsAndPrisonersSpawned)
            {
                DiaOption diaOption = new DiaOption(item.Name.ToStringFull);
                if (item == negotiator || item == heir2)
                {
                    continue;
                }
                if (item.royalty != null)
                {
                    RoyalTitleDef currentTitle = item.royalty.GetCurrentTitle(faction);
                    if (currentTitle != null && currentTitle.seniority >= title.seniority)
                    {
                        continue;
                    }
                }
                if (item.IsQuestLodger())
                {
                    continue;
                }
                Pawn   heir         = item;
                Action confirmedAct = delegate
                {
                    QuestScriptDef changeRoyalHeir = QuestScriptDefOf.ChangeRoyalHeir;
                    Slate          slate           = new Slate();
                    slate.Set("points", title.changeHeirQuestPoints);
                    slate.Set("asker", factionRepresentative);
                    slate.Set("titleHolder", negotiator);
                    slate.Set("titleHeir", heir);
                    slate.Set("titlePreviousHeir", negotiator.royalty.GetHeir(faction));
                    Quest quest = QuestUtility.GenerateQuestAndMakeAvailable(changeRoyalHeir, slate);
                    if (!quest.hidden)
                    {
                        QuestUtility.SendLetterQuestAvailable(quest);
                    }
                };
                diaOption.link = RoyalHeirChangeConfirm(faction, negotiator, heir2, confirmedAct);
                diaNode.options.Add(diaOption);
            }
            DiaOption diaOption2 = new DiaOption("GoBack".Translate());

            diaOption2.linkLateBind = ResetToRoot(faction, negotiator);
            diaNode.options.Add(diaOption2);
            return(diaNode);
        }
コード例 #8
0
        public static float DebugTotalNaturalRandomSelectionWeight(QuestScriptDef quest, float points, IIncidentTarget target)
        {
            if (!quest.IsRootRandomSelected)
            {
                return(0f);
            }
            if (!quest.CanRun(points))
            {
                return(0f);
            }
            float naturalRandomSelectionWeight = GetNaturalRandomSelectionWeight(quest, points, target.StoryState);
            float num = QuestTuning.IncreasesPopQuestChanceByPopIntentCurve.Evaluate(StorytellerUtilityPopulation.PopulationIntentForQuest);

            return(num * (quest.rootIncreasesPopulation ? naturalRandomSelectionWeight : 0f) + (1f - num) * ((!quest.rootIncreasesPopulation) ? naturalRandomSelectionWeight : 0f));
        }
コード例 #9
0
        public static float GetNaturalRandomSelectionWeight(QuestScriptDef quest, float points, StoryState storyState)
        {
            if (quest.rootSelectionWeight <= 0f || points < quest.rootMinPoints || StorytellerUtility.GetProgressScore(storyState.Target) < quest.rootMinProgressScore)
            {
                return(0f);
            }
            float num = quest.rootSelectionWeight;

            if (quest.rootSelectionWeightFactorFromPointsCurve != null)
            {
                num *= quest.rootSelectionWeightFactorFromPointsCurve.Evaluate(points);
            }
            for (int i = 0; i < storyState.RecentRandomQuests.Count; i++)
            {
                if (storyState.RecentRandomQuests[i] == quest)
                {
                    switch (i)
                    {
                    case 0:
                        num *= 0.01f;
                        break;

                    case 1:
                        num *= 0.3f;
                        break;

                    case 2:
                        num *= 0.5f;
                        break;

                    case 3:
                        num *= 0.7f;
                        break;

                    case 4:
                        num *= 0.9f;
                        break;
                    }
                }
            }
            if (!quest.canGiveRoyalFavor && PlayerWantsRoyalFavorFromAnyFaction())
            {
                int   num2 = ((storyState.LastRoyalFavorQuestTick != -1) ? storyState.LastRoyalFavorQuestTick : 0);
                float x    = (float)(Find.TickManager.TicksGame - num2) / 60000f;
                num *= QuestTuning.NonFavorQuestSelectionWeightFactorByDaysSinceFavorQuestCurve.Evaluate(x);
            }
            return(num);
 private void CallShuttle(IntVec3 landingCell)
 {
     if (caller.Spawned)
     {
         QuestScriptDef permit_CallShuttle = QuestScriptDefOf.Permit_CallShuttle;
         Slate          slate = new Slate();
         slate.Set("asker", caller);
         slate.Set("map", caller.Map);
         slate.Set("landingCell", landingCell);
         slate.Set("permitFaction", calledFaction);
         QuestUtility.GenerateQuestAndMakeAvailable(permit_CallShuttle, slate);
         caller.royalty.GetPermit(def, calledFaction).Notify_Used();
         if (!free)
         {
             caller.royalty.TryRemoveFavor(calledFaction, def.royalAid.favorCost);
         }
     }
 }
 private void CallLaborers(Pawn pawn, Map map, Faction faction, bool free)
 {
     if (!faction.HostileTo(Faction.OfPlayer))
     {
         QuestScriptDef permit_CallLaborers = QuestScriptDefOf.Permit_CallLaborers;
         Slate          slate = new Slate();
         slate.Set("map", map);
         slate.Set("laborersCount", def.royalAid.pawnCount);
         slate.Set("permitFaction", faction);
         slate.Set("laborersPawnKind", def.royalAid.pawnKindDef);
         slate.Set("laborersDurationDays", def.royalAid.aidDurationDays);
         QuestUtility.GenerateQuestAndMakeAvailable(permit_CallLaborers, slate);
         pawn.royalty.GetPermit(def, faction).Notify_Used();
         if (!free)
         {
             pawn.royalty.TryRemoveFavor(faction, def.royalAid.favorCost);
         }
     }
 }
コード例 #12
0
        public static float GetNaturalDecreeSelectionWeight(QuestScriptDef quest, StoryState storyState)
        {
            if (quest.decreeSelectionWeight <= 0f)
            {
                return(0f);
            }
            float num = quest.decreeSelectionWeight;

            for (int i = 0; i < storyState.RecentRandomDecrees.Count; i++)
            {
                if (storyState.RecentRandomDecrees[i] == quest)
                {
                    switch (i)
                    {
                    case 0:
                        num *= 0.01f;
                        break;

                    case 1:
                        num *= 0.3f;
                        break;

                    case 2:
                        num *= 0.5f;
                        break;

                    case 3:
                        num *= 0.7f;
                        break;

                    case 4:
                        num *= 0.9f;
                        break;
                    }
                }
            }
            return(num);
        }
コード例 #13
0
 protected virtual void GiveQuest(IncidentParms parms, QuestScriptDef questDef)
 {
     QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(questDef, parms.points));
 }