public static void TradeRequests() { Map currentMap = Find.CurrentMap; IncidentWorker_QuestTradeRequest incidentWorker_QuestTradeRequest = (IncidentWorker_QuestTradeRequest)IncidentDefOf.Quest_TradeRequest.Worker; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Randomly-generated trade requests for map " + currentMap.ToString() + ":"); stringBuilder.AppendLine(); for (int i = 0; i < 50; i++) { SettlementBase settlementBase = IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(currentMap.Tile); if (settlementBase == null) { break; } stringBuilder.AppendLine("Settlement: " + settlementBase.LabelCap); TradeRequestComp component = settlementBase.GetComponent <TradeRequestComp>(); if (incidentWorker_QuestTradeRequest.TryGenerateTradeRequest(component, currentMap)) { stringBuilder.AppendLine("Duration: " + (component.expiration - Find.TickManager.TicksGame).ToStringTicksToDays("F1")); string str = GenLabel.ThingLabel(component.requestThingDef, null, component.requestCount) + " ($" + (component.requestThingDef.BaseMarketValue * (float)component.requestCount).ToString("F0") + ")"; stringBuilder.AppendLine("Request: " + str); string str2 = GenThing.ThingsToCommaList(component.rewards, false, true, -1) + " ($" + (from t in component.rewards select t.MarketValue * (float)t.stackCount).Sum().ToString("F0") + ")"; stringBuilder.AppendLine("Reward: " + str2); } else { stringBuilder.AppendLine("TryGenerateTradeRequest failed."); } stringBuilder.AppendLine(); settlementBase.GetComponent <TradeRequestComp>().Disable(); } Log.Message(stringBuilder.ToString(), false); }
public static void TradeRequestsSampled() { Map currentMap = Find.CurrentMap; IncidentWorker_QuestTradeRequest incidentWorker_QuestTradeRequest = (IncidentWorker_QuestTradeRequest)IncidentDefOf.Quest_TradeRequest.Worker; Dictionary <ThingDef, int> counts = new Dictionary <ThingDef, int>(); for (int i = 0; i < 100; i++) { SettlementBase settlementBase = IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(currentMap.Tile); if (settlementBase == null) { break; } TradeRequestComp component = settlementBase.GetComponent <TradeRequestComp>(); if (incidentWorker_QuestTradeRequest.TryGenerateTradeRequest(component, currentMap)) { if (!counts.ContainsKey(component.requestThingDef)) { counts.Add(component.requestThingDef, 0); } Dictionary <ThingDef, int> dictionary; ThingDef requestThingDef; (dictionary = counts)[requestThingDef = component.requestThingDef] = dictionary[requestThingDef] + 1; } settlementBase.GetComponent <TradeRequestComp>().Disable(); } DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where counts.ContainsKey(d) orderby counts[d] descending select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("appearance rate in " + 100 + " trade requests", (ThingDef d) => ((float)counts[d] / 100f).ToStringPercent())); }
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); }
private static void WorldReachUtility_PostFix(ref bool __result, Caravan c) { SettlementBase settlement = CaravanVisitUtility.SettlementVisitedNow(caravan: c); WorldObjectComp_SettlementBumperCropComp bumperCropComponent = settlement?.GetComponent <WorldObjectComp_SettlementBumperCropComp>(); if (bumperCropComponent != null) { __result = !bumperCropComponent.CaravanIsWorking; } }
internal bool <> m__0(SettlementBase settlement) { return(settlement.Visitable && settlement.GetComponent <TradeRequestComp>() != null && !settlement.GetComponent <TradeRequestComp>().ActiveRequest&& Find.WorldGrid.ApproxDistanceInTiles(this.originTile, settlement.Tile) < 36f && Find.WorldReachability.CanReach(this.originTile, settlement.Tile)); }