public static Command SettleCommand(Caravan caravan) { Command_Settle command_Settle = new Command_Settle(); command_Settle.defaultLabel = "CommandSettle".Translate(); command_Settle.defaultDesc = "CommandSettleDesc".Translate(); command_Settle.icon = SettleUtility.SettleCommandTex; command_Settle.action = delegate { SoundDefOf.Tick_High.PlayOneShotOnCamera(null); SettlementProximityGoodwillUtility.CheckConfirmSettle(caravan.Tile, delegate { SettleInEmptyTileUtility.Settle(caravan); }); }; SettleInEmptyTileUtility.tmpSettleFailReason.Length = 0; if (!TileFinder.IsValidTileForNewSettlement(caravan.Tile, SettleInEmptyTileUtility.tmpSettleFailReason)) { command_Settle.Disable(SettleInEmptyTileUtility.tmpSettleFailReason.ToString()); } else if (SettleUtility.PlayerSettlementsCountLimitReached) { if (Prefs.MaxNumberOfPlayerSettlements > 1) { command_Settle.Disable("CommandSettleFailReachedMaximumNumberOfBases".Translate()); } else { command_Settle.Disable("CommandSettleFailAlreadyHaveBase".Translate()); } } return(command_Settle); }
internal void <> m__0() { SoundDefOf.Tick_High.PlayOneShotOnCamera(null); SettlementProximityGoodwillUtility.CheckConfirmSettle(this.map.Tile, delegate { SettleInExistingMapUtility.Settle(this.map); }); }
public static void CheckSettlementProximityGoodwillChange() { if (Find.TickManager.TicksGame == 0 || Find.TickManager.TicksGame % 900000 != 0) { return; } List <Settlement> settlements = Find.WorldObjects.Settlements; SettlementProximityGoodwillUtility.tmpGoodwillOffsets.Clear(); for (int i = 0; i < settlements.Count; i++) { Settlement settlement = settlements[i]; if (settlement.Faction == Faction.OfPlayer) { SettlementProximityGoodwillUtility.AppendProximityGoodwillOffsets(settlement.Tile, SettlementProximityGoodwillUtility.tmpGoodwillOffsets, true, false); } } if (!SettlementProximityGoodwillUtility.tmpGoodwillOffsets.Any <Pair <Settlement, int> >()) { return; } SettlementProximityGoodwillUtility.SortProximityGoodwillOffsets(SettlementProximityGoodwillUtility.tmpGoodwillOffsets); List <Faction> allFactionsListForReading = Find.FactionManager.AllFactionsListForReading; bool flag = false; string text = "LetterFactionBaseProximity".Translate() + "\n\n" + SettlementProximityGoodwillUtility.ProximityGoodwillOffsetsToString(SettlementProximityGoodwillUtility.tmpGoodwillOffsets); for (int j = 0; j < allFactionsListForReading.Count; j++) { Faction faction = allFactionsListForReading[j]; if (faction != Faction.OfPlayer) { int num = 0; for (int k = 0; k < SettlementProximityGoodwillUtility.tmpGoodwillOffsets.Count; k++) { if (SettlementProximityGoodwillUtility.tmpGoodwillOffsets[k].First.Faction == faction) { num += SettlementProximityGoodwillUtility.tmpGoodwillOffsets[k].Second; } } FactionRelationKind playerRelationKind = faction.PlayerRelationKind; if (faction.TryAffectGoodwillWith(Faction.OfPlayer, num, false, false, null, null)) { flag = true; faction.TryAppendRelationKindChangedInfo(ref text, playerRelationKind, faction.PlayerRelationKind, null); } } } if (flag) { Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseProximity".Translate(), text, LetterDefOf.NegativeEvent, null); } }
public static void CheckConfirmSettle(int tile, Action settleAction) { SettlementProximityGoodwillUtility.tmpGoodwillOffsets.Clear(); SettlementProximityGoodwillUtility.AppendProximityGoodwillOffsets(tile, SettlementProximityGoodwillUtility.tmpGoodwillOffsets, false, true); if (SettlementProximityGoodwillUtility.tmpGoodwillOffsets.Any <Pair <Settlement, int> >()) { SettlementProximityGoodwillUtility.SortProximityGoodwillOffsets(SettlementProximityGoodwillUtility.tmpGoodwillOffsets); Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmSettleNearFactionBase".Translate(SettlementProximityGoodwillUtility.MaxDist - 1, 15) + "\n\n" + SettlementProximityGoodwillUtility.ProximityGoodwillOffsetsToString(SettlementProximityGoodwillUtility.tmpGoodwillOffsets), settleAction, false, null)); } else { settleAction(); } }
public static Command SettleCommand(Map map, bool requiresNoEnemies) { Command_Settle command_Settle = new Command_Settle(); command_Settle.defaultLabel = "CommandSettle".Translate(); command_Settle.defaultDesc = "CommandSettleDesc".Translate(); command_Settle.icon = SettleUtility.SettleCommandTex; command_Settle.action = delegate { SoundDefOf.Tick_High.PlayOneShotOnCamera(); SettlementProximityGoodwillUtility.CheckConfirmSettle(map.Tile, delegate { Settle(map); }); }; if (SettleUtility.PlayerSettlementsCountLimitReached) { if (Prefs.MaxNumberOfPlayerSettlements > 1) { command_Settle.Disable("CommandSettleFailReachedMaximumNumberOfBases".Translate()); } else { command_Settle.Disable("CommandSettleFailAlreadyHaveBase".Translate()); } } if (!command_Settle.disabled) { if (map.mapPawns.FreeColonistsCount == 0) { command_Settle.Disable("CommandSettleFailNoColonists".Translate()); } else if (requiresNoEnemies) { foreach (IAttackTarget item in map.attackTargetsCache.TargetsHostileToColony) { if (GenHostility.IsActiveThreatToPlayer(item)) { command_Settle.Disable("CommandSettleFailEnemies".Translate()); return(command_Settle); } } return(command_Settle); } } return(command_Settle); }