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(new object[]
         {
             SettlementProximityGoodwillUtility.MaxDist - 1,
             15
         }) + "\n\n" + SettlementProximityGoodwillUtility.ProximityGoodwillOffsetsToString(SettlementProximityGoodwillUtility.tmpGoodwillOffsets), settleAction, false, null));
     }
     else
     {
         settleAction();
     }
 }
 public static void CheckSettlementProximityGoodwillChange()
 {
     if (Find.TickManager.TicksGame != 0 && Find.TickManager.TicksGame % 900000 == 0)
     {
         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> >())
         {
             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);
             }
         }
     }
 }