protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; if (map.passingShipManager.passingShips.Count >= 5) { return(false); } TraderKindDef def; if ((from x in DefDatabase <TraderKindDef> .AllDefs where x.orbital select x).TryRandomElementByWeight((TraderKindDef traderDef) => traderDef.CalculatedCommonality, out def)) { TradeShip tradeShip = new TradeShip(def); if (map.listerBuildings.allBuildingsColonist.Any((Building b) => b.def.IsCommsConsole && b.GetComp <CompPowerTrader>().PowerOn)) { Find.LetterStack.ReceiveLetter(tradeShip.def.LabelCap, "TraderArrival".Translate(new object[] { tradeShip.name, tradeShip.def.label }), LetterDefOf.PositiveEvent, null); } map.passingShipManager.AddShip(tradeShip); tradeShip.GenerateThings(); return(true); } throw new InvalidOperationException(); }
public static void LaunchThingsOfType(ThingDef resDef, int debt, Map map, TradeShip trader) { while (true) { Thing thing; if (debt > 0) { thing = null; foreach (Building_OrbitalTradeBeacon item in Building_OrbitalTradeBeacon.AllPowered(map)) { foreach (IntVec3 tradeableCell in item.TradeableCells) { foreach (Thing item2 in map.thingGrid.ThingsAt(tradeableCell)) { if (item2.def != resDef) { continue; } thing = item2; goto IL_009d; } } } goto IL_009d; } return; IL_009d: if (thing == null) { break; } int num = Math.Min(debt, thing.stackCount); if (trader != null) { trader.GiveSoldThingToTrader(thing, num, TradeSession.playerNegotiator); } else { thing.SplitOff(num).Destroy(); } debt -= num; } Log.Error("Could not find any " + resDef + " to transfer to trader."); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; if (map.passingShipManager.passingShips.Count >= 5) { return(false); } if (DefDatabase <TraderKindDef> .AllDefs.Where((TraderKindDef x) => CanSpawn(map, x)).TryRandomElementByWeight((TraderKindDef traderDef) => traderDef.CalculatedCommonality, out var result)) { TradeShip tradeShip = new TradeShip(result, GetFaction(result)); if (map.listerBuildings.allBuildingsColonist.Any((Building b) => b.def.IsCommsConsole && (b.GetComp <CompPowerTrader>() == null || b.GetComp <CompPowerTrader>().PowerOn))) { SendStandardLetter(tradeShip.def.LabelCap, "TraderArrival".Translate(tradeShip.name, tradeShip.def.label, (tradeShip.Faction == null) ? "TraderArrivalNoFaction".Translate() : "TraderArrivalFromFaction".Translate(tradeShip.Faction.Named("FACTION"))), LetterDefOf.PositiveEvent, parms, LookTargets.Invalid); } map.passingShipManager.AddShip(tradeShip); tradeShip.GenerateThings(); return(true); } throw new InvalidOperationException(); }
public static void LaunchThingsOfType(ThingDef resDef, int debt, Map map, TradeShip trader) { while (debt > 0) { Thing thing = null; foreach (Building_OrbitalTradeBeacon current in Building_OrbitalTradeBeacon.AllPowered(map)) { foreach (IntVec3 current2 in current.TradeableCells) { foreach (Thing current3 in map.thingGrid.ThingsAt(current2)) { if (current3.def == resDef) { thing = current3; goto IL_CC; } } } } IL_CC: if (thing == null) { Log.Error("Could not find any " + resDef + " to transfer to trader."); break; } int num = Math.Min(debt, thing.stackCount); if (trader != null) { trader.GiveSoldThingToTrader(thing, num, TradeSession.playerNegotiator); } else { thing.SplitOff(num).Destroy(DestroyMode.Vanish); } debt -= num; } }