コード例 #1
0
        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);
        }
コード例 #2
0
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            Map map;

            return(base.CanFireNowSub(parms) && this.TryGetRandomAvailableTargetMap(out map) && IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(map.Tile) != null);
        }
コード例 #3
0
        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);
        }