public static void LogPawnGroupsMade() { Dialog_DebugOptionListLister.ShowSimpleDebugMenu <Faction>(from fac in Find.FactionManager.AllFactions where !fac.def.pawnGroupMakers.NullOrEmpty <PawnGroupMaker>() select fac, (Faction fac) => fac.Name + " (" + fac.def.defName + ")", delegate(Faction fac) { StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Concat(new object[] { "FACTION: ", fac.Name, " (", fac.def.defName, ") min=", fac.def.MinPointsToGenerateNormalPawnGroup() })); Action <float> action = delegate(float points) { if (points < fac.def.MinPointsToGenerateNormalPawnGroup()) { return; } PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms(); pawnGroupMakerParms.tile = Find.VisibleMap.Tile; pawnGroupMakerParms.points = points; pawnGroupMakerParms.faction = fac; sb.AppendLine(string.Concat(new object[] { "Group with ", pawnGroupMakerParms.points, " points (max option cost: ", PawnGroupMakerUtility.MaxAllowedPawnGenOptionCost(fac, points, RaidStrategyDefOf.ImmediateAttack), ")" })); float num = 0f; foreach (Pawn current in PawnGroupMakerUtility.GeneratePawns(PawnGroupKindDefOf.Normal, pawnGroupMakerParms, false).OrderBy((Pawn pa) => pa.kindDef.combatPower)) { string text; if (current.equipment.Primary != null) { text = current.equipment.Primary.Label; } else { text = "no-equipment"; } Apparel apparel = current.apparel.FirstApparelOnBodyPartGroup(BodyPartGroupDefOf.Torso); string text2; if (apparel != null) { text2 = apparel.LabelCap; } else { text2 = "shirtless"; } sb.AppendLine(string.Concat(new string[] { " ", current.kindDef.combatPower.ToString("F0").PadRight(6), current.kindDef.defName, ", ", text, ", ", text2 })); num += current.kindDef.combatPower; } sb.AppendLine(" totalCost " + num); sb.AppendLine(); }; foreach (float obj in Dialog_DebugActionsMenu.PointsOptions()) { action(obj); } Log.Message(sb.ToString()); }); }