public static Quest GenerateQuestAndMakeAvailable(QuestScriptDef root, float points) { Slate slate = new Slate(); slate.Set("points", points); return(GenerateQuestAndMakeAvailable(root, slate)); }
public static Quest GenerateQuestAndMakeAvailable(QuestScriptDef root, Slate vars) { Quest quest = RimWorld.QuestGen.QuestGen.Generate(root, vars); Find.QuestManager.Add(quest); return(quest); }
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)); }
public void RecordDecreeFired(QuestScriptDef questScript) { recentRandomDecrees.Insert(0, questScript); while (recentRandomDecrees.Count > 5) { recentRandomDecrees.RemoveAt(recentRandomDecrees.Count - 1); } }
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); } }
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; } }
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); }
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)); }
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); } } }
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); }
protected virtual void GiveQuest(IncidentParms parms, QuestScriptDef questDef) { QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(questDef, parms.points)); }