private float GenerateRequestItems(Quest_ThingsHelp quest, Map map) { int totalCount = 0; int maxCount = (int)(Rand.Range(2f, 7f) * ValueFactorFromWealthCurve.Evaluate(map.wealthWatcher.WealthTotal)); float marketValue = 0; do { ThingDef thingDef = RandomRequiredDef(); int num = Rand.Range(20, 150); if (num > thingDef.stackLimit) { num = thingDef.stackLimit; } if (quest.RequestItems.ContainsKey(thingDef)) { quest.RequestItems[thingDef] += num; } else { quest.RequestItems.Add(thingDef, num); } totalCount++; marketValue += num * thingDef.BaseMarketValue; }while (totalCount < maxCount); return(marketValue); }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!settings.Active) { return(false); } Faction faction = GetFaction(); List <Settlement> factionBases = Find.WorldObjects.Settlements.Where(x => x.Faction == faction && CaravanArrivalTimeEstimator.EstimatedTicksToArrive(Find.AnyPlayerHomeMap.Tile, x.Tile, null).TicksToDays() < 7).ToList(); if (factionBases.Count == 0) { return(false); } Settlement factionBase = factionBases.RandomElement(); if (Find.WorldObjects.WorldObjectAt(factionBase.Tile, QuestRim.WorldObjectDefOfLocal.QuestPlace) != null) { return(false); } Quest_ThingsHelp quest = new Quest_ThingsHelp { id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(), Faction = faction }; float marketValue = GenerateRequestItems(quest, Find.AnyPlayerHomeMap); quest.GenerateRewards(quest.GetQuestThingFilter(), new FloatRange(marketValue * 1.3f, marketValue * 1.7f), new IntRange(3, 6), null, null); LookTargets target = new LookTargets(factionBase.Tile); quest.Target = target; quest.TicksToPass = Rand.Range(12, 25) * 60000; QuestSite questPlace = (QuestSite)WorldObjectMaker.MakeWorldObject(QuestRim.WorldObjectDefOfLocal.QuestPlace); questPlace.Tile = factionBase.Tile; questPlace.SetFaction(faction); questPlace.Init(quest); quest.Site = questPlace; Find.WorldObjects.Add(questPlace); QuestsManager.Communications.AddQuest(quest, QuestsManager.Communications.MakeQuestLetter(quest, description: def.description, lookTarget: target)); return(true); }