public void FixedUpdate() => beacons.ForEach(delegate(Building_BombardmentBeacon2 beacon)
 {
     if (beacon.Map == null && beacon.map != null)
     {
         if (beacon.check)
         {
             DestroyedSettlement destroyed = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
             destroyed.Tile = beacon.map.Tile;
             Find.WorldObjects.Add(destroyed);
             Settlement factionBase = (Settlement)beacon.map.info.parent;
             beacon.map.info.parent = destroyed;
             Find.WorldObjects.Remove(factionBase);
             beacon.map = null;
         }
     }
 });
示例#2
0
        private bool FriendliesDead()
        {
            MapParent map = (MapParent)parent;

            if (map.Map.mapPawns.FreeHumanlikesSpawnedOfFaction(map.Map.ParentFaction).Count(p => !p.Downed && !p.Dead && p.RaceProps.Humanlike) == 0)
            {
                DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
                destroyedSettlement.Tile = parent.Tile;
                Find.WorldObjects.Add(destroyedSettlement);
                map.Map.info.parent = destroyedSettlement;
                Find.WorldObjects.Remove(parent);
                destroyedSettlement.GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown();
                survivors = false;
                parent.GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown(Global.DayInTicks);
                Find.LetterStack.ReceiveLetter("LetterLabelSettlementDefenderLost".Translate(), TranslatorFormattedStringExtensions.Translate("SettlementDefenderLost", parent, TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(Global.DayInTicks), parent.Faction.leader)
                                               , LetterDefOf.NegativeEvent, new LookTargets(parent.Tile), null, null);
                return(true);
            }
            return(false);
        }
        private static string DestroyOldOutpostAndCreateNewAtSpot(Settlement someRandomPreferablyNearbySettlement)
        {
            if (Rand.ChanceSeeded(chance: 0.5f, specialSeed: someRandomPreferablyNearbySettlement.ID))
            {
                Settlement factionBase = (Settlement)WorldObjectMaker.MakeWorldObject(def: WorldObjectDefOf.Settlement);
                factionBase.SetFaction(newFaction: someRandomPreferablyNearbySettlement.Faction.EnemyInFactionWar());
                factionBase.Tile = someRandomPreferablyNearbySettlement.Tile;
                factionBase.Name = SettlementNameGenerator.GenerateSettlementName(factionBase: factionBase);
                Find.WorldObjects.Remove(o: someRandomPreferablyNearbySettlement);
                Find.WorldObjects.Add(o: factionBase);
                return("MFI_FactionWarBaseTakenOver".Translate(someRandomPreferablyNearbySettlement.Faction, someRandomPreferablyNearbySettlement.Faction.EnemyInFactionWar()));
            }
            DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(def: WorldObjectDefOf.DestroyedSettlement);

            destroyedSettlement.Tile = someRandomPreferablyNearbySettlement.Tile;
            Faction loserFaction = someRandomPreferablyNearbySettlement.Faction;

            Find.WorldObjects.Add(o: destroyedSettlement);
            Find.WorldObjects.Remove(o: someRandomPreferablyNearbySettlement);
            return("MFI_FactionWarBaseDestroyed".Translate(loserFaction, loserFaction.EnemyInFactionWar()));
        }
示例#4
0
        public static void AlliedBooom(int destinationTile, IntVec3 targetCell)
        {
            if (!Find.WorldObjects.AnyMapParentAt(destinationTile))
            {
                Messages.Message("SWeaponDestoryBase".Translate(), MessageTypeDefOf.NeutralEvent, true);

                SoundDef.Named("ra2_StormAppear").PlayOneShotOnCamera(null);


                WorldObject worldObject = Find.WorldObjects.WorldObjectAt <WorldObject>(destinationTile);
                if (worldObject != null && worldObject.Faction != null && !worldObject.Faction.IsPlayer)
                {
                    worldObject.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -999, true, true, null, null);
                }
                PeaceTalks peaceTalks = Find.WorldObjects.WorldObjectAt <PeaceTalks>(destinationTile);
                if (peaceTalks != null)
                {
                    try
                    {
                        peaceTalks.GetType().GetMethod("Outcome_Disaster", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(peaceTalks, null);
                    }
                    catch (Exception)
                    {
                    }
                    Find.WorldObjects.Remove(peaceTalks);
                }
                return;
            }



            MapParent mapParent = Find.WorldObjects.MapParentAt(destinationTile);

            if (mapParent.Faction != null && !mapParent.Faction.IsPlayer)
            {
                mapParent.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -999, true, true, null, null);
            }

            if (mapParent.HasMap)
            {
                AlliedStormCondition asc = (AlliedStormCondition)ThingMaker.MakeThing(ThingDef.Named("AlliedStorm"), null);
                asc.centerLocation = targetCell.ToIntVec2;

                asc.SingleMap = mapParent.Map;
                SoundInfo info = SoundInfo.InMap(new TargetInfo(asc.centerLocation.ToIntVec3, asc.SingleMap, false), MaintenanceType.None);
                SoundDef.Named("ra2_StormAppear").PlayOneShotOnCamera(mapParent.Map);//.PlayOneShot(info);


                // SovietNuclearFallen bomb = (SovietNuclearFallen)ThingMaker.MakeThing(ThingDef.Named("SovietNuclearFallen"));
                // bomb.targetCell = targetCell;
                // bomb.ExactPosition = new Vector3(targetCell.x, 10, mapParent.Map.Size.z - 10);
                GenSpawn.Spawn(asc, asc.centerLocation.ToIntVec3, mapParent.Map);
                return;
            }

            Messages.Message("SWeaponDestoryBase".Translate(), mapParent, MessageTypeDefOf.NegativeEvent, true);
            SoundDef.Named("ra2_StormAppear").PlayOneShotOnCamera(null);
            SettlementBase settlementBase;

            if ((settlementBase = (mapParent as SettlementBase)) != null)
            {
                if (settlementBase.Faction == Faction.OfPlayer)
                {
                    return;
                }
                foreach (Faction faction in Find.FactionManager.AllFactionsListForReading)
                {
                    if (faction != Faction.OfPlayer)
                    {
                        faction.TryAffectGoodwillWith(Faction.OfPlayer, -10, true, true, null, null);
                    }
                }
                try
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append("LetterFactionBaseDefeated".Translate(new object[]
                    {
                        settlementBase.Label,
                        TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000)
                    }));

                    Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), stringBuilder.ToString(), LetterDefOf.PositiveEvent, new GlobalTargetInfo(settlementBase.Tile), null, null);
                    DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
                    destroyedSettlement.Tile = settlementBase.Tile;
                    Find.WorldObjects.Add(destroyedSettlement);
                }
                catch (Exception)
                {
                    Log.Warning("Failed to end settlement", false);
                }
            }
            Find.WorldObjects.Remove(mapParent);
        }
示例#5
0
        private bool doConquest()
        {
            Settlement AttackerBase = RandomSettlement();

            if (AttackerBase == null)
            {
                return(false);
            }
            Faction AttackerFaction = AttackerBase.Faction;

            if (AttackerFaction == null)
            {
                return(false);
            }

            List <Settlement> settlements       = Find.WorldObjects.Settlements.ToList <Settlement>();
            List <Settlement> prox1             = new List <Settlement>();
            List <Settlement> prox2             = new List <Settlement>();
            List <Settlement> prox3             = new List <Settlement>();
            List <Settlement> prox4             = new List <Settlement>();
            List <Settlement> prox5             = new List <Settlement>();
            List <Settlement> prox6             = new List <Settlement>();
            List <Settlement> prox7             = new List <Settlement>();
            double            attackerBaseCount = 0;
            double            totalBaseCount    = 0;

            List <Settlement> attackerSettlementList = new List <Settlement>();

            for (int i = 0; i < settlements.Count; i++)
            {
                Settlement DefenderBase = settlements[i];

                if (DefenderBase.Faction == AttackerBase.Faction)
                {
                    attackerBaseCount++;
                    attackerSettlementList.Add(DefenderBase);
                }

                if (DefenderBase.Faction != null && !DefenderBase.Faction.IsPlayer && DefenderBase.Faction.def.settlementGenerationWeight > 0f && !DefenderBase.def.defName.Equals("City_Faction") && !DefenderBase.def.defName.Equals("City_Abandoned") && !DefenderBase.def.defName.Equals("City_Ghost") && !DefenderBase.def.defName.Equals("City_Citadel"))
                {
                    totalBaseCount++;
                    if (AttackerBase.Faction.HostileTo(DefenderBase.Faction))
                    {
                        int attackDistance = Find.WorldGrid.TraversalDistanceBetween(AttackerBase.Tile, DefenderBase.Tile, true);
                        if (attackDistance < 30)
                        {
                            prox1.Add(DefenderBase);
                        }
                        else if (attackDistance < 60)
                        {
                            prox2.Add(DefenderBase);
                        }
                        else if (attackDistance < 90)
                        {
                            prox3.Add(DefenderBase);
                        }
                        else if (attackDistance < 120)
                        {
                            prox4.Add(DefenderBase);
                        }
                        else if (attackDistance < 150)
                        {
                            prox5.Add(DefenderBase);
                        }
                        else if (attackDistance < 180)
                        {
                            prox6.Add(DefenderBase);
                        }
                        else if (attackDistance < 210)
                        {
                            prox7.Add(DefenderBase);
                        }
                    }
                }
            }

            // Rebellion code
            if (attackerBaseCount >= 10 && attackerBaseCount >= (totalBaseCount * 0.1))
            {
                int num = Rand.Range(1, 100);
                if (num <= (int)(attackerBaseCount / totalBaseCount * 20) || attackerBaseCount >= (totalBaseCount * 0.8))
                {
                    List <Faction> allFactionList = (from x in Find.FactionManager.AllFactionsVisible
                                                     where x.def.settlementGenerationWeight > 0f && !x.def.hidden && !x.IsPlayer && !x.defeated && x != AttackerFaction && x.leader != null && !x.leader.IsPrisoner && !x.leader.Spawned
                                                     select x).ToList <Faction>();
                    for (int i = 0; i < allFactionList.Count; i++)
                    {
                        if (!IncidentWorker_NPCConquest.HasAnyOtherBase(allFactionList[i]))
                        {
                            for (int j = 0; j < attackerSettlementList.Count; j++)
                            {
                                int  num2             = Rand.Range(1, 100);
                                bool resistancechance = num2 < 41;
                                if (resistancechance)
                                {
                                    Settlement rebelSettlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                                    rebelSettlement.SetFaction(allFactionList[i]);
                                    rebelSettlement.Tile = attackerSettlementList[j].Tile;
                                    rebelSettlement.Name = SettlementNameGenerator.GenerateSettlementName(rebelSettlement, null);
                                    Find.WorldObjects.Remove(attackerSettlementList[j]);
                                    Find.WorldObjects.Add(rebelSettlement);
                                }
                            }

                            FactionRelation factionRelation = allFactionList[i].RelationWith(AttackerBase.Faction, false);
                            factionRelation.kind = FactionRelationKind.Hostile;
                            FactionRelation factionRelation2 = AttackerBase.Faction.RelationWith(allFactionList[i], false);
                            factionRelation2.kind = FactionRelationKind.Hostile;
                            Find.LetterStack.ReceiveLetter("LabelRebellion".Translate(), "DescRebellion".Translate(allFactionList[i], AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                            return(true);
                        }
                    }

                    if (IncidentWorker_NPCConquest.allowCloneFaction && AttackerFaction != Faction.OfEmpire)
                    {
                        Faction clonefaction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(AttackerFaction.def, default(IdeoGenerationParms), null));
                        clonefaction.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f);
                        Find.FactionManager.Add(clonefaction);

                        for (int i = 0; i < attackerSettlementList.Count; i++)
                        {
                            int  num3             = Rand.Range(1, 100);
                            bool resistancechance = num3 < 41;
                            if (resistancechance)
                            {
                                Settlement rebelSettlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                                rebelSettlement.SetFaction(clonefaction);
                                rebelSettlement.Tile = attackerSettlementList[i].Tile;
                                rebelSettlement.Name = SettlementNameGenerator.GenerateSettlementName(rebelSettlement, null);
                                Find.WorldObjects.Remove(attackerSettlementList[i]);
                                Find.WorldObjects.Add(rebelSettlement);
                            }
                        }

                        FactionRelation factionRelation = clonefaction.RelationWith(AttackerBase.Faction, false);
                        factionRelation.kind = FactionRelationKind.Hostile;
                        FactionRelation factionRelation2 = AttackerBase.Faction.RelationWith(clonefaction, false);
                        factionRelation2.kind = FactionRelationKind.Hostile;

                        Ideo newIdeo = IdeoGenerator.GenerateIdeo(FactionIdeosTracker.IdeoGenerationParmsForFaction_BackCompatibility(clonefaction.def));
                        clonefaction.ideos.SetPrimary(newIdeo);
                        Find.IdeoManager.Add(newIdeo);
                        clonefaction.leader.ideo.SetIdeo(newIdeo);

                        Find.LetterStack.ReceiveLetter("LabelRebellion".Translate(), "DescRebellion".Translate(clonefaction, AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                        return(true);
                    }
                }
            }

            // Conquest code
            Settlement FinalDefenderBase;

            if (prox1.Count != 0)
            {
                FinalDefenderBase = prox1.RandomElement <Settlement>();
            }
            else if (prox2.Count != 0)
            {
                FinalDefenderBase = prox2.RandomElement <Settlement>();
            }
            else if (prox3.Count != 0)
            {
                FinalDefenderBase = prox3.RandomElement <Settlement>();
            }
            else if (prox4.Count != 0)
            {
                FinalDefenderBase = prox4.RandomElement <Settlement>();
            }
            else if (prox5.Count != 0)
            {
                FinalDefenderBase = prox5.RandomElement <Settlement>();
            }
            else if (prox6.Count != 0)
            {
                FinalDefenderBase = prox6.RandomElement <Settlement>();
            }
            else if (prox7.Count != 0)
            {
                FinalDefenderBase = prox7.RandomElement <Settlement>();
            }
            else
            {
                return(false);
            }

            if (FinalDefenderBase.HasMap)
            {
                Log.Message("attack target has generated map. Event dropped.");
                return(false);
            }

            // Determine whether to raze or take control, distance-based
            int razeroll = Rand.Range(1, 100);

            if (razeroll <= IncidentWorker_NPCConquest.razeChance)
            {
                if (IncidentWorker_NPCConquest.allowRazeClear)
                {
                    List <DestroyedSettlement> clearRuinTarget = Find.WorldObjects.DestroyedSettlements;
                    for (int i = 0; i < clearRuinTarget.Count; i++)
                    {
                        Find.WorldObjects.Remove(clearRuinTarget[i]);
                    }
                }

                DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
                destroyedSettlement.Tile = FinalDefenderBase.Tile;
                Find.WorldObjects.Remove(FinalDefenderBase);
                Find.WorldObjects.Add(destroyedSettlement);
            }
            else
            {
                Settlement settlementConquest = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlementConquest.SetFaction(AttackerBase.Faction);
                settlementConquest.Tile = FinalDefenderBase.Tile;
                settlementConquest.Name = SettlementNameGenerator.GenerateSettlementName(settlementConquest, null);
                Find.WorldObjects.Remove(FinalDefenderBase);
                Find.WorldObjects.Add(settlementConquest);
            }

            // Defeat check for distance conquest
            if (IncidentWorker_NPCConquest.allowCloneFaction && !HasAnyOtherBase(FinalDefenderBase))
            {
                List <Faction> clonefactioncheck = (from x in Find.FactionManager.AllFactionsVisible
                                                    where !x.def.hidden && !x.IsPlayer && !x.defeated && x != FinalDefenderBase.Faction && x.def == FinalDefenderBase.Faction.def
                                                    select x).ToList <Faction>();
                if (clonefactioncheck.Count > 0)
                {
                    FinalDefenderBase.Faction.defeated = true;
                    Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), "LetterFactionBaseDefeated_FactionDestroyed".Translate(FinalDefenderBase.Faction.Name), LetterDefOf.NeutralEvent, null);
                }
            }

            int defeatroll = Rand.Range(1, 100);

            if (defeatroll <= IncidentWorker_NPCConquest.defeatChance && !HasAnyOtherBase(FinalDefenderBase))
            {
                FinalDefenderBase.Faction.defeated = true;
                Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), "LetterFactionBaseDefeated_FactionDestroyed".Translate(FinalDefenderBase.Faction.Name), LetterDefOf.NeutralEvent, null);
            }

            // Alliance code
            if (IncidentWorker_NPCConquest.allowAlliance && Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown <= 0)
            {
                List <Faction> alliance = (from x in Find.FactionManager.AllFactionsVisible
                                           where x.def.settlementGenerationWeight > 0f && !x.def.hidden && !x.IsPlayer && !x.defeated && x != AttackerFaction && x.leader != null && !x.leader.IsPrisoner && !x.leader.Spawned
                                           select x).ToList <Faction>();
                List <Faction> finalAlliance = new List <Faction>();

                if (alliance.Count >= 2 && attackerBaseCount >= (totalBaseCount * 0.4) && attackerBaseCount <= (totalBaseCount * 0.6) && attackerBaseCount > 9)
                {
                    for (int i = 0; i < alliance.Count; i++)
                    {
                        int  num         = Rand.Range(1, 100);
                        bool havemysword = num < 81;
                        if (havemysword)
                        {
                            FactionRelation factionRelation = AttackerFaction.RelationWith(alliance[i], false);
                            factionRelation.kind = FactionRelationKind.Hostile;
                            FactionRelation factionRelation2 = alliance[i].RelationWith(AttackerFaction, false);
                            factionRelation2.kind = FactionRelationKind.Hostile;
                            finalAlliance.Add(alliance[i]);
                        }
                    }

                    StringBuilder allianceList = new StringBuilder();
                    for (int x = 0; x < finalAlliance.Count; x++)
                    {
                        for (int y = 0; y < finalAlliance.Count; y++)
                        {
                            if (finalAlliance[y] != finalAlliance[x])
                            {
                                FactionRelation factionRelation3 = finalAlliance[y].RelationWith(finalAlliance[x], false);
                                factionRelation3.kind = FactionRelationKind.Neutral;
                                FactionRelation factionRelation4 = finalAlliance[x].RelationWith(finalAlliance[y], false);
                                factionRelation4.kind = FactionRelationKind.Neutral;
                            }
                        }
                        allianceList.Append(finalAlliance[x].ToString()).Append(", ");
                    }
                    string allianceListString = allianceList.ToString();
                    allianceListString = allianceListString.Trim().TrimEnd(',');

                    Find.LetterStack.ReceiveLetter("LabelAlliance".Translate(), "DescAlliance".Translate(allianceListString, AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                    Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown = 11;
                }
            }

            if (Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown > 0)
            {
                Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown--;
            }

            return(true);
        }
示例#6
0
        // Token: 0x04001627 RID: 5671

        public void Booom()
        {
            if (!Find.WorldObjects.AnyMapParentAt(this.destinationTile))
            {
                Messages.Message("SWeaponDestoryBase".Translate(), MessageTypeDefOf.NeutralEvent, true);
                // DubDef.hugeExplosionDistantDef.PlayOneShotOnCamera(null);
                WorldObject worldObject = Find.WorldObjects.WorldObjectAt <WorldObject>(this.destinationTile);
                if (worldObject != null && worldObject.Faction != null && !worldObject.Faction.IsPlayer)
                {
                    worldObject.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -999, true, true, null, null);
                }
                PeaceTalks peaceTalks = Find.WorldObjects.WorldObjectAt <PeaceTalks>(this.destinationTile);
                if (peaceTalks != null)
                {
                    try
                    {
                        peaceTalks.GetType().GetMethod("Outcome_Disaster", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(peaceTalks, null);
                    }
                    catch (Exception)
                    {
                    }
                    Find.WorldObjects.Remove(peaceTalks);
                }
                return;
            }



            this.mapParent = Find.WorldObjects.MapParentAt(this.destinationTile);
            if (this.mapParent.Faction != null && !this.mapParent.Faction.IsPlayer)
            {
                this.mapParent.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -999, true, true, null, null);
            }

            /*
             * if (this.mapParent is DestroyedSettlement)
             * {
             *  Messages.Message("critBombDet".Translate(), MessageTypeDefOf.NeutralEvent, true);
             *  // DubDef.hugeExplosionDistantDef.PlayOneShotOnCamera(null);
             *  return;
             * }
             */
            if (this.mapParent.HasMap)
            {
                //IntVec3 destinationCell = CellFinderLoose.TryFindCentralCell(this.mapParent.Map, 25, 1000, null);

                // SkyfallerMaker.SpawnSkyfaller(ThingDef.Named("NuclearIncoming"), ThingDef.Named("SovietNuclearStrike"), destinationCell, this.mapParent.Map);
                SovietNuclearFallen bomb = (SovietNuclearFallen)ThingMaker.MakeThing(ThingDef.Named("SovietNuclearFallen"));
                bomb.targetCell    = this.targetCell;
                bomb.ExactPosition = new Vector3(this.targetCell.x, 10, this.mapParent.Map.Size.z - 10);
                GenSpawn.Spawn(bomb, bomb.ExactPosition.ToIntVec3(), this.mapParent.Map);
                return;
            }

            Messages.Message("SWeaponDestoryBase".Translate(), this.mapParent, MessageTypeDefOf.NegativeEvent, true);
            SoundDef.Named("ra2_NuclearExplode").PlayOneShotOnCamera(null);
            SettlementBase settlementBase;

            if ((settlementBase = (this.mapParent as SettlementBase)) != null)
            {
                if (settlementBase.Faction == Faction.OfPlayer)
                {
                    return;
                }
                foreach (Faction faction in Find.FactionManager.AllFactionsListForReading)
                {
                    if (faction != Faction.OfPlayer)
                    {
                        faction.TryAffectGoodwillWith(Faction.OfPlayer, -10, true, true, null, null);
                    }
                }
                try
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append("LetterFactionBaseDefeated".Translate(new object[]
                    {
                        settlementBase.Label,
                        TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000)
                    }));

                    Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), stringBuilder.ToString(), LetterDefOf.PositiveEvent, new GlobalTargetInfo(settlementBase.Tile), null, null);
                    DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
                    destroyedSettlement.Tile = settlementBase.Tile;
                    Find.WorldObjects.Add(destroyedSettlement);
                }
                catch (Exception)
                {
                    Log.Warning("Failed to end settlement", false);
                }
            }
            Find.WorldObjects.Remove(this.mapParent);
        }