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