public static void CheckDefeated(Settlement factionBase) { if (factionBase.Faction == Faction.OfPlayer) { return; } Map map = factionBase.Map; if (map == null || !SettlementDefeatUtility.IsDefeated(map, factionBase.Faction)) { return; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterFactionBaseDefeated".Translate(new object[] { factionBase.Label, TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000) })); if (!SettlementDefeatUtility.HasAnyOtherBase(factionBase)) { factionBase.Faction.defeated = true; stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.Append("LetterFactionBaseDefeated_FactionDestroyed".Translate(new object[] { factionBase.Faction.Name })); } foreach (Faction current in Find.FactionManager.AllFactions) { if (!current.def.hidden && !current.IsPlayer && current != factionBase.Faction && current.HostileTo(factionBase.Faction)) { FactionRelationKind playerRelationKind = current.PlayerRelationKind; if (current.TryAffectGoodwillWith(Faction.OfPlayer, 20, false, false, null, null)) { stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.Append("RelationsWith".Translate(new object[] { current.Name }) + ": " + 20.ToStringWithSign()); current.TryAppendRelationKindChangedInfo(stringBuilder, playerRelationKind, current.PlayerRelationKind, null); } } } Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), stringBuilder.ToString(), LetterDefOf.PositiveEvent, new GlobalTargetInfo(factionBase.Tile), factionBase.Faction, null); DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement); destroyedSettlement.Tile = factionBase.Tile; Find.WorldObjects.Add(destroyedSettlement); map.info.parent = destroyedSettlement; Find.WorldObjects.Remove(factionBase); destroyedSettlement.GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown(); TaleRecorder.RecordTale(TaleDefOf.CaravanAssaultSuccessful, new object[] { map.mapPawns.FreeColonists.RandomElement <Pawn>() }); }
public override void Tick() { base.Tick(); if (trader != null) { trader.TraderTrackerTick(); } SettlementDefeatUtility.CheckDefeated(this); }
public override void Tick() { base.Tick(); SettlementDefeatUtility.CheckDefeated(this); }