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();
        }
Exemplo n.º 2
0
        public QuestGiverManager AddQuestGiverManager(int questManagerID, QuestGiverDef def)
        {
            var questGiverManager = new QuestGiverManager(def);

            questGiverManagers[questManagerID] = questGiverManager;
            if (def.generateOnce)
            {
                questGiverManager.GenerateQuests();
            }
            return(questGiverManager);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 public virtual bool Allows(QuestGiverManager questGiverManager, Quest toCheck, Slate slate, out QuestInfo questInfo)
 {
     questInfo = null;
     return(true);
 }