protected override bool TryExecuteWorker(IncidentParms parms) { Map map; if (!this.TryGetRandomAvailableTargetMap(out map)) { return(false); } SettlementBase settlementBase = IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(map.Tile); if (settlementBase == null) { return(false); } TradeRequestComp component = settlementBase.GetComponent <TradeRequestComp>(); if (!this.TryGenerateTradeRequest(component, map)) { return(false); } string text = "LetterCaravanRequest".Translate(new object[] { settlementBase.Label, TradeRequestUtility.RequestedThingLabel(component.requestThingDef, component.requestCount).CapitalizeFirst(), (component.requestThingDef.GetStatValueAbstract(StatDefOf.MarketValue, null) * (float)component.requestCount).ToStringMoney("F0"), GenThing.ThingsToCommaList(component.rewards, true, true, -1).CapitalizeFirst(), GenThing.GetMarketValue(component.rewards).ToStringMoney("F0"), (component.expiration - Find.TickManager.TicksGame).ToStringTicksToDays("F0"), CaravanArrivalTimeEstimator.EstimatedTicksToArrive(map.Tile, settlementBase.Tile, null).ToStringTicksToDays("0.#") }); GenThing.TryAppendSingleRewardInfo(ref text, component.rewards); Find.LetterStack.ReceiveLetter("LetterLabelCaravanRequest".Translate(), text, LetterDefOf.PositiveEvent, settlementBase, settlementBase.Faction, null); return(true); }
protected override bool CanFireNowSub(IncidentParms parms) { Map map; return(base.CanFireNowSub(parms) && this.TryGetRandomAvailableTargetMap(out map) && IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(map.Tile) != null); }
private bool TryGetRandomAvailableTargetMap(out Map map) { IncidentWorker_QuestTradeRequest.tmpAvailableMaps.Clear(); List <Map> maps = Find.Maps; for (int i = 0; i < maps.Count; i++) { if (maps[i].IsPlayerHome && this.AtLeast2HealthyColonists(maps[i]) && IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(maps[i].Tile) != null) { IncidentWorker_QuestTradeRequest.tmpAvailableMaps.Add(maps[i]); } } bool result = IncidentWorker_QuestTradeRequest.tmpAvailableMaps.TryRandomElement(out map); IncidentWorker_QuestTradeRequest.tmpAvailableMaps.Clear(); return(result); }