public void Use() { QuestGiverManager questGiverManager = null; if (!storytellerWatcher.questGiverManagers.TryGetValue(Props.questManagerID, out questGiverManager)) { questGiverManager = storytellerWatcher.AddQuestGiverManager(Props.questManagerID, Props.questGiver); questGiverManager.Init(); } questGiverManager.CallWindow(); }
public QuestGiverManager AddQuestGiverManager(int questManagerID, QuestGiverDef def) { var questGiverManager = new QuestGiverManager(def); questGiverManagers[questManagerID] = questGiverManager; if (def.generateOnce) { questGiverManager.GenerateQuests(); } return(questGiverManager); }
public override bool Allows(QuestGiverManager questGiverManager, Quest quest, Slate slate, out QuestInfo questInfo) { var asker = slate.Get <Pawn>("asker"); if (asker?.Faction != null && asker.Faction.GoodwillWith(Faction.OfPlayer) >= minimunGoodwillRequirement) { var currencyInfo = new GoodwillCurrencyInfo(); currencyInfo.currency = Currency.Goodwill; currencyInfo.amount = questGiverManager.def.currency.costToAcceptQuest; questInfo = new QuestInfo(quest, asker.Faction, currencyInfo, onlyOneChoice: questGiverManager.def.onlyOneReward ? true : false); return(true); } questInfo = null; return(false); }
public virtual List <QuestInfo> GenerateQuests(QuestGiverManager questGiverManager) { List <QuestInfo> generatedQuests = new List <QuestInfo>(); var questCountToGenerate = def.maximumAvailableQuestCount != -1 ? (def.maximumAvailableQuestCount - questGiverManager.AvailableQuests.Count) : 100; var points = StorytellerUtility.DefaultThreatPointsNow(Find.World); var questDefsToProcess = DefDatabase <QuestScriptDef> .AllDefs.Where(x => !x.isRootSpecial && x.IsRootAny).ToList(); Log.Message($"quest count to generate: {questCountToGenerate} - points: {points}"); while (generatedQuests.Count < questCountToGenerate) { if (!questDefsToProcess.Any()) { break; } var newQuestCandidate = questDefsToProcess.RandomElement(); questDefsToProcess.Remove(newQuestCandidate); Log.Message($"newQuestCandidate is choosen: {newQuestCandidate}"); try { Slate slate = new Slate(); slate.Set("points", points); if (newQuestCandidate == QuestScriptDefOf.LongRangeMineralScannerLump) { slate.Set("targetMineable", ThingDefOf.MineableGold); slate.Set("worker", PawnsFinder.AllMaps_FreeColonists.FirstOrDefault()); } if (newQuestCandidate.CanRun(slate)) { Quest quest = QuestGen.Generate(newQuestCandidate, slate); if (def.currency.Allows(questGiverManager, quest, Patch_AddSlateQuestTags.slate, out QuestInfo questInfo)) { generatedQuests.Add(questInfo); Log.Message($"Added new quest {quest.name}"); } } } catch (Exception ex) { Log.Message("Exception: " + ex); } } return(generatedQuests); }
public virtual bool Allows(QuestGiverManager questGiverManager, Quest toCheck, Slate slate, out QuestInfo questInfo) { questInfo = null; return(true); }