public static IEnumerable <FloatMenuOption> GetSettle( SettlementBase bs, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car) { foreach (FloatMenuOption floatMenuOption in HelicopterStatic.GetMapParent((MapParent)bs, pods, representative, car)) { FloatMenuOption o = floatMenuOption; yield return(o); o = (FloatMenuOption)null; } foreach (FloatMenuOption visitFloatMenuOption in HelicoptersArrivalActionUtility.GetVisitFloatMenuOptions(representative, pods, bs, car)) { FloatMenuOption f = visitFloatMenuOption; yield return(f); f = (FloatMenuOption)null; } foreach (FloatMenuOption giftFloatMenuOption in HelicoptersArrivalActionUtility.GetGIFTFloatMenuOptions(representative, pods, bs, car)) { FloatMenuOption f2 = giftFloatMenuOption; yield return(f2); f2 = (FloatMenuOption)null; } foreach (FloatMenuOption atkFloatMenuOption in HelicoptersArrivalActionUtility.GetATKFloatMenuOptions(representative, pods, bs, car)) { FloatMenuOption f3 = atkFloatMenuOption; yield return(f3); f3 = (FloatMenuOption)null; } }
public SettlementBuilder(GameGenerator gameGen, SettlementBase set) { GameGenerator = gameGen; if (gameGen != null) { GenerationRandom = new GenerationRandom(gameGen.Seed); } else { GenerationRandom = new GenerationRandom(0); } BaseChunk = set.BaseChunk; Centre = set.Centre; BaseCoord = set.BaseCoord; SettlementChunks = set.SettlementChunks; TileSize = set.TileSize; PathTile = Tile.STONE_PATH; MidTile = new Vec2i(TileSize / 2, TileSize / 2); Tiles = new Tile[TileSize, TileSize]; SettlementObjects = new WorldObjectData[TileSize, TileSize]; Buildings = new List <Building>(); //PathNodes = new List<Vec2i>(); BuildingPlots = new List <Recti>(); SettlementType = set.SettlementType; //TestNodes = new List<SettlementPathNode>(); TestNodes2 = new SettlementPathNode[TileSize / NODE_RES, TileSize / NODE_RES]; //Defines a path node to be once every chunk PathNodeRes = World.ChunkSize; PathNodes = new float[TileSize / NODE_RES, TileSize / NODE_RES]; PNSize = TileSize / PathNodeRes; }
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 Command TradeCommand(WorldShip worldShip) { Pawn bestNegotiator = BestNegotiator(worldShip); Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandTrade".Translate(); command_Action.defaultDesc = "CommandTradeDesc".Translate(); command_Action.icon = DropShipUtility.TradeCommandTex; command_Action.action = delegate { SettlementBase Settlement = (SettlementBase)Find.WorldObjects.SettlementBaseAt(worldShip.Tile); if (Settlement != null && Settlement.CanTradeNow) { //caravan.UnloadCargoForTrading(); //Find.WindowStack.Add(new Dialog_TradeFromShips(caravan, bestNegotiator, Settlement)); Find.WindowStack.Add(new Dialog_TradeFromShips(worldShip, bestNegotiator, Settlement)); string empty = string.Empty; string empty2 = string.Empty; PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(Settlement.Goods.OfType <Pawn>(), ref empty, ref empty2, "LetterRelatedPawnsTradingWithSettlement".Translate(), false); if (!empty2.NullOrEmpty()) { Find.LetterStack.ReceiveLetter(empty, empty2, LetterDefOf.PositiveEvent, Settlement, null); } } }; if (bestNegotiator == null) { command_Action.Disable("CommandTradeFailNoNegotiator".Translate()); } return(command_Action); }
static void Postfix(ref IEnumerable <Gizmo> __result, SettlementBase __instance) { if (EmbarkShipUtility.AdjacentOceanTile(__instance.Tile) == -1) { return; } List <Gizmo> newResult = new List <Gizmo>(); foreach (Gizmo gizmo in __result) { newResult.Add(gizmo); } //FEATURE NOT IMPLEMENTED /* * //adds an embark ship button for every shipyard in the map * foreach (Zone zone in __instance.Map.zoneManager.AllZones) * { * if (zone is Zone_Shipyard) * { * newResult.Add(EmbarkShipUtility.EmbarkCommand()); * (Command)newResult.Last()).def * } * } */ newResult.Add(EmbarkShipUtility.EmbarkCommand()); newResult.Add(ShipMoverTest.MoveCommand()); __result = newResult; }
public static IEnumerable <FloatMenuOption> GetATKFloatMenuOptions( CompLaunchableSRTS representative, IEnumerable <IThingHolder> pods, SettlementBase settlement, Caravan car) { Func <FloatMenuAcceptanceReport> acceptanceReportGetter1 = (Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement)); Func <TransportPodsArrivalAction_AttackSettlement> arrivalActionGetter1 = (Func <TransportPodsArrivalAction_AttackSettlement>)(() => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.EdgeDrop)); object[] objArray1 = new object[1] { (object)settlement.Label }; foreach (FloatMenuOption floatMenuOption in SRTSArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(acceptanceReportGetter1, arrivalActionGetter1, "AttackAndDropAtEdge".Translate(objArray1), representative, settlement.Tile, car)) { FloatMenuOption f = floatMenuOption; yield return(f); f = (FloatMenuOption)null; } Func <FloatMenuAcceptanceReport> acceptanceReportGetter2 = (Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement)); Func <TransportPodsArrivalAction_AttackSettlement> arrivalActionGetter2 = (Func <TransportPodsArrivalAction_AttackSettlement>)(() => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.CenterDrop)); object[] objArray2 = new object[1] { (object)settlement.Label }; foreach (FloatMenuOption floatMenuOption in SRTSArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(acceptanceReportGetter2, arrivalActionGetter2, "AttackAndDropInCenter".Translate(objArray2), representative, settlement.Tile, car)) { FloatMenuOption f2 = floatMenuOption; yield return(f2); f2 = (FloatMenuOption)null; } }
static void Postfix(ref SettlementBase __result, int originTile) { if (__result is City city && (city.Abandoned || city.Faction.HostileTo(Faction.OfPlayer))) { __result = null; } }
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); }
public static IEnumerable <FloatMenuOption> GetVisitFloatMenuOptions( CompLaunchableSRTS representative, IEnumerable <IThingHolder> pods, SettlementBase settlement, Caravan car) { return(SRTSArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSettlement>((Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_VisitSettlement.CanVisit(pods, settlement)), (Func <TransportPodsArrivalAction_VisitSettlement>)(() => new TransportPodsArrivalAction_VisitSettlement(settlement)), "VisitSettlement".Translate((object)settlement.Label), representative, settlement.Tile, car)); }
private void AddSettlementBaseToKingdom(Kingdom k, SettlementBase b) { foreach (Vec2i v in b.SettlementChunks) { TerrainGenerator.ChunkBases[v.x, v.z].SetHasSettlement(true); } KingdomSettlements[k].Add(b); }
public SettlementBase AllyOfNearbySettlement(SettlementBase origin) => (from settlement in Find.WorldObjects.SettlementBases where settlement.Tile != origin.Tile && (settlement.Faction == origin.Faction || settlement.Faction?.GoodwillWith(origin.Faction) >= 0) && settlement.trader.CanTradeNow && Find.WorldGrid.ApproxDistanceInTiles(origin.Tile, settlement.Tile) < 20f && Find.WorldReachability.CanReach(origin.Tile, settlement.Tile) select settlement).RandomElement();
static bool Prefix(ref FloatMenuAcceptanceReport __result, Caravan caravan, SettlementBase settlement) { if (settlement is City city && city.Abandoned) { __result = false; return(false); } return(true); }
public override void Tick() { base.Tick(); SettlementBase colony = Find.WorldObjects.ObjectsAt(worldTileElectedOn).OfType <SettlementBase>().FirstOrDefault(); if (this.pawn.Dead || !PsychologyBase.ActivateElections() || colony == null || colony.Map.lordManager.lords.Find(l => l.LordJob is LordJob_Joinable_Election) != null) { this.pawn.health.RemoveHediff(this); } }
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; } }
public SettlementBase AllyOfNearbySettlement(SettlementBase origin) { return((from settlement in Find.WorldObjects.SettlementBases where settlement.Tile != origin.Tile && (settlement.Faction == origin.Faction || settlement.Faction.GoodwillWith(origin.Faction) >= 0) && settlement.trader.CanTradeNow && Find.WorldGrid.ApproxDistanceInTiles(origin.Tile, settlement.Tile) < 20f && Find.WorldReachability.CanReach(origin.Tile, settlement.Tile) select settlement).RandomElement()); //ByWeight(x => x.Faction.GoodwillWith(origin.Faction)); //tried get relation w/ itself. }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; SettlementBase settlementBase = Find.WorldObjects.ObjectsAt(map.Tile).OfType <SettlementBase>().First(); int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * GenDate.TicksPerDay); GameCondition cond = GameConditionMaker.MakeCondition(this.def.gameCondition, duration, 0); map.gameConditionManager.RegisterCondition(cond); Find.LetterStack.ReceiveLetter("LetterLabelNewElection".Translate(settlementBase.Label), "LetterNewElection".Translate(settlementBase.Label), LetterDefOf.PositiveEvent, new TargetInfo(map.Center, map, false), null); return(true); }
public static IEnumerable <FloatMenuOption> GetGIFTFloatMenuOptions( CompLaunchableSRTS representative, IEnumerable <IThingHolder> pods, SettlementBase settlement, Caravan car) { if (settlement.Faction == Faction.OfPlayer) { return(Enumerable.Empty <FloatMenuOption>()); } return(SRTSArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_GiveGift>((Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_GiveGift.CanGiveGiftTo(pods, settlement)), (Func <TransportPodsArrivalAction_GiveGift>)(() => new TransportPodsArrivalAction_GiveGift(settlement)), "GiveGiftViaTransportPods".Translate((object)settlement.Faction.Name, (object)FactionGiftUtility.GetGoodwillChange(pods, settlement).ToStringWithSign()), representative, settlement.Tile, car)); }
public static void Prefix(List <ActiveDropPodInfo> pods, SettlementBase giveTo) { if (Utilities.FactionsWar().GetByFaction(giveTo.Faction) != null) { float totalValue = 0; foreach (ActiveDropPodInfo i in pods) { foreach (Thing t in i.innerContainer) { totalValue += t.MarketValue; } } Utilities.FactionsWar().GetByFaction(giveTo.Faction).resources += totalValue; } }
public override IEnumerable <Gizmo> GetGizmos() { if (this.IsPlayerControlled) { Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandLaunchShip".Translate(); command_Action.defaultDesc = "CommandLaunchShipDesc".Translate(); command_Action.icon = DropShipUtility.LaunchSingleCommandTex; command_Action.action = delegate { SoundDef.Named("ShipTakeoff_SuborbitalLaunch").PlayOneShotOnCamera(); this.ships[0].StartChoosingDestination(false); }; yield return(command_Action); if (Find.WorldSelector.SingleSelectedObject == this) { yield return(TravelingShipsUtility.ShipTouchdownCommand(this, true)); yield return(TravelingShipsUtility.ShipTouchdownCommand(this, false)); } SettlementBase Settlement = CaravanVisitUtility.SettlementVisitedNow(this); if (Settlement != null && Settlement.CanTradeNow) { yield return(TravelingShipsUtility.TradeCommand(this)); } //if (CaravanJourneyDestinationUtility.AnyJurneyDestinationAt(base.Tile)) //{ // yield return CaravanJourneyDestinationUtility.TakeOffCommand(base.Tile); //} if (!this.ships.Any(x => x.ParkingMap == null)) { Command_Action command_Action4 = new Command_Action(); command_Action4.defaultLabel = "CommandTravelParkingPosition".Translate(); command_Action4.defaultDesc = "CommandTravelParkingPositionDesc".Translate(); command_Action4.icon = DropShipUtility.ReturnParkingFleet; command_Action4.action = delegate { foreach (ShipBase ship in this.ships) { ship.TryLaunch(new GlobalTargetInfo(ship.ParkingPosition, ship.ParkingMap), PawnsArrivalModeDefOf.CenterDrop, ShipArrivalAction.EnterMapFriendly, false); } }; yield return(command_Action4); } } }
protected override bool CanFireNowSub(IncidentParms parms) { if (!base.CanFireNowSub(parms)) { return(false); } if (!TryGetRandomAvailableTargetMap(out Map map)) { return(false); } SettlementBase settlementBase = RandomNearbyTradeableSettlement(map.Tile); if (settlementBase == null) { return(false); } return(true); }
private Color GetSettlementColor(SettlementBase set) { switch (set.SettlementType) { case SettlementType.CAPITAL: return(Color.red); case SettlementType.CITY: return(Color.yellow); case SettlementType.TOWN: return(Color.magenta); case SettlementType.VILLAGE: return(Color.white); } return(Color.black); }
public override string GetInspectString() { StringBuilder stringBuilder = new StringBuilder(); if (this.NightResting) { stringBuilder.Append("CaravanResting".Translate()); } else if (this.AllOwnersDowned) { stringBuilder.Append("AllCaravanMembersDowned".Translate()); } else if (this.pather.Moving) { if (this.pather.ArrivalAction != null) { stringBuilder.Append(this.pather.ArrivalAction.ReportString); } else { stringBuilder.Append("CaravanTraveling".Translate()); } } else { SettlementBase Settlement = CaravanVisitUtility.SettlementVisitedNow(this); if (Settlement != null) { stringBuilder.Append("CaravanVisiting".Translate(new object[] { Settlement.Label })); } else { stringBuilder.Append("CaravanWaiting".Translate()); } } return(stringBuilder.ToString()); }
// Token: 0x060000E6 RID: 230 RVA: 0x000072E0 File Offset: 0x000054E0 public void GenShockwave(int center, int radius) { Find.WorldFloodFiller.FloodFill(center, (int tile) => true, delegate(int tile, int dist) { if (dist > radius + 1) { return(true); } if (dist == radius + 1) { Find.WorldGrid.tiles[tile].biome = BiomeDefOf.Tundra; SettlementBase settlementBase = Find.WorldObjects.SettlementBases.FirstOrDefault((SettlementBase x) => x.Tile == tile); if (settlementBase != null) { Find.WorldObjects.Remove(settlementBase); } float value = Rand.Value; } return(false); }, int.MaxValue, null); }
private static string DestroyOldOutpostAndCreateNewAtSpot(SettlementBase someRandomPreferablyNearbySettlement) { if (Rand.ChanceSeeded(chance: 0.5f, specialSeed: someRandomPreferablyNearbySettlement.ID)) { Settlement factionBase = (Settlement)WorldObjectMaker.MakeWorldObject(def: WorldObjectDefOf.Settlement); factionBase.SetFaction(newFaction: someRandomPreferablyNearbySettlement.Faction.EnemyInFactionWar()); factionBase.Tile = someRandomPreferablyNearbySettlement.Tile; factionBase.Name = SettlementNameGenerator.GenerateSettlementName(factionBase: factionBase); Find.WorldObjects.Remove(o: someRandomPreferablyNearbySettlement); Find.WorldObjects.Add(o: factionBase); return("MFI_FactionWarBaseTakenOver".Translate(someRandomPreferablyNearbySettlement.Faction, someRandomPreferablyNearbySettlement.Faction.EnemyInFactionWar())); } DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(def: WorldObjectDefOf.DestroyedSettlement); destroyedSettlement.Tile = someRandomPreferablyNearbySettlement.Tile; Faction loserFaction = someRandomPreferablyNearbySettlement.Faction; Find.WorldObjects.Add(o: destroyedSettlement); Find.WorldObjects.Remove(o: someRandomPreferablyNearbySettlement); return("MFI_FactionWarBaseDestroyed".Translate(loserFaction, loserFaction.EnemyInFactionWar())); }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!TryGetRandomAvailableTargetMap(map: out Map map)) { return(false); } SettlementBase settlement = RandomNearbyTradeableSettlement(originTile: map.Tile); if (settlement != null) { //TODO: look into making the below dynamic based on requester's biome, faction, pirate outpost vicinity and other stuff. ThingCategoryDef thingCategoryDef = DetermineThingCategoryDef(); string letterToSend = DetermineLetterToSend(thingCategoryDef: thingCategoryDef); int feeRequest = Math.Max(val1: Rand.Range(min: 150, max: 300), val2: (int)parms.points); string categorylabel = (thingCategoryDef == ThingCategoryDefOf.PlantFoodRaw) ? thingCategoryDef.label + " items" : thingCategoryDef.label; ChoiceLetter_ReverseTradeRequest choiceLetterReverseTradeRequest = (ChoiceLetter_ReverseTradeRequest)LetterMaker.MakeLetter(label: this.def.letterLabel, text: letterToSend.Translate( settlement.Faction.leader.LabelShort, settlement.Faction.def.leaderTitle, settlement.Faction.Name, settlement.Label, categorylabel, feeRequest ).AdjustedFor(p: settlement.Faction.leader), def: this.def.letterDef); choiceLetterReverseTradeRequest.title = "MFI_ReverseTradeRequestTitle".Translate(map.info.parent.Label).CapitalizeFirst(); choiceLetterReverseTradeRequest.thingCategoryDef = thingCategoryDef; choiceLetterReverseTradeRequest.map = map; parms.target = map; choiceLetterReverseTradeRequest.incidentParms = parms; choiceLetterReverseTradeRequest.faction = settlement.Faction; choiceLetterReverseTradeRequest.fee = feeRequest; choiceLetterReverseTradeRequest.StartTimeout(duration: TimeoutTicks); choiceLetterReverseTradeRequest.tile = settlement.Tile; Find.LetterStack.ReceiveLetter(let: choiceLetterReverseTradeRequest); Find.World.GetComponent <WorldComponent_OutpostGrower>().Registerletter(choiceLetterReverseTradeRequest); return(true); } return(false); }
public static IEnumerable <FloatMenuOption> GetSettle(SettlementBase bs, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car) { foreach (FloatMenuOption o in GetMapParent(bs, pods, representative, car)) { yield return(o); } foreach (FloatMenuOption f in HelicoptersArrivalActionUtility.GetVisitFloatMenuOptions(representative, pods, bs, car)) { yield return(f); } foreach (FloatMenuOption f2 in HelicoptersArrivalActionUtility.GetGIFTFloatMenuOptions(representative, pods, bs, car)) { yield return(f2); } foreach (FloatMenuOption f3 in HelicoptersArrivalActionUtility.GetATKFloatMenuOptions(representative, pods, bs, car)) { yield return(f3); } yield break; }
public static IEnumerable <FloatMenuOption> GetSettle( SettlementBase bs, IEnumerable <IThingHolder> pods, CompLaunchableSRTS representative, Caravan car) { foreach (FloatMenuOption floatMenuOption in SRTSStatic.GetMapParent((MapParent)bs, pods, representative, car)) { FloatMenuOption o = floatMenuOption; yield return(o); o = (FloatMenuOption)null; } foreach (FloatMenuOption visitFloatMenuOption in SRTSArrivalActionUtility.GetVisitFloatMenuOptions(representative, pods, bs, car)) { FloatMenuOption f = visitFloatMenuOption; yield return(f); f = (FloatMenuOption)null; } /*Uncomment to allow gifting of Ship and contents to faction -SmashPhil*/ /*foreach (FloatMenuOption giftFloatMenuOption in SRTSArrivalActionUtility.GetGIFTFloatMenuOptions(representative, pods, bs, car)) * { * FloatMenuOption f2 = giftFloatMenuOption; * yield return f2; * f2 = (FloatMenuOption) null; * }*/ foreach (FloatMenuOption atkFloatMenuOption in SRTSArrivalActionUtility.GetATKFloatMenuOptions(representative, pods, bs, car)) { FloatMenuOption f3 = atkFloatMenuOption; yield return(f3); f3 = (FloatMenuOption)null; } }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!TryGetRandomAvailableTargetMap(out map)) { return(false); } SettlementBase settlementBase = RandomNearbyTradeableSettlement(map.Tile); if (settlementBase == null) { return(false); } int destination = Rand.Chance(directConnectionChance) ? map.Tile : AllyOfNearbySettlement(settlementBase)?.Tile ?? map.Tile; int maxPriority = settlementBase.Faction.def.techLevel >= TechLevel.Medieval ? 30 : 20; RoadDef roadToBuild = DefDatabase <RoadDef> .AllDefsListForReading.Where(x => x.priority <= maxPriority).RandomElement(); WorldPath path = WorldPath.NotFound; //StringBuilder stringBuilder = new StringBuilder(); int cost2 = 12000; int timeToBuild = 0; string letterTitle = "MFI_RoadWorks".Translate(); List <WorldObject_RoadConstruction> list = new List <WorldObject_RoadConstruction>(); using (path = Find.WorldPathFinder.FindPath(destination, settlementBase.Tile, null)) { if (path != null && path != WorldPath.NotFound) { float roadCount = path.NodesReversed.Count(x => !Find.WorldGrid[x].Roads.NullOrEmpty() && Find.WorldGrid[x].Roads.Any(roadLink => roadLink.road.priority >= roadToBuild.priority) || Find.WorldObjects.AnyWorldObjectOfDefAt(MFI_DefOf.MFI_RoadUnderConstruction, x)); if (roadCount / path.NodesReversed.Count >= maxRoadCoverage) { Log.Message($"MFI :: too many roads leading from {(Find.WorldObjects.AnyWorldObjectAt(destination) ? Find.WorldObjects.ObjectsAt(destination).FirstOrDefault()?.Label : destination.ToString())} to {settlementBase} for road project"); return(false); } //stringBuilder.Append($"Path found from {settlementBase.Label} to {map.info.parent.Label}. Length = {path.NodesReversed.Count} "); //not 0 and - 1 for (int i = 1; i < path.NodesReversed.Count - 1; i++) { cost2 += Caravan_PathFollower.CostToMove(CaravanTicksPerMoveUtility.DefaultTicksPerMove, path.NodesReversed[i], path.NodesReversed[i + 1]); timeToBuild += (int)(2 * GenDate.TicksPerHour * WorldPathGrid.CalculatedMovementDifficultyAt(path.NodesReversed[i], true) * Find.WorldGrid.GetRoadMovementDifficultyMultiplier(i, i + 1)); if (!Find.WorldGrid[path.NodesReversed[i]].Roads.NullOrEmpty() && Find.WorldGrid[path.NodesReversed[i]].Roads.Any(roadLink => roadLink.road.priority >= roadToBuild.priority)) { timeToBuild = timeToBuild / 2; } WorldObject_RoadConstruction roadConstruction = (WorldObject_RoadConstruction)WorldObjectMaker.MakeWorldObject(MFI_DefOf.MFI_RoadUnderConstruction); roadConstruction.Tile = path.NodesReversed[i]; roadConstruction.nextTile = path.NodesReversed[i + 1]; roadConstruction.road = roadToBuild; roadConstruction.SetFaction(settlementBase.Faction); roadConstruction.projectedTimeOfCompletion = Find.TickManager.TicksGame + timeToBuild; list.Add(roadConstruction); } cost2 = cost2 / 10; DiaNode node = new DiaNode("MFI_RoadWorksDialogue".Translate(settlementBase, path.NodesReversed.Count, cost2)); // {settlementBase} wants {cost2 / 10} to build a road of {path.NodesReversed.Count}"); DiaOption accept = new DiaOption("OK".Translate()) { resolveTree = true, action = () => { TradeUtility.LaunchSilver(TradeUtility.PlayerHomeMapWithMostLaunchableSilver(), cost2); foreach (WorldObject_RoadConstruction worldObjectRoadConstruction in list) { Find.WorldObjects.Add(worldObjectRoadConstruction); } list.Clear(); } }; if (!TradeUtility.ColonyHasEnoughSilver(TradeUtility.PlayerHomeMapWithMostLaunchableSilver(), cost2)) { accept.Disable("NeedSilverLaunchable".Translate(cost2)); } DiaOption reject = new DiaOption("RejectLetter".Translate()) { resolveTree = true, action = () => { for (int i = list.Count - 1; i >= 0; i--) { list[i] = null; } list.Clear(); } }; node.options.Add(accept); node.options.Add(reject); //Log.Message(stringBuilder.ToString()); Find.WindowStack.Add(new Dialog_NodeTreeWithFactionInfo(node, settlementBase.Faction)); Find.Archive.Add(new ArchivedDialog(node.text, letterTitle, settlementBase.Faction)); } } return(true); }
public void GivenAVillageOwnerByTheGivenPlayer() { _settlement = new Village(_player); }