public static IntVec3 TradeDropSpot(Map map) { IEnumerable <Building> collection = from b in map.listerBuildings.allBuildingsColonist where b.def.IsCommsConsole select b; IEnumerable <Building> enumerable = from b in map.listerBuildings.allBuildingsColonist where b.def.IsOrbitalTradeBeacon select b; Building building = enumerable.FirstOrDefault((Building b) => !map.roofGrid.Roofed(b.Position) && DropCellFinder.AnyAdjacentGoodDropSpot(b.Position, map, false, false)); IntVec3 position; if (building != null) { position = building.Position; IntVec3 result; if (!DropCellFinder.TryFindDropSpotNear(position, map, out result, false, false)) { Log.Error("Could find no good TradeDropSpot near dropCenter " + position + ". Using a random standable unfogged cell.", false); result = CellFinderLoose.RandomCellWith((IntVec3 c) => c.Standable(map) && !c.Fogged(map), map, 1000); } return(result); } List <Building> list = new List <Building>(); list.AddRange(enumerable); list.AddRange(collection); list.RemoveAll(delegate(Building b) { CompPowerTrader compPowerTrader = b.TryGetComp <CompPowerTrader>(); return(compPowerTrader != null && !compPowerTrader.PowerOn); }); Predicate <IntVec3> validator = (IntVec3 c) => DropCellFinder.IsGoodDropSpot(c, map, false, false); if (!list.Any <Building>()) { list.AddRange(map.listerBuildings.allBuildingsColonist); list.Shuffle <Building>(); if (!list.Any <Building>()) { return(CellFinderLoose.RandomCellWith(validator, map, 1000)); } } int num = 8; while (true) { for (int i = 0; i < list.Count; i++) { IntVec3 position2 = list[i].Position; if (CellFinder.TryFindRandomCellNear(position2, map, num, validator, out position, -1)) { return(position); } } num = Mathf.RoundToInt((float)num * 1.1f); if (num > map.Size.x) { goto Block_9; } } return(position); Block_9: Log.Error("Failed to generate trade drop center. Giving random.", false); return(CellFinderLoose.RandomCellWith(validator, map, 1000)); }