public static void FlareRaidPawnGroupsMade() { Dialog_DebugOptionListLister.ShowSimpleDebugMenu( elements : from fac in Find.FactionManager.AllFactions where !fac.def.pawnGroupMakers.NullOrEmpty() && fac.def.humanlikeFaction && fac.def.techLevel >= TechLevel.Industrial select fac, label : fac => fac.Name + " (" + fac.def.defName + ")", chosen : delegate(Faction fac) { var sb = new StringBuilder(); sb.AppendLine($"Point multiplier = ;{SolarRaidGroupMaker.PointMultiplier};;Max pawn cost multiplier = ;{SolarRaidGroupMaker.MaxPawnCostMultiplier};;"); float minPointsToGen = fac.def.MinPointsToGeneratePawnGroup(groupKind: PawnGroupKindDefOf.Combat); sb.AppendLine($"Faction =;{fac.def.defName};;Min pts to gen CombatGroup = ;{minPointsToGen};;"); Action <float> action = delegate(float points) { if (points < fac.def.MinPointsToGeneratePawnGroup(groupKind: PawnGroupKindDefOf.Combat)) { return; } float originalPoints = points; points = IncidentWorker_Raid.AdjustedRaidPoints( points, PawnsArrivalModeDefOf.CenterDrop, RaidStrategyDefOf.ImmediateAttack, fac, PawnGroupKindDefOf.Combat ); var pawnGroupMakerParms = new PawnGroupMakerParms { groupKind = PawnGroupKindDefOf.Combat, tile = Find.CurrentMap.Tile, points = points, faction = fac, raidStrategy = RaidStrategyDefOf.ImmediateAttack }; pawnGroupMakerParms.groupKind = PawnGroupKindDefOf.Combat; float maxPawnCost = PawnGroupMakerUtility.MaxPawnCost( faction: fac, totalPoints: points, raidStrategy: RaidStrategyDefOf.ImmediateAttack, groupKind: PawnGroupKindDefOf.Combat ); sb.AppendLine( value: $"Adjusted Points =;{pawnGroupMakerParms.points};Original points;{originalPoints};Max pawn cost;{maxPawnCost};"); //Points: X; MaxPawnCost: //$"{};{};{};{};{};{}" //150; Mercenary_Slasher; Gladius; Y; Apparel_FlakJacket; NV_tinted_goggles var num2 = 0f; SolarRaidGroupMaker.TryGetRandomPawnGroupMaker(parms: pawnGroupMakerParms, out var groupMaker); Log.Message(new string('-', 20)); Log.Message($"Random group maker result:"); Log.Message($"points = {points}"); Log.Message($"groupMaker. = {groupMaker.options.ConvertAll(opt => opt.kind.LabelCap).ToStringSafeEnumerable()}"); Log.Message(new string('-', 20)); foreach (Pawn pawn in SolarRaid_PawnGenerator.GeneratePawns(parms: pawnGroupMakerParms, groupMaker, false) .OrderBy(keySelector: pa => pa.kindDef.combatPower)) { sb.Append($" {pawn.kindDef.combatPower.ToString(format: "F0").PadRight(totalWidth: 6)};{pawn.kindDef.LabelCap};"); if (pawn.equipment.Primary != null) { pawn.equipment.AllEquipmentListForReading.Aggregate(sb, (builder, comps) => builder.Append(comps.def.LabelCap + ",")); } else { sb.Append("no equipment"); } sb.Append(";"); var wornApparel = pawn.apparel.WornApparel; string torsoGear = ""; string eyeWear = ""; string shield = ""; for (int i = 0; i < wornApparel.Count; i++) { Apparel apparel = wornApparel[i]; for (int j = 0; j < apparel.def.apparel.bodyPartGroups.Count; j++) { if (apparel.def.apparel.bodyPartGroups[j] == BodyPartGroupDefOf.Torso) { torsoGear += $"{apparel.def.LabelCap}, "; } else if (apparel.def.apparel.bodyPartGroups[j] == BodyPartGroupDefOf.Eyes) { eyeWear += $"{apparel.def.LabelCap}, "; } if (apparel is ShieldBelt && shield.NullOrEmpty()) { shield = $"Y;"; } } } torsoGear = torsoGear.NullOrEmpty() ? "shirtless" : torsoGear.TrimEnd(' ', ','); eyeWear = eyeWear.NullOrEmpty() ? "not bespectacled" : eyeWear.TrimEnd(' ', ','); shield = shield.NullOrEmpty() ? "N" : shield; sb.Append($"{shield};{torsoGear};{eyeWear};"); if (pawn.health.hediffSet.hediffs.Count > 0) { pawn.health.hediffSet.hediffs.Aggregate(sb, (builder, comps) => builder.Append(comps.def.LabelCap + ",")); } else { sb.Append("no hediffs"); } sb.AppendLine(); num2 += pawn.kindDef.combatPower; } sb.AppendLine($";;;;Final point cost;{num2};"); sb.AppendLine(); }; foreach (float num in /*Dialog_DebugActionsMenu*/ DebugActionsUtility.PointsOptions(extended: false)) { float obj = num; action(obj: obj); } Log.Message(text: sb.ToString()); #if DEBUG GUIUtility.systemCopyBuffer = sb.ToString(); #endif } ); }
public static pawnGenTrialTrialGroupGenerated groupGenerated(Faction fac, float points) { if (points < fac.def.MinPointsToGeneratePawnGroup(groupKind: PawnGroupKindDefOf.Combat)) { return(null); } pawnGenTrialTrialGroupGenerated groupGen = new pawnGenTrialTrialGroupGenerated { originalPoints = points }; points = IncidentWorker_Raid.AdjustedRaidPoints( points: points, raidArrivalMode: PawnsArrivalModeDefOf.CenterDrop, raidStrategy: GetSmart(), faction: fac, groupKind: PawnGroupKindDefOf.Combat ); groupGen.modifiedPoints = points; var pawnGroupMakerParms = new PawnGroupMakerParms { groupKind = PawnGroupKindDefOf.Combat, tile = Find.CurrentMap.Tile, points = points, faction = fac, raidStrategy = GetSmart() }; pawnGroupMakerParms.groupKind = PawnGroupKindDefOf.Combat; Log.Message($"raid strat. = {pawnGroupMakerParms.raidStrategy}"); float maxPawnCost = SolarRaidGroupMaker.MaxPawnCostMultiplier * PawnGroupMakerUtility.MaxPawnCost( faction: fac, totalPoints: points, raidStrategy: GetSmart(), groupKind: PawnGroupKindDefOf.Combat ); groupGen.maxPawnCost = maxPawnCost; SolarRaidGroupMaker.TryGetRandomPawnGroupMaker(parms: pawnGroupMakerParms, pawnGroupMaker: out PawnGroupMaker groupMaker); var pawns = SolarRaid_PawnGenerator.GeneratePawns(parms: pawnGroupMakerParms, groupMaker: groupMaker, errorOnZeroResults: false) .OrderBy(keySelector: pa => pa.kindDef.combatPower).ToList(); int pawnCount = pawns.Count; groupGen.pawn = new pawnGenTrialTrialGroupGeneratedPawn[pawnCount]; var pointsSpent = 0f; for (var index = 0; index < pawnCount; index++) { Pawn pawn = pawns[index]; pawnGenTrialTrialGroupGeneratedPawn pawnData = new pawnGenTrialTrialGroupGeneratedPawn { label = pawn.KindLabel, combatPower = (int)pawn.kindDef.combatPower, primaryEq = pawn.equipment.Primary != null ? pawn.equipment.Primary.LabelCapNoCount : "no weapon" }; List <Apparel> wornApparel = pawn.apparel.WornApparel; var torsoGear = ""; var eyeWear = ""; foreach (Apparel apparel in wornApparel) { foreach (BodyPartGroupDef bpgd in apparel.def.apparel.bodyPartGroups) { if (bpgd == BodyPartGroupDefOf.Torso) { torsoGear += $"{apparel.def.LabelCap}, "; } else if (bpgd == BodyPartGroupDefOf.Eyes) { eyeWear += $"{apparel.def.LabelCap}, "; } if (apparel is ShieldBelt) { pawnData.hasShield = true; } } } pawnData.apparelChest = torsoGear.NullOrEmpty() ? "shirtless" : torsoGear.TrimEnd(' ', ','); pawnData.apparelHead = eyeWear.NullOrEmpty() ? "not bespectacled" : eyeWear.TrimEnd(' ', ','); pawnData.hediffs = pawn.health.hediffSet.hediffs.Where(hd => !(hd is Hediff_MissingPart)).Select(hdf => hdf.LabelCap).ToCommaList(); pointsSpent += pawn.kindDef.combatPower; groupGen.pawn[index] = pawnData; } groupGen.pointsSpent = pointsSpent; return(groupGen); }