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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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()*/;
        }
Exemplo n.º 7
0
 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));
 }
Exemplo n.º 15
0
 public override bool CanUsePawnGenOption(PawnGenOption opt, List <PawnGenOption> chosenOpts)
 {
     return(chosenOpts.Count != 0 || opt.kind.canBeSapper);
 }
Exemplo n.º 16
0
 private static float <MinPointsToGenerateAnything> m__1(PawnGenOption g)
 {
     return(g.Cost);
 }
Exemplo n.º 17
0
 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);
             }
         }
     }
 }
Exemplo n.º 20
0
 public virtual bool CanUsePawnGenOption(PawnGenOption g, List <PawnGenOption> chosenGroups)
 {
     return(true);
 }