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);
            }
        }
示例#2
0
 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();
     }
 }