public static bool CallForAid_Replacement_Patch(Map map, Faction faction) { Faction ofPlayer = Faction.OfPlayer; int goodwillChange = -25; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, goodwillChange, canSendMessage, true, reason); IncidentParms incidentParms = new IncidentParms(); incidentParms.target = map; incidentParms.faction = faction; incidentParms.raidArrivalModeForQuickMilitaryAid = true; incidentParms.points = DiplomacyTuning.RequestedMilitaryAidPointsRange.RandomInRange; faction.lastMilitaryAidRequestTick = Find.TickManager.TicksGame; RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); RimWarSettlementComp rwdTown = rwd.WorldSettlements.RandomElement().GetComponent <RimWarSettlementComp>(); if (rwdTown != null) { int pts = Mathf.RoundToInt(rwdTown.RimWarPoints / 2); if (rwd.CanLaunch) { WorldUtility.CreateLaunchedWarband(pts, rwd, rwdTown.parent as RimWorld.Planet.Settlement, rwdTown.parent.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); } else { WorldUtility.CreateWarband(pts, rwd, rwdTown.parent as RimWorld.Planet.Settlement, rwdTown.parent.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); } rwdTown.RimWarPoints = pts; return(false); } return(true); }
private static void DebugResetAllMobileUnits() { int resetCount = 0; List <WorldObject> woList = Find.WorldObjects.AllWorldObjects; if (woList != null && woList.Count > 0) { for (int i = 0; i < woList.Count; i++) { WarObject rwo = woList[i] as WarObject; if (rwo != null) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(rwo.Faction); if (rwd != null && rwd.WorldSettlements != null && rwd.WorldSettlements.Count > 0) { resetCount++; RimWorld.Planet.Settlement settlement = rwd.WorldSettlements.RandomElement(); if (settlement != null) { if (settlement.Destroyed) { Log.Warning("Detected destroyed settlement in Rim War data for " + rwd.RimWarFaction.Name); } else { RimWarSettlementComp rwsc = settlement.GetComponent <RimWarSettlementComp>(); if (rwsc != null) { rwsc.RimWarPoints += rwo.RimWarPoints; } else { Log.Warning("Found no Rim War component for settlement " + settlement.Label); Log.Warning("Settlement in faction " + settlement.Faction); Log.Warning("Settlement defname " + settlement.def.defName); } } } else { Log.Warning("Detected null settlement in Rim War data for " + rwd.RimWarFaction.Name); } if (!rwo.Destroyed) { rwo.Destroy(); } } else { Log.Warning("Tried to reset unit but no Faction data exists - cleaning up object."); if (!rwo.Destroyed) { rwo.Destroy(); } } } } Log.Message("Reset " + resetCount + " Rim War units."); } }
private static void Postfix(FactionManager __instance, Faction faction) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); if (rwd != null) { WorldUtility.RemoveRWDFaction(rwd); } }
private static void Postfix(WorldObject __instance) { if (__instance is RimWorld.Planet.Settlement) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(__instance.Faction); for (int i = 0; i < rwd.FactionSettlements.Count; i++) { if (rwd.FactionSettlements[i].Tile == __instance.Tile) { rwd.FactionSettlements.Remove(rwd.FactionSettlements[i]); break; } } if (rwd.FactionSettlements.Count <= 0) { WorldUtility.RemoveRWDFaction(rwd); } } }
//private static void DrawFactionRow_WithFactionPoints_Postfix(Faction faction, float rowY, Rect fillRect, ref float __result) //{ // if (!Prefs.DevMode) // { // Rect rect = new Rect(35f, rowY + __result, 250f, 80f); // StringBuilder stringBuilder = new StringBuilder(); // string text = stringBuilder.ToString(); // float width = fillRect.width - rect.xMax; // float num = Text.CalcHeight(text, width); // float num2 = Mathf.Max(80f, num); // Rect position = new Rect(10f, rowY + 10f, 15f, 15f); // Rect rect2 = new Rect(0f, rowY + __result, fillRect.width, num2); // if (Mouse.IsOver(rect2)) // { // GUI.DrawTexture(rect2, TexUI.HighlightTex); // } // Text.Font = GameFont.Small; // Text.Anchor = TextAnchor.UpperLeft; // Widgets.DrawRectFast(position, faction.Color); // string label = "RW_FactionPower".Translate(WorldUtility.GetRimWarDataForFaction(faction) == null ? 0 : WorldUtility.GetRimWarDataForFaction(faction).TotalFactionPoints); // label += "\n" + "RW_FactionBehavior".Translate(WorldUtility.GetRimWarDataForFaction(faction).behavior.ToString()); // Widgets.Label(rect, label); // if (!faction.IsPlayer) // { // } // __result += num2; // } //} private static void Settlement_InspectString_WithPoints_Postfix(RimWorld.Planet.Settlement __instance, ref string __result) { if (!__instance.Faction.def.hidden) { RimWarSettlementComp rwsc = __instance.GetComponent <RimWarSettlementComp>(); RimWarData rwd = WorldUtility.GetRimWarDataForFaction(__instance.Faction); if (rwsc != null && rwd != null) { string text = ""; if (!__result.NullOrEmpty()) { text += "\n"; } text += "RW_SettlementPoints".Translate(rwsc.RimWarPoints + "\n" + "RW_FactionBehavior".Translate(rwd.behavior.ToString())); __result += text; } } }
//private static void DrawFactionRow_WithFactionPoints_Postfix(Faction faction, float rowY, Rect fillRect, ref float __result) //{ // if (!Prefs.DevMode) // { // Rect rect = new Rect(35f, rowY + __result, 250f, 80f); // StringBuilder stringBuilder = new StringBuilder(); // string text = stringBuilder.ToString(); // float width = fillRect.width - rect.xMax; // float num = Text.CalcHeight(text, width); // float num2 = Mathf.Max(80f, num); // Rect position = new Rect(10f, rowY + 10f, 15f, 15f); // Rect rect2 = new Rect(0f, rowY + __result, fillRect.width, num2); // if (Mouse.IsOver(rect2)) // { // GUI.DrawTexture(rect2, TexUI.HighlightTex); // } // Text.Font = GameFont.Small; // Text.Anchor = TextAnchor.UpperLeft; // Widgets.DrawRectFast(position, faction.Color); // string label = "RW_FactionPower".Translate(WorldUtility.GetRimWarDataForFaction(faction) == null ? 0 : WorldUtility.GetRimWarDataForFaction(faction).TotalFactionPoints); // label += "\n" + "RW_FactionBehavior".Translate(WorldUtility.GetRimWarDataForFaction(faction).behavior.ToString()); // Widgets.Label(rect, label); // if (!faction.IsPlayer) // { // } // __result += num2; // } //} private static void Settlement_InspectString_WithPoints_Postfix(RimWorld.Planet.Settlement __instance, ref string __result) { if (!__instance.Faction.def.hidden) { RimWarData rwData = WorldUtility.GetRimWarDataForFaction(__instance.Faction); if (rwData != null) { string text = ""; if (!__result.NullOrEmpty()) { text += "\n"; } for (int i = 0; i < rwData.FactionSettlements.Count; i++) { if (rwData.FactionSettlements[i].Tile == __instance.Tile) { text += "RW_SettlementPoints".Translate(rwData.FactionSettlements[i].RimWarPoints + "\n" + rwData.behavior.ToString()); break; } } __result += text; } } }
public static void CallForAid(WarObject rwo, int pts, Map map, Faction faction, int callRelationsCost, RimWarData rwd, Settlement sendingSettlement) { Faction ofPlayer = Faction.OfPlayer; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, -callRelationsCost, canSendMessage, true, reason); sendingSettlement.GetComponent <RimWarSettlementComp>().RimWarPoints -= pts; WorldUtility.CreateWarObjectOfType(rwo, pts, rwd, sendingSettlement, sendingSettlement.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); }
public static DiaOption RequestTraderOption(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 15; if (rwd != null) { wos = rwd.ClosestSettlementTo(map.Tile, 200); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, (int)(2500f / rwd.movementAttribute)) / 60000f; } } TaggedString taggedString = "RequestTrader".Translate(requestCost); if (wos != null) { taggedString = "RequestTrader".Translate(requestCost) + "\n" + "RW_RequestAddition".Translate(wos.Name, daysToArrive.ToString("#.#")); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(taggedString); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(taggedString); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (rwd == null) { DiaOption diaOptionRWD = new DiaOption(taggedString); diaOptionRWD.Disable("RW_InvalidRWD".Translate()); return(diaOptionRWD); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(taggedString); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastTraderRequestTick + 240000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(taggedString); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } DiaOption diaOption4 = new DiaOption(taggedString); DiaNode diaNode = new DiaNode("TraderSent".Translate(faction.leader).CapitalizeFirst()); diaNode.options.Add(OKToRoot(faction, negotiator)); DiaNode diaNode2 = new DiaNode("ChooseTraderKind".Translate(faction.leader)); foreach (TraderKindDef item in from x in faction.def.caravanTraderKinds where x.requestable select x) { TraderKindDef localTk = item; DiaOption diaOption5 = new DiaOption(localTk.LabelCap); if (localTk.TitleRequiredToTrade != null && (negotiator.royalty == null || localTk.TitleRequiredToTrade.seniority > negotiator.GetCurrentTitleSeniorityIn(faction))) { DiaNode diaNode3 = new DiaNode("TradeCaravanRequestDeniedDueTitle".Translate(negotiator.Named("NEGOTIATOR"), localTk.TitleRequiredToTrade.GetLabelCapFor(negotiator).Named("TITLE"), faction.Named("FACTION"))); DiaOption diaOption6 = new DiaOption("GoBack".Translate()); diaNode3.options.Add(diaOption6); diaOption5.link = diaNode3; diaOption6.link = diaNode2; } else { diaOption5.action = delegate { Trader trader = WorldUtility.CreateTrader(200, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); trader.traderKind = localTk; wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= 200; faction.lastTraderRequestTick = Find.TickManager.TicksGame; faction.TryAffectGoodwillWith(Faction.OfPlayer, -requestCost, false, true, "GoodwillChangedReason_RequestedTrader".Translate()); }; diaOption5.link = diaNode; } diaNode2.options.Add(diaOption5); } DiaOption diaOption7 = new DiaOption("GoBack".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode2.options.Add(diaOption7); diaOption4.link = diaNode2; return(diaOption4); }
public static DiaOption RequestMilitaryAid_LaunchedWarband_Option(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 25; int minPoints = 0; if (rwd != null) { minPoints = (int)(Find.WorldObjects.SettlementAt(map.Tile).GetComponent <RimWarSettlementComp>().RimWarPoints *.9f); wos = rwd.ClosestSettlementTo(map.Tile, minPoints); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, 100) / 60000f; } } string text = "RequestMilitaryAid".Translate(requestCost); if (wos != null) { text = "RW_RequestLaunchedWarband".Translate(requestCost, wos.Name, daysToArrive.ToString("#.#"), (int)(minPoints * rwd.combatAttribute)); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(text); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(text); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(text); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastMilitaryAidRequestTick + 60000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } if (!rwd.CanLaunch) { DiaOption diaOption4 = new DiaOption(text); diaOption4.Disable("RW_FactionIncapableOfTech".Translate(faction.Name)); return(diaOption4); } DiaOption diaOption5 = new DiaOption(text); IEnumerable <Faction> source = (from x in map.attackTargetsCache.TargetsHostileToColony where GenHostility.IsActiveThreatToPlayer(x) select((Thing)x).Faction).Where(delegate(Faction x) { if (x != null) { return(!x.HostileTo(faction)); } return(false); }).Distinct(); if (source.Any()) { DiaNode diaNode = new DiaNode("MilitaryAidConfirmMutualEnemy".Translate(faction.Name, (from fa in source select fa.Name).ToCommaList(useAnd: true))); DiaOption diaOption6 = new DiaOption("CallConfirm".Translate()); diaOption6.action = delegate { Faction ofPlayer = Faction.OfPlayer; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, -requestCost, canSendMessage, true, reason); wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= minPoints; WorldUtility.CreateLaunchedWarband(minPoints, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); }; diaOption6.link = FightersSent(faction, negotiator); DiaOption diaOption7 = new DiaOption("CallCancel".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode.options.Add(diaOption6); diaNode.options.Add(diaOption7); diaOption5.link = diaNode; } else { diaOption5.action = delegate { Faction ofPlayer = Faction.OfPlayer; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, -requestCost, canSendMessage, true, reason); wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= minPoints; WorldUtility.CreateLaunchedWarband(minPoints, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); }; diaOption5.link = FightersSent(faction, negotiator); } return(diaOption5); }
public static DiaOption RequestMilitaryAid_Warband_Option(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 20; int minPoints = 0; if (rwd != null) { minPoints = (int)(Find.WorldObjects.SettlementAt(map.Tile).GetComponent <RimWarSettlementComp>().RimWarPoints * 1.15f); wos = rwd.ClosestSettlementTo(map.Tile, minPoints); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, (int)(2800f * (1f / rwd.movementAttribute))) / 60000f; } } string text = "RequestMilitaryAid".Translate(requestCost); if (wos != null) { text = "RW_RequestWarband".Translate(requestCost, wos.Name, daysToArrive.ToString("#.#"), (int)(minPoints * rwd.combatAttribute)); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(text); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(text); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(text); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastMilitaryAidRequestTick + 60000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } //if (NeutralGroupIncidentUtility.AnyBlockingHostileLord(map, faction)) //{ // DiaOption diaOption4 = new DiaOption(text); // diaOption4.Disable("HostileVisitorsPresent".Translate()); // return diaOption4; //} DiaOption diaOption5 = new DiaOption(text); IEnumerable <Faction> source = (from x in map.attackTargetsCache.TargetsHostileToColony where GenHostility.IsActiveThreatToPlayer(x) select((Thing)x).Faction).Where(delegate(Faction x) { if (x != null) { return(!x.HostileTo(faction)); } return(false); }).Distinct(); if (source.Any()) { DiaNode diaNode = new DiaNode("MilitaryAidConfirmMutualEnemy".Translate(faction.Name, (from fa in source select fa.Name).ToCommaList(useAnd: true))); DiaOption diaOption6 = new DiaOption("CallConfirm".Translate()); diaOption6.action = delegate { CallForAid(new Warband(), minPoints, map, faction, requestCost, rwd, wos); }; diaOption6.link = FightersSent(faction, negotiator); DiaOption diaOption7 = new DiaOption("CallCancel".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode.options.Add(diaOption6); diaNode.options.Add(diaOption7); diaOption5.link = diaNode; } else { diaOption5.action = delegate { CallForAid(new Warband(), minPoints, map, faction, requestCost, rwd, wos); }; diaOption5.link = FightersSent(faction, negotiator); } return(diaOption5); }
public static void Debug_FixRimWarSettlements(bool generateReport = false, bool cleanupErrors = false) { int rwsCount = 0; int wosCount = 0; int rws_no_wosCount = 0; int wos_no_rwsCount = 0; int factionMismatchCount = 0; List <WorldObject> woList = Find.WorldObjects.AllWorldObjects; List <WorldObject> wosList = new List <WorldObject>(); wosList.Clear(); for (int i = 0; i < woList.Count; i++) { RimWorld.Planet.Settlement wos = woList[i] as RimWorld.Planet.Settlement; if (wos != null) { wosList.Add(wos); wosCount++; RimWarSettlementComp rws = WorldUtility.GetRimWarSettlementAtTile(wos.Tile); if (rws != null) { if (wos.Destroyed) { if (generateReport) { Log.Warning(wos.Label + " destroyed but has RWSC"); } if (cleanupErrors) { if (generateReport) { Log.Message("Cleaning RWS..."); } //WorldUtility.GetRimWarDataForFaction(wos.Faction)?.WorldSettlements?.Remove(rws); } } else if (wos.Faction != rws.parent.Faction) { factionMismatchCount++; if (generateReport) { Log.Warning(wos.Label + " of Faction " + wos.Faction + " different from RWS Faction " + rws.parent.Faction); } if (cleanupErrors) { if (generateReport) { Log.Message("Removing RWS from " + rws.parent.Faction + "..."); } //WorldUtility.GetRimWarDataForFaction(rws.parent.Faction)?.WorldSettlements?.Remove(rws); if (generateReport) { Log.Message("Adding RWS to " + wos.Faction + "..."); } //rws.Faction = wos.Faction; //WorldUtility.GetRimWarDataForFaction(wos.Faction)?.WorldSettlements?.Add(rws); } } } else { wos_no_rwsCount++; if (generateReport) { Log.Warning("" + wos.Label + " has no RWS"); } if (cleanupErrors) { if (generateReport) { Log.Message("Generating RWS for " + wos.Label + "..."); } WorldUtility.CreateRimWarSettlement(WorldUtility.GetRimWarDataForFaction(wos.Faction), wos); } } } } List <RimWarData> rwdList = WorldUtility.Get_WCPT().RimWarData; for (int i = 0; i < rwdList.Count; i++) { RimWarData rwd = rwdList[i]; if (rwd.WorldSettlements != null) { for (int j = 0; j < rwd.WorldSettlements.Count; j++) { RimWarSettlementComp rws = rwd.WorldSettlements[j].GetComponent <RimWarSettlementComp>(); rwsCount++; int wosHere = 0; List <RimWorld.Planet.Settlement> wosHereList = new List <RimWorld.Planet.Settlement>(); wosHereList.Clear(); for (int k = 0; k < wosList.Count; k++) { if (wosList[k].Tile == rws.parent.Tile) { wosHere++; wosHereList.Add(wosList[k] as RimWorld.Planet.Settlement); if (wosList[k].Faction != rws.parent.Faction) { factionMismatchCount++; if (generateReport) { Log.Warning(wosList[k].Label + " of Faction " + wosList[k].Faction + " different from RWS Faction " + rws.parent.Faction); } if (cleanupErrors) { if (generateReport) { Log.Message("Removing RWS from " + rws.parent.Faction + "..."); } //WorldUtility.GetRimWarDataForFaction(rws.parent.Faction)?.WorldSettlements?.Remove(rws); if (generateReport) { Log.Message("Adding RWS to " + wosList[k].Faction + "..."); } //rws.Faction = wosList[k].Faction; //WorldUtility.GetRimWarDataForFaction(wosList[k].Faction)?.WorldSettlements?.Add(rws); } } } } if (wosHere == 0) { rws_no_wosCount++; if (generateReport) { Log.Warning("No settlement found at " + Find.WorldGrid.LongLatOf(rws.parent.Tile)); } if (cleanupErrors) { if (generateReport) { Log.Warning("Removing RWS..."); } //rwd.FactionSettlements.Remove(rws); } } if (wosHere > 1) { if (generateReport) { Log.Warning("Stacked settlements (" + wosHere + ") found at " + Find.WorldGrid.LongLatOf(rws.parent.Tile)); } if (cleanupErrors) { while (wosHereList.Count > 1) { if (generateReport) { Log.Message("Destroying settlement..."); } RimWorld.Planet.Settlement wosHereDes = wosHereList[0]; wosHereList.Remove(wosHereDes); if (!wosHereDes.Destroyed) { wosHereDes.Destroy(); } } } } } } else { if (generateReport) { Log.Warning("Found null RWD"); } if (cleanupErrors) { if (generateReport) { Log.Message("Removing RWD..."); } rwdList.Remove(rwd); } } } if (generateReport) { bool errors = wos_no_rwsCount != 0 || rws_no_wosCount != 0 || factionMismatchCount != 0; Log.Message("Rim War Settlement Count: " + rwsCount); Log.Message("World Settlement Count: " + wosCount); if (!errors) { Log.Message("No errors found."); } if (wos_no_rwsCount > 0) { Log.Warning("Settlements without RWS component: " + wos_no_rwsCount); } if (rws_no_wosCount > 0) { Log.Warning("Rim War components without Settlement: " + rws_no_wosCount); } if (factionMismatchCount > 0) { Log.Warning("Faction mismatches: " + factionMismatchCount); } } }