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(); } }