public override bool CanUsePawnGenOption(PawnGenOption opt, List <PawnGenOption> chosenOpts) { if (chosenOpts.Count == 0 && !opt.kind.canBeSapper) { return(false); } return(true); }
public override bool CanUsePawnGenOption(PawnGenOption opt, List <PawnGenOption> chosenOpts) { if (chosenOpts.Count == 0 && (opt.kind.weaponTags.Count != 1 || !RaidStrategyWorker_ImmediateAttackSappers.CanBeSapper(opt.kind))) { return(false); } return(true); }
public static IEnumerable <PawnGenOption> ChoosePawnGenOptionsByPoints(float pointsTotal, List <PawnGenOption> options, PawnGroupMakerParms groupParms) { if (groupParms.seed.HasValue) { Rand.PushState(groupParms.seed.Value); } float num = MaxPawnCost(groupParms.faction, pointsTotal, groupParms.raidStrategy, groupParms.groupKind); List <PawnGenOption> list = new List <PawnGenOption>(); List <PawnGenOption> list2 = new List <PawnGenOption>(); float num2 = pointsTotal; bool flag = false; float highestCost = -1f; while (true) { list.Clear(); for (int i = 0; i < options.Count; i++) { PawnGenOption pawnGenOption = options[i]; if (!(pawnGenOption.Cost > num2) && !(pawnGenOption.Cost > num) && (!groupParms.generateFightersOnly || pawnGenOption.kind.isFighter) && (groupParms.raidStrategy == null || groupParms.raidStrategy.Worker.CanUsePawnGenOption(pawnGenOption, list2)) && (!groupParms.dontUseSingleUseRocketLaunchers || pawnGenOption.kind.weaponTags == null || !pawnGenOption.kind.weaponTags.Contains("GunHeavy")) && (!flag || !pawnGenOption.kind.factionLeader)) { if (pawnGenOption.Cost > highestCost) { highestCost = pawnGenOption.Cost; } list.Add(pawnGenOption); } } if (list.Count == 0) { break; } Func <PawnGenOption, float> weightSelector = delegate(PawnGenOption gr) { float selectionWeight = gr.selectionWeight; return(selectionWeight * PawnWeightFactorByMostExpensivePawnCostFractionCurve.Evaluate(gr.Cost / highestCost)); }; PawnGenOption pawnGenOption2 = list.RandomElementByWeight(weightSelector); list2.Add(pawnGenOption2); num2 -= pawnGenOption2.Cost; if (pawnGenOption2.kind.factionLeader) { flag = true; } } if (list2.Count == 1 && num2 > pointsTotal / 2f) { Log.Warning("Used only " + (pointsTotal - num2) + " / " + pointsTotal + " points generating for " + groupParms.faction); } if (groupParms.seed.HasValue) { Rand.PopState(); } return(list2); }
protected override void GeneratePawns(PawnGroupMakerParms parms, PawnGroupMaker groupMaker, List <Pawn> outPawns, bool errorOnZeroResults = true) { if (!CanGenerateFrom(parms, groupMaker)) { if (errorOnZeroResults) { Log.Error(string.Concat("Cannot generate trader caravan for ", parms.faction, ".")); } return; } if (!parms.faction.def.caravanTraderKinds.Any()) { Log.Error(string.Concat("Cannot generate trader caravan for ", parms.faction, " because it has no trader kinds.")); return; } PawnGenOption pawnGenOption = groupMaker.traders.FirstOrDefault((PawnGenOption x) => !x.kind.trader); if (pawnGenOption != null) { Log.Error(string.Concat("Cannot generate arriving trader caravan for ", parms.faction, " because there is a pawn kind (") + pawnGenOption.kind.LabelCap + ") who is not a trader but is in a traders list."); return; } PawnGenOption pawnGenOption2 = groupMaker.carriers.FirstOrDefault((PawnGenOption x) => !x.kind.RaceProps.packAnimal); if (pawnGenOption2 != null) { Log.Error(string.Concat("Cannot generate arriving trader caravan for ", parms.faction, " because there is a pawn kind (") + pawnGenOption2.kind.LabelCap + ") who is not a carrier but is in a carriers list."); return; } if (parms.seed.HasValue) { Log.Warning("Deterministic seed not implemented for this pawn group kind worker. The result will be random anyway."); } TraderKindDef traderKindDef = ((parms.traderKind != null) ? parms.traderKind : parms.faction.def.caravanTraderKinds.RandomElementByWeight((TraderKindDef traderDef) => traderDef.CalculatedCommonality)); Pawn pawn = GenerateTrader(parms, groupMaker, traderKindDef); outPawns.Add(pawn); ThingSetMakerParams parms2 = default(ThingSetMakerParams); parms2.traderDef = traderKindDef; parms2.tile = parms.tile; parms2.makingFaction = parms.faction; List <Thing> wares = ThingSetMakerDefOf.TraderStock.root.Generate(parms2).InRandomOrder().ToList(); foreach (Pawn slavesAndAnimalsFromWare in GetSlavesAndAnimalsFromWares(parms, pawn, wares)) { outPawns.Add(slavesAndAnimalsFromWare); } GenerateCarriers(parms, groupMaker, pawn, wares, outPawns); GenerateGuards(parms, groupMaker, pawn, wares, outPawns); }
public static IEnumerable <PawnGenOption> ChoosePawnGenOptionsByPoints(float points, List <PawnGenOption> options, PawnGroupMakerParms parms) { float num = PawnGroupMakerUtility.MaxAllowedPawnGenOptionCost(parms.faction, points, parms.raidStrategy); List <PawnGenOption> list = new List <PawnGenOption>(); List <PawnGenOption> list2 = new List <PawnGenOption>(); float num2 = points; bool flag = false; while (true) { list.Clear(); for (int i = 0; i < options.Count; i++) { PawnGenOption pawnGenOption = options[i]; if (!(pawnGenOption.Cost > num2) && !(pawnGenOption.Cost > num) && (!parms.generateFightersOnly || pawnGenOption.kind.isFighter) && (parms.raidStrategy == null || parms.raidStrategy.Worker.CanUsePawnGenOption(pawnGenOption, list2)) && (!flag || !pawnGenOption.kind.factionLeader)) { list.Add(pawnGenOption); } } if (list.Count != 0) { float desireToSuppressCount = PawnGroupMakerUtility.DesireToSuppressCountPerRaidPointsCurve.Evaluate(points); Func <PawnGenOption, float> weightSelector = delegate(PawnGenOption gr) { float num3 = gr.selectionWeight; if (desireToSuppressCount > 0.0) { float b = (float)(num3 * (gr.Cost / 100.0)); num3 = Mathf.Lerp(num3, b, desireToSuppressCount); } return(num3); }; PawnGenOption pawnGenOption2 = list.RandomElementByWeight(weightSelector); list2.Add(pawnGenOption2); num2 -= pawnGenOption2.Cost; if (pawnGenOption2.kind.factionLeader) { flag = true; } continue; } break; } if (list2.Count == 1 && num2 > points / 2.0) { Log.Warning("Used only " + (points - num2) + " / " + points + " points generating for " + parms.faction); } return(list2); }
public override IEnumerable <PawnKindDef> GeneratePawnKindsExample(PawnGroupMakerParms parms, PawnGroupMaker groupMaker) { using (IEnumerator <PawnGenOption> enumerator = PawnGroupMakerUtility.ChoosePawnGenOptionsByPoints(parms.points, groupMaker.options, parms).GetEnumerator()) { if (enumerator.MoveNext()) { PawnGenOption p = enumerator.Current; yield return(p.kind); /*Error: Unable to find new state assignment for yield return*/; } } yield break; IL_00d4: /*Error near IL_00d5: Unexpected return in MoveNext()*/; }
protected override void GeneratePawns(PawnGroupMakerParms parms, PawnGroupMaker groupMaker, List <Pawn> outPawns, bool errorOnZeroResults = true) { if (!this.CanGenerateFrom(parms, groupMaker)) { if (errorOnZeroResults) { Log.Error("Cannot generate trader caravan for " + parms.faction + "."); } } else if (!parms.faction.def.caravanTraderKinds.Any()) { Log.Error("Cannot generate trader caravan for " + parms.faction + " because it has no trader kinds."); } else { PawnGenOption pawnGenOption = groupMaker.traders.FirstOrDefault((PawnGenOption x) => !x.kind.trader); if (pawnGenOption != null) { Log.Error("Cannot generate arriving trader caravan for " + parms.faction + " because there is a pawn kind (" + pawnGenOption.kind.LabelCap + ") who is not a trader but is in a traders list."); } else { PawnGenOption pawnGenOption2 = groupMaker.carriers.FirstOrDefault((PawnGenOption x) => !x.kind.RaceProps.packAnimal); if (pawnGenOption2 != null) { Log.Error("Cannot generate arriving trader caravan for " + parms.faction + " because there is a pawn kind (" + pawnGenOption2.kind.LabelCap + ") who is not a carrier but is in a carriers list."); } else { TraderKindDef traderKindDef = (parms.traderKind == null) ? parms.faction.def.caravanTraderKinds.RandomElementByWeight((TraderKindDef traderDef) => traderDef.commonality) : parms.traderKind; Pawn pawn = this.GenerateTrader(parms, groupMaker, traderKindDef); outPawns.Add(pawn); ItemCollectionGeneratorParams parms2 = default(ItemCollectionGeneratorParams); parms2.traderDef = traderKindDef; parms2.tile = parms.tile; parms2.traderFaction = parms.faction; List <Thing> wares = ItemCollectionGeneratorDefOf.TraderStock.Worker.Generate(parms2).InRandomOrder(null).ToList(); foreach (Pawn slavesAndAnimalsFromWare in this.GetSlavesAndAnimalsFromWares(parms, pawn, wares)) { outPawns.Add(slavesAndAnimalsFromWare); } this.GenerateCarriers(parms, groupMaker, pawn, wares, outPawns); this.GenerateGuards(parms, groupMaker, pawn, wares, outPawns); } } } }
private static float <GenerateCarriers> m__5(PawnGenOption x) { return(x.selectionWeight); }
private static float <GenerateTrader> m__3(PawnGenOption x) { return(x.selectionWeight); }
private static bool <GeneratePawns> m__1(PawnGenOption x) { return(!x.kind.RaceProps.packAnimal); }
private static bool <GeneratePawns> m__0(PawnGenOption x) { return(!x.kind.trader); }
public override bool CanUsePawnGenOption(PawnGenOption opt, List <PawnGenOption> chosenOpts) { return(chosenOpts.Count != 0 || (opt.kind.weaponTags.Count == 1 && RaidStrategyWorker_ImmediateAttackSappers.CanBeSapper(opt.kind))); }
private static bool <CheapestSapperCost> m__0(PawnGenOption op) { return(op.kind.canBeSapper); }
internal bool <> m__0(PawnGenOption x) { return(Find.WorldGrid[this.parms.tile].biome.IsPackAnimalAllowed(x.kind.race)); }
public override bool CanUsePawnGenOption(PawnGenOption opt, List <PawnGenOption> chosenOpts) { return(chosenOpts.Count != 0 || opt.kind.canBeSapper); }
private static float <MinPointsToGenerateAnything> m__1(PawnGenOption g) { return(g.Cost); }
private static bool <MinPointsToGenerateAnything> m__0(PawnGenOption x) { return(x.kind.isFighter); }
private static bool <> m__1(PawnGenOption op) { return(op.kind.canBeSapper); }
protected override void GeneratePawns(PawnGroupMakerParms parms, PawnGroupMaker groupMaker, List <Pawn> outPawns, bool errorOnZeroResults = true) { if (!this.CanGenerateFrom(parms, groupMaker)) { if (errorOnZeroResults) { Log.Error("Cannot generate trader caravan for " + parms.faction + ".", false); } } else if (!parms.faction.def.caravanTraderKinds.Any <TraderKindDef>()) { Log.Error("Cannot generate trader caravan for " + parms.faction + " because it has no trader kinds.", false); } else { PawnGenOption pawnGenOption = groupMaker.traders.FirstOrDefault((PawnGenOption x) => !x.kind.trader); if (pawnGenOption != null) { Log.Error(string.Concat(new object[] { "Cannot generate arriving trader caravan for ", parms.faction, " because there is a pawn kind (", pawnGenOption.kind.LabelCap, ") who is not a trader but is in a traders list." }), false); } else { PawnGenOption pawnGenOption2 = groupMaker.carriers.FirstOrDefault((PawnGenOption x) => !x.kind.RaceProps.packAnimal); if (pawnGenOption2 != null) { Log.Error(string.Concat(new object[] { "Cannot generate arriving trader caravan for ", parms.faction, " because there is a pawn kind (", pawnGenOption2.kind.LabelCap, ") who is not a carrier but is in a carriers list." }), false); } else { if (parms.seed != null) { Log.Warning("Deterministic seed not implemented for this pawn group kind worker. The result will be random anyway.", false); } TraderKindDef traderKindDef; if (parms.traderKind != null) { traderKindDef = parms.traderKind; } else { traderKindDef = parms.faction.def.caravanTraderKinds.RandomElementByWeight((TraderKindDef traderDef) => traderDef.CalculatedCommonality); } TraderKindDef traderKindDef2 = traderKindDef; Pawn pawn = this.GenerateTrader(parms, groupMaker, traderKindDef2); outPawns.Add(pawn); ThingSetMakerParams parms2 = default(ThingSetMakerParams); parms2.traderDef = traderKindDef2; parms2.tile = new int?(parms.tile); parms2.traderFaction = parms.faction; List <Thing> wares = ThingSetMakerDefOf.TraderStock.root.Generate(parms2).InRandomOrder(null).ToList <Thing>(); foreach (Pawn item in this.GetSlavesAndAnimalsFromWares(parms, pawn, wares)) { outPawns.Add(item); } this.GenerateCarriers(parms, groupMaker, pawn, wares, outPawns); this.GenerateGuards(parms, groupMaker, pawn, wares, outPawns); } } } }
public virtual bool CanUsePawnGenOption(PawnGenOption g, List <PawnGenOption> chosenGroups) { return(true); }