Exemple #1
0
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            if (parms.raidStrategy == null)
            {
                Map map = (Map)parms.target;
                DefDatabase <RaidStrategyDef> .AllDefs.Where(delegate(RaidStrategyDef d)
                {
                    if (d.Worker.CanUseWith(parms, groupKind))
                    {
                        if (parms.raidArrivalMode == null)
                        {
                            if (d.arriveModes != null)
                            {
                                return(d.arriveModes.Any((PawnsArrivalModeDef x) => x.Worker.CanUseWith(parms)));
                            }
                            return(false);
                        }
                        return(true);
                    }
                    return(false);
                }).TryRandomElementByWeight((RaidStrategyDef d) => d.Worker.SelectionWeight(map, parms.points), out RaidStrategyDef result);

                parms.raidStrategy = result;
                if (parms.raidStrategy == null)
                {
                    Log.Error("No raid stategy found, defaulting to ImmediateAttack. Faction=" + parms.faction.def.defName + ", points=" + parms.points + ", groupKind=" + groupKind + ", parms=" + parms);
                    parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
                }
            }
        }
Exemple #2
0
        public static List <Pawn> GenerateRaidPawns(IncidentParms parms)
        {
            if (PES_Settings.DebugModeOn)
            {
                Log.Message("-=PS=- GenerateRaidPawns Start", false);
            }
            if (parms != null && parms.questTag != null)             //Lt. Bob - "Temporary" bypass fix? for Quest handling
            {
                Log.Message("-=PS=- GenerateRaidPawns - questTag!=Null == " + parms.questTag);
            }

            IsIntercepting_PawnGeneration = GeneratorPatchFlag.Generate;

            PawnGroupKindDef combat = PawnGroupKindDefOf.Combat;

            parms.points = IncidentWorker_Raid.AdjustedRaidPoints(parms.points, parms.raidArrivalMode, parms.raidStrategy, parms.faction, combat);
            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms, false);
            List <Pawn>         list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();

            if (list.Count == 0)
            {
                Log.Error("Got no pawns spawning raid from parms " + parms, false);
            }
            return(list);
        }
Exemple #3
0
        public override bool CanUseWith(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            CGO.fallingStructure = this.def.GetModExtension <FallingStructure>();

            if (CGO.fallingStructure.needToHaveSettlements && !Find.World.worldObjects.Settlements.FindAll(s => s.Faction == parms.faction).Any())
            {
                return(false);
            }

            if (CGO.fallingStructure.canBeUsedBy.Contains(parms.faction.def))
            {
                CGO.fallingStructureChoosen = LayoutUtils.ChooseWeightedStruct(CGO.fallingStructure.WeightedStructs, parms).structureLayoutDef;

                if (CGO.fallingStructureChoosen != null)
                {
                    RectUtils.HeightWidthFromLayout(CGO.fallingStructureChoosen, out int h, out int w);
                    return(parms.points >= this.MinimumPoints(parms.faction, groupKind) && this.FindRect((Map)parms.target, h, w) != IntVec3.Invalid);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Exemple #4
0
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            var map = (Map)parms.target;

            if (map.Biome != Util_CaveBiome.CaveBiomeDef)
            {
                base.ResolveRaidStrategy(parms, groupKind);
                return;
            }
            if (Rand.Bool)
            {
                if (Rand.Bool)
                {
                    parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
                }
                else
                {
                    parms.raidStrategy = DefDatabase <RaidStrategyDef> .GetNamedSilentFail("ImmediateAttackSmart");
                }
            }
            else
            {
                parms.raidStrategy = DefDatabase <RaidStrategyDef> .GetNamedSilentFail("StageThenAttack");
            }
        }
 public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
 {
     if (parms.raidStrategy == null)
     {
         Map map = (Map)parms.target;
         if (!(from d in DefDatabase <RaidStrategyDef> .AllDefs
               where d.Worker.CanUseWith(parms, groupKind) &&
               (parms.raidArrivalMode != null ||
                (d.arriveModes != null &&
                 d.arriveModes.Any((PawnsArrivalModeDef x) => x.Worker.CanUseWith(parms))))
               select d).TryRandomElementByWeight(
                 (RaidStrategyDef d) => d.Worker.SelectionWeight(map, parms.points), out parms.raidStrategy))
         {
             Log.Error(string.Concat(new object[]
             {
                 "No raid stategy for ",
                 parms.faction,
                 " with points ",
                 parms.points,
                 ", groupKind=",
                 groupKind,
                 "\nparms=",
                 parms
             }), false);
             if (!Prefs.DevMode)
             {
                 parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
             }
         }
     }
 }
 public override void ResolveReferences(ThingDef parentDef)
 {
     base.ResolveReferences(parentDef);
     if (factionGroupKindDef == null)
     {
         factionGroupKindDef = PawnGroupKindDefOf.Combat;
     }
 }
Exemple #7
0
 public override void ResolveReferences(ThingDef parentDef)
 {
     base.ResolveReferences(parentDef);
     if (factionGroupKindDef == null)
     {
         factionGroupKindDef = PawnGroupKindDefOf.Hive_OgsOld_ExtraHives;
     }
 }
 protected override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
 {
     if (parms.raidStrategy != null)
     {
         return;
     }
     parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
 }
Exemple #9
0
        public static List <Pawn> GenerateNeutralPawns(PawnGroupKindDef pawnGroupKind, IncidentParms parms)
        {
            IsIntercepting_PawnGeneration = GeneratorPatchFlag.Generate;

            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(pawnGroupKind, parms, true);
            List <Pawn>         list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, false).ToList <Pawn>();

            return(list);
        }
 //public class PawnGroupMakerUtility
 //{
 public static void GeneratePawns(PawnGroupKindDef groupKind, PawnGroupMakerParms parms,
                                  bool warnOnZeroResults, ref IEnumerable <Pawn> __result)
 {
     if (__result?.Count() > 0 &&
         parms.faction.def.GetModExtension <FactionSettings>() is FactionSettings settings)
     {
         settings.entrySoundDef?.PlayOneShotOnCamera();
     }
 }
 public override bool CanUseWith(IncidentParms parms, PawnGroupKindDef groupKind)
 {
     if (!base.CanUseWith(parms, groupKind))
     {
         return(false);
     }
     if (parms.faction != null)
     {
         return(!parms.faction.HostileTo(Faction.OfPlayer));
     }
     return(false);
 }
Exemple #12
0
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            if (IncidentDefExtension.forcedStrategy == null)
            {
                base.ResolveRaidStrategy(parms, groupKind);
            }

            else
            {
                parms.raidStrategy = IncidentDefExtension.forcedStrategy;
            }
        }
Exemple #13
0
 public override bool CanUseWith(IncidentParms parms, PawnGroupKindDef groupKind)
 {
     if (!PawnGenOptionsWithLockpickers(parms.faction, groupKind).Any())
     {
         return(false);
     }
     if (!base.CanUseWith(parms, groupKind))
     {
         return(false);
     }
     return(true);
 }
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            parms.raidStrategy = VehicleRaidStrategyDefOf.ArmoredAttack;
            return;

            if (parms.raidStrategy != null)
            {
                return;
            }
            Map map = (Map)parms.target;
            Predicate <PawnsArrivalModeDef> validator;
            RaidStrategyDef raidStrategy;

            DefDatabase <RaidStrategyDef> .AllDefs.Where(delegate(RaidStrategyDef d)
            {
                if (!d.Worker.CanUseWith(parms, groupKind))
                {
                    return(false);
                }
                if (parms.raidArrivalMode != null)
                {
                    return(true);
                }
                if (d.arriveModes != null)
                {
                    List <PawnsArrivalModeDef> arriveModes = d.arriveModes;
                    Predicate <PawnsArrivalModeDef> validator2;
                    if ((validator2 = validator) == null)
                    {
                        validator2 = (validator = ((PawnsArrivalModeDef x) => x.Worker.CanUseWith(parms)));
                    }
                    return(arriveModes.Any(validator2));
                }
                return(false);
            }).TryRandomElementByWeight((RaidStrategyDef d) => d.Worker.SelectionWeight(map, parms.points), out raidStrategy);

            parms.raidStrategy = raidStrategy;
            if (parms.raidStrategy == null)
            {
                Log.Error(string.Concat(new object[]
                {
                    "No raid stategy found, defaulting to ImmediateAttack. Faction=",
                    parms.faction.def.defName,
                    ", points=",
                    parms.points,
                    ", groupKind=",
                    groupKind,
                    ", parms=",
                    parms
                }));
                parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
            }
        }
Exemple #15
0
        public static List <Pawn> GenerateBoatsForIncident(IncidentParms parms, PawnGroupKindDef group, ref List <Pawn> pawns)
        {
            List <Pawn> ships = new List <Pawn>();

            if (group == PawnGroupKindDefOf.Trader)
            {
                float pointsToSpend         = parms.points;
                int   colonistsToHouse      = pawns.Count;
                List <PawnKindDef> kindDefs = DefDatabase <PawnKindDef> .AllDefs.Where(x => x.race.HasComp(typeof(CompShips)) && parms.faction.def.techLevel >= x.race.GetCompProperties <CompProperties_Ships>().shipTech).ToList();

                kindDefs.OrderByDescending(x => x.combatPower).ThenBy(x => x.race.GetCompProperties <CompProperties_Ships>().shipCategory);

                int i = 0;
                kindDefs.RemoveAll(x => x.combatPower > parms.points);
                while (pointsToSpend > 0 && i < kindDefs.Count)
                {
                    PawnKindDef t = kindDefs[i];
                    if (t.race.GetCompProperties <CompProperties_Ships>().shipCategory <= ShipCategory.Trader)
                    {
                        int pawnCount        = 0;
                        int pawnCountOperate = 0;
                        foreach (ShipRole r in t.race.GetCompProperties <CompProperties_Ships>().roles)
                        {
                            if (r.handlingType == HandlingTypeFlags.Movement)
                            {
                                pawnCountOperate += r.slotsToOperate;
                            }
                            pawnCount += r.slots;
                        }

                        if (colonistsToHouse < pawnCountOperate)
                        {
                            i++;
                            continue;
                        }
                        colonistsToHouse -= pawnCount;
                        pointsToSpend    -= t.combatPower;
                        Pawn p = PawnGenerator.GeneratePawn(t, parms.faction);
                        ships.Add(p);
                        if (colonistsToHouse <= 0)
                        {
                            return(ships);
                        }
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            return(ships);
        }
 protected override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
 {
     try {
         base.ResolveRaidStrategy(parms, groupKind);
         Pawn mole = MapComponent_Tenants.GetComponent((Map)parms.target).Moles[0];
         if (mole.GetTenantComponent().HiddenFaction.def.techLevel >= TechLevel.Spacer && Rand.Value < 0.5f)
         {
             parms.raidArrivalMode = PawnsArrivalModeDefOf.CenterDrop;
         }
     }
     catch (System.Exception) {
         base.ResolveRaidStrategy(parms, groupKind);
     }
 }
        private List <Pawn> SpawnRaid(IncidentParms parms, out List <TargetInfo> targetInfos)
        {
            PawnGroupKindDef combat = PawnGroupKindDefOf.Combat;

            parms.raidStrategy.Worker.TryGenerateThreats(parms);
            List <Pawn> list = parms.raidStrategy.Worker.SpawnThreats(parms);

            if (list == null)
            {
                list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms)).ToList();
                if (list.Count == 0)
                {
                    Log.Error("Got no pawns spawning raid from parms " + parms);
                    targetInfos = null;
                    return(list);
                }
                parms.raidArrivalMode.Worker.Arrive(list, parms);
            }

            List <TargetInfo> list2 = new List <TargetInfo>();

            if (parms.pawnGroups != null)
            {
                List <List <Pawn> > list3 = IncidentParmsUtility.SplitIntoGroups(list, parms.pawnGroups);
                List <Pawn>         list4 = list3.MaxBy((List <Pawn> x) => x.Count);
                if (list4.Any())
                {
                    list2.Add(list4[0]);
                }
                for (int i = 0; i < list3.Count; i++)
                {
                    if (list3[i] != list4 && list3[i].Any())
                    {
                        list2.Add(list3[i][0]);
                    }
                }
            }
            else if (list.Any())
            {
                foreach (Pawn item in list)
                {
                    list2.Add(item);
                }
            }
            parms.raidStrategy.Worker.MakeLords(parms, list);
            targetInfos = list2;
            return(list);
        }
Exemple #18
0
        public static List <Pawn> GenerateRaidPawns(IncidentParms parms)
        {
            IsIntercepting_PawnGeneration = GeneratorPatchFlag.Generate;

            PawnGroupKindDef combat = PawnGroupKindDefOf.Combat;

            parms.points = IncidentWorker_Raid.AdjustedRaidPoints(parms.points, parms.raidArrivalMode, parms.raidStrategy, parms.faction, combat);
            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms, false);
            List <Pawn>         list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();

            if (list.Count == 0)
            {
                Log.Error("Got no pawns spawning raid from parms " + parms, false);
            }
            return(list);
        }
 public static void Prefix(ref PawnGroupKindDef groupKind, ref IncidentParms parms)
 {
     if (parms.target is Map && (parms.target as Map).IsPlayerHome)
     {
         if (parms.faction != null && (parms.faction.def.defName.Contains("MuvLuv_BETA")))
         {
             if ((parms.target is Map map))
             {
                 if (parms.raidArrivalMode.defName.Contains("TunnelIn"))
                 {
                     groupKind = OgsOld_ExtraHives.PawnGroupKindDefOf.Tunneler_OgsOld_ExtraHives;
                 }
             }
         }
     }
 }
Exemple #20
0
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            if (parms.raidStrategy != null)
            {
                return;
            }
            Map map = (Map)parms.target;

            DefDatabase <RaidStrategyDef> .AllDefs.Where((RaidStrategyDef d) => d.Worker.CanUseWith(parms, groupKind) && (parms.raidArrivalMode != null || (d.arriveModes != null && d.arriveModes.Any((PawnsArrivalModeDef x) => x.Worker.CanUseWith(parms))))).TryRandomElementByWeight((RaidStrategyDef d) => d.Worker.SelectionWeight(map, parms.points), out var result);

            parms.raidStrategy = result;
            if (parms.raidStrategy == null)
            {
                Log.Error(string.Concat("No raid stategy found, defaulting to ImmediateAttack. Faction=", parms.faction.def.defName, ", points=", parms.points, ", groupKind=", groupKind, ", parms=", parms));
                parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
            }
        }
        public override void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            if (parms.raidStrategy != null)
            {
                return;
            }

            var map = (Map)parms.target;

            if (!(from d in DefDatabase <RaidStrategyDef> .AllDefs where d.Worker.CanUseWith(parms: parms, groupKind: groupKind) select d)
                .TryRandomElementByWeight(
                    weightSelector: d => d.Worker.SelectionWeight(map: map, basePoints: parms.points),
                    result: out parms.raidStrategy
                    ))
            {
                parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
            }
        }
Exemple #22
0
        public static List <Pawn> GenerateNeutralPawns(PawnGroupKindDef pawnGroupKind, IncidentParms parms)
        {
            if (PES_Settings.DebugModeOn)
            {
                Log.Message("-=PS=- GenerateNeutralPawns Start", false);
            }
            if (parms != null && parms.questTag != null)             //Lt. Bob - "Temporary" bypass fix? for Quest handling
            {
                Log.Message("-=PS=- GenerateNeutralPawns - questTag!=Null == " + parms.questTag);
            }

            IsIntercepting_PawnGeneration = GeneratorPatchFlag.Generate;

            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(pawnGroupKind, parms, true);
            List <Pawn>         list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, false).ToList <Pawn>();

            return(list);
        }
Exemple #23
0
        public static void ResolveRaidStrategy(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            if (parms.raidStrategy != null)
            {
                return;
            }
            Map map = (Map)parms.target;

            if (!(from d in DefDatabase <RaidStrategyDef> .AllDefs
                  where d.Worker.CanUseWith(parms, groupKind) && (parms.raidArrivalMode != null || (d.arriveModes != null && d.arriveModes.Any((PawnsArrivalModeDef x) => x.Worker.CanUseWith(parms))))
                  select d).TryRandomElementByWeight((RaidStrategyDef d) => d.Worker.SelectionWeight(map, parms.points), out parms.raidStrategy))
            {
                Log.Error("No raid stategy for " + parms.faction + " with points " + parms.points + ", groupKind=" + groupKind + "\nparms=" + parms);
                if (!Prefs.DevMode)
                {
                    parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
                }
            }
        }
Exemple #24
0
        public static void Postfix(IncidentParms parms, PawnGroupKindDef groupKind)
        {
            Map     map = (Map)parms.target;
            Faction fac = parms.faction;

            if (fac.def.GetModExtension <FactionDefExtension>() is FactionDefExtension ext && ext != null && ext.allowedStrategies?.Count > 0)
            {
                DefDatabase <RaidStrategyDef> .AllDefs.Where(d => d.Worker.CanUseWith(parms, groupKind) && ext.allowedStrategies.Contains(d) && d.arriveModes != null && d.arriveModes.Any(x => x.Worker.CanUseWith(parms)))
                .TryRandomElementByWeight(d => d.Worker.SelectionWeight(map, parms.points), out RaidStrategyDef result);

                parms.raidStrategy = result;

                if (parms.raidStrategy != null)
                {
                    return;
                }
                Log.Error("No raid stategy found, defaulting to ImmediateAttack. Faction=" + parms.faction.def.defName + ", points=" + parms.points + ", groupKind=" + groupKind + ", parms=" + parms);
                parms.raidStrategy = RaidStrategyDefOf.ImmediateAttack;
            }
        }
Exemple #25
0
        public override void Resolve(ResolveParams rp)
        {
            Map map = BaseGen.globalSettings.map;
            PawnGroupMakerParms pawnGroupMakerParms = rp.pawnGroupMakerParams;

            if (pawnGroupMakerParms == null)
            {
                pawnGroupMakerParms         = new PawnGroupMakerParms();
                pawnGroupMakerParms.tile    = map.Tile;
                pawnGroupMakerParms.faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
                pawnGroupMakerParms.points  = 250f;
            }
            PawnGroupKindDef groupKind = rp.pawnGroupKindDef ?? PawnGroupKindDefOf.Normal;

            foreach (Pawn current in PawnGroupMakerUtility.GeneratePawns(groupKind, pawnGroupMakerParms, true))
            {
                ResolveParams resolveParams = rp;
                resolveParams.singlePawnToSpawn = current;
                BaseGen.symbolStack.Push("pawn", resolveParams);
            }
        }
Exemple #26
0
        private float CheapestSapperCost(Faction faction, PawnGroupKindDef groupKind)
        {
            IEnumerable <PawnGroupMaker> enumerable = PawnGenOptionsWithLockpickers(faction, groupKind);

            if (!enumerable.Any())
            {
                Log.Error("Tried to get MinimumPoints for " + GetType().ToString() + " for faction " + faction.ToString() + " but the faction has no groups with sappers. groupKind=" + groupKind);
                return(99999f);
            }
            float num = 9999999f;

            foreach (PawnGroupMaker item in enumerable)
            {
                foreach (PawnGenOption item2 in item.options.Where((PawnGenOption op) => op.kind.canBeSapper))
                {
                    if (item2.Cost < num)
                    {
                        num = item2.Cost;
                    }
                }
            }
            return(num);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            Cthulhu.Utility.DebugReport("Cosmic Horror Raid Report: Trying execution");
            this.ResolveRaidPoints(parms);
            bool result = false;

            if (!this.TryResolveRaidFaction(parms))
            {
                Cthulhu.Utility.DebugReport("Cosmic Horror Raid Report: Failed to resolve faction");
                result = false;
            }
            else
            {
                PawnGroupKindDef combat = PawnGroupKindDefOf.Combat;
                this.ResolveRaidStrategy(parms, PawnGroupKindDefOf.Combat);
                this.ResolveRaidArriveMode(parms);
                if (!parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms))
                {
                    result = false;
                }
                else
                {
                    parms.points = IncidentWorker_Raid.AdjustedRaidPoints(parms.points, parms.raidArrivalMode,
                                                                          parms.raidStrategy, parms.faction, combat);

                    PawnGroupMakerParms defaultPawnGroupMakerParms =
                        IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms);

                    List <Pawn> list = PawnGroupMakerUtility
                                       .GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();
                    if (list.Count == 0)
                    {
                        Cthulhu.Utility.ErrorReport("Got no pawns spawning raid from parms " + parms);
                        result = false;
                    }
                    parms.raidArrivalMode.Worker.Arrive(list, parms);

                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.AppendLine("Points = " + parms.points.ToString("F0"));
                    foreach (Pawn current2 in list)
                    {
                        string str = (current2.equipment == null || current2.equipment.Primary == null)
                            ? "unarmed"
                            : current2.equipment.Primary.LabelCap;
                        stringBuilder.AppendLine(current2.KindLabel + " - " + str);
                    }
                    string       letterLabel  = this.GetLetterLabel(parms);
                    string       letterText   = this.GetLetterText(parms, list);
                    TaggedString letterLabelS = letterLabel;
                    TaggedString letterTextS  = letterText;
                    //string lalalal = this.GetRelatedPawnsInfoLetterText(parms);
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabelS, ref letterTextS,
                                                                        this.GetRelatedPawnsInfoLetterText(parms), true, true);
                    List <TargetInfo> list2 = new List <TargetInfo>();
                    if (parms.pawnGroups != null)
                    {
                        List <List <Pawn> > list3 = IncidentParmsUtility.SplitIntoGroups(list, parms.pawnGroups);
                        List <Pawn>         list4 = list3.MaxBy((List <Pawn> x) => x.Count);
                        if (list4.Any <Pawn>())
                        {
                            list2.Add(list4[0]);
                        }
                        for (int i = 0; i < list3.Count; i++)
                        {
                            if (list3[i] != list4)
                            {
                                if (list3[i].Any <Pawn>())
                                {
                                    list2.Add(list3[i][0]);
                                }
                            }
                        }
                    }
                    else if (list.Any <Pawn>())
                    {
                        list2.Add(list[0]);
                    }
                    Find.LetterStack.ReceiveLetter(letterLabel, letterText, this.GetLetterDef(), list2, parms.faction);
                    if (this.GetLetterDef() == LetterDefOf.ThreatBig)
                    {
                        //TaleRecorder.RecordTale(TaleDefOf. RaidArrived, new object[0]);
                    }
                    parms.raidStrategy.Worker.MakeLords(parms, list);
                    LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical);
                    if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.ShieldBelts))
                    {
                        for (int j = 0; j < list.Count; j++)
                        {
                            Pawn pawn2 = list[j];
                            if (pawn2.apparel.WornApparel.Any((Apparel ap) => ap is ShieldBelt))
                            {
                                LessonAutoActivator.TeachOpportunity(ConceptDefOf.ShieldBelts,
                                                                     OpportunityType.Critical);
                                break;
                            }
                        }
                    }
                    result = true;
                }
            }
            return(result);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            ResolveRaidPoints(parms);
            if (!TryResolveRaidFaction(parms))
            {
                return(false);
            }
            PawnGroupKindDef combat = PawnGroupKindDefOf.Combat;

            ResolveRaidStrategy(parms, combat);
            ResolveRaidArriveMode(parms);
            parms.raidStrategy.Worker.TryGenerateThreats(parms);
            if (!parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms))
            {
                return(false);
            }
            float points = parms.points;

            parms.points = AdjustedRaidPoints(parms.points, parms.raidArrivalMode, parms.raidStrategy, parms.faction, combat);
            RaidPatches.includeRaidToTheList = false;
            List <Pawn> list = parms.raidStrategy.Worker.SpawnThreats(parms);

            if (list == null)
            {
                list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms)).ToList();
                if (list.Count == 0)
                {
                    Log.Error("Got no pawns spawning raid from parms " + parms);
                    return(false);
                }
                parms.raidArrivalMode.Worker.Arrive(list, parms);
            }
            RaidPatches.includeRaidToTheList = true;

            GenerateRaidLoot(parms, points, list);
            TaggedString letterLabel = GetLetterLabel(parms);
            TaggedString letterText  = GetLetterText(parms, list);

            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabel, ref letterText, GetRelatedPawnsInfoLetterText(parms), informEvenIfSeenBefore: true);
            List <TargetInfo> list2 = new List <TargetInfo>();

            if (parms.pawnGroups != null)
            {
                List <List <Pawn> > list3 = IncidentParmsUtility.SplitIntoGroups(list, parms.pawnGroups);
                List <Pawn>         list4 = list3.MaxBy((List <Pawn> x) => x.Count);
                if (list4.Any())
                {
                    list2.Add(list4[0]);
                }
                for (int i = 0; i < list3.Count; i++)
                {
                    if (list3[i] != list4 && list3[i].Any())
                    {
                        list2.Add(list3[i][0]);
                    }
                }
            }
            else if (list.Any())
            {
                foreach (Pawn item in list)
                {
                    list2.Add(item);
                }
            }
            SendStandardLetter(letterLabel, letterText, GetLetterDef(), parms, list2);
            parms.raidStrategy.Worker.MakeLords(parms, list);
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical);
            if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.ShieldBelts))
            {
                for (int j = 0; j < list.Count; j++)
                {
                    if (list[j].apparel.WornApparel.Any((Apparel ap) => ap is ShieldBelt))
                    {
                        LessonAutoActivator.TeachOpportunity(ConceptDefOf.ShieldBelts, OpportunityType.Critical);
                        break;
                    }
                }
            }
            Find.TickManager.slower.SignalForceNormalSpeedShort();
            Find.StoryWatcher.statsRecord.numRaidsEnemy++;
            return(true);
        }
        // Token: 0x06000088 RID: 136 RVA: 0x00004224 File Offset: 0x00002424
        public static void Postfix()
        {
            //	Log.Message("GenerateImpliedDefs_PreResolve");

            PawnGroupKindDef pawnGroupKindDef = new PawnGroupKindDef();

            pawnGroupKindDef.defName     = "Hive_OgsOld_ExtraHives";
            pawnGroupKindDef.workerClass = typeof(PawnGroupKindWorker_Normal);
            DefGenerator.AddImpliedDef <PawnGroupKindDef>(pawnGroupKindDef);

            pawnGroupKindDef             = new PawnGroupKindDef();
            pawnGroupKindDef.defName     = "Tunneler_OgsOld_ExtraHives";
            pawnGroupKindDef.workerClass = typeof(PawnGroupKindWorker_Normal);
            DefGenerator.AddImpliedDef <PawnGroupKindDef>(pawnGroupKindDef);

            PawnsArrivalModeDef pawnsArrivalModeDef = new PawnsArrivalModeDef();

            pawnsArrivalModeDef.defName        = "EdgeTunnelIn_OgsOld_ExtraHives";
            pawnsArrivalModeDef.textEnemy      = "A group of {0} from {1} have tunneled in nearby.";
            pawnsArrivalModeDef.textFriendly   = "A group of friendly {0} from {1} have tunneled in nearby.";
            pawnsArrivalModeDef.textWillArrive = "{0_pawnsPluralDef} will tunnel in.";
            pawnsArrivalModeDef.workerClass    = typeof(OgsOld_ExtraHives.PawnsArrivalModeWorker_EdgeTunnel);

            /*
             * pawnsArrivalModeDef.selectionWeightCurve = new SimpleCurve();
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(300f,0f));
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(700f,0.3f));
             */
            DefGenerator.AddImpliedDef <PawnsArrivalModeDef>(pawnsArrivalModeDef);

            pawnsArrivalModeDef                = new PawnsArrivalModeDef();
            pawnsArrivalModeDef.defName        = "EdgeTunnelInGroups_OgsOld_ExtraHives";
            pawnsArrivalModeDef.textEnemy      = "Several separate groups of {0} from {1} have tunneled in nearby.";
            pawnsArrivalModeDef.textFriendly   = "Several separate groups of friendly {0} from {1} have tunneled in nearby.";
            pawnsArrivalModeDef.textWillArrive = "Several separate groups of {0_pawnsPluralDef} will tunnel in.";
            pawnsArrivalModeDef.workerClass    = typeof(OgsOld_ExtraHives.PawnsArrivalModeWorker_EdgeTunnelGroups);

            /*
             * pawnsArrivalModeDef.selectionWeightCurve = new SimpleCurve();
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(100f, 0f));
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(300f, 0.2f));
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(700f, 0.5f));
             * pawnsArrivalModeDef.pointsFactorCurve = new SimpleCurve();
             * pawnsArrivalModeDef.pointsFactorCurve.Add(new CurvePoint(0f, 0.9f));
             */
            DefGenerator.AddImpliedDef <PawnsArrivalModeDef>(pawnsArrivalModeDef);

            pawnsArrivalModeDef                = new PawnsArrivalModeDef();
            pawnsArrivalModeDef.defName        = "CenterTunnelIn_OgsOld_ExtraHives";
            pawnsArrivalModeDef.textEnemy      = "A group of {0} from {1} have tunneled in right on top of you!";
            pawnsArrivalModeDef.textFriendly   = "A group of friendly {0} from {1} have tunneled in right on top of you!";
            pawnsArrivalModeDef.textWillArrive = "{0_pawnsPluralDef} will tunnel in right on top of you.";
            pawnsArrivalModeDef.workerClass    = typeof(OgsOld_ExtraHives.PawnsArrivalModeWorker_CenterTunnel);

            /*
             * pawnsArrivalModeDef.selectionWeightCurve = new SimpleCurve();
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(300f, 0.0f));
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(1000f, 3.5f));
             * pawnsArrivalModeDef.pointsFactorCurve = new SimpleCurve();
             * pawnsArrivalModeDef.pointsFactorCurve.Add(new CurvePoint(0f, 0.75f));
             * pawnsArrivalModeDef.pointsFactorCurve.Add(new CurvePoint(5000f, 0.5f));
             */
            DefGenerator.AddImpliedDef <PawnsArrivalModeDef>(pawnsArrivalModeDef);

            pawnsArrivalModeDef                = new PawnsArrivalModeDef();
            pawnsArrivalModeDef.defName        = "RandomTunnelIn_OgsOld_ExtraHives";
            pawnsArrivalModeDef.textEnemy      = "A group of {0} from {1} have tunneled in. They are scattered all over the area!";
            pawnsArrivalModeDef.textFriendly   = "A group of friendly {0} from {1} have tunneled in. They are scattered all over the area!";
            pawnsArrivalModeDef.textWillArrive = "{0_pawnsPluralDef} will tunnel in.";
            pawnsArrivalModeDef.workerClass    = typeof(OgsOld_ExtraHives.PawnsArrivalModeWorker_RandomTunnel);

            /*
             * pawnsArrivalModeDef.selectionWeightCurve = new SimpleCurve();
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(300f, 0f));
             * pawnsArrivalModeDef.selectionWeightCurve.Add(new CurvePoint(1000f, 1.9f));
             * pawnsArrivalModeDef.pointsFactorCurve = new SimpleCurve();
             * pawnsArrivalModeDef.pointsFactorCurve.Add(new CurvePoint(0f, 0.7f));
             * pawnsArrivalModeDef.pointsFactorCurve.Add(new CurvePoint(5000f, 0.45f));
             */
            DefGenerator.AddImpliedDef <PawnsArrivalModeDef>(pawnsArrivalModeDef);

            ThingDef thingDef = new ThingDef();

            thingDef.defName                   = "InfestedMeteoriteIncoming_OgsOld_ExtraHives";
            thingDef.category                  = ThingCategory.Ethereal;
            thingDef.thingClass                = typeof(Skyfaller);
            thingDef.useHitPoints              = false;
            thingDef.drawOffscreen             = true;
            thingDef.tickerType                = TickerType.Normal;
            thingDef.altitudeLayer             = AltitudeLayer.Skyfaller;
            thingDef.drawerType                = DrawerType.RealtimeOnly;
            thingDef.skyfaller                 = new SkyfallerProperties();
            thingDef.label                     = "meteorite (incoming)";
            thingDef.size                      = new IntVec2(3, 3);
            thingDef.graphicData               = new GraphicData();
            thingDef.graphicData.texPath       = "Things/Skyfaller/Meteorite";
            thingDef.graphicData.graphicClass  = typeof(Graphic_Single);
            thingDef.graphicData.shaderType    = ShaderTypeDefOf.Transparent;
            thingDef.graphicData.drawSize      = new Vector2(10, 10);
            thingDef.skyfaller.shadowSize      = new Vector2(3, 3);
            thingDef.skyfaller.explosionRadius = 4;
            thingDef.skyfaller.explosionDamage = DamageDefOf.Bomb;
            thingDef.skyfaller.rotateGraphicTowardsDirection = true;
            thingDef.skyfaller.speed = 1.2f;
            DefGenerator.AddImpliedDef <ThingDef>(thingDef);

            thingDef               = new ThingDef();
            thingDef.defName       = "Tunneler_OgsOld_ExtraHives";
            thingDef.category      = ThingCategory.Ethereal;
            thingDef.thingClass    = typeof(OgsOld_ExtraHives.TunnelRaidSpawner);
            thingDef.useHitPoints  = false;
            thingDef.drawOffscreen = true;
            thingDef.alwaysFlee    = true;
            thingDef.tickerType    = TickerType.Normal;
            thingDef.altitudeLayer = AltitudeLayer.Skyfaller;
            thingDef.drawerType    = DrawerType.RealtimeOnly;
            thingDef.label         = "tunnel (incoming)";
            thingDef.size          = new IntVec2(1, 1);
            DefGenerator.AddImpliedDef <ThingDef>(thingDef);



            //PawnsArrivalModeDef

            /*
             * thingDef = new ThingDef();
             * thingDef.defName = "Hive_OgsOld_ExtraHives";
             * thingDef.category = ThingCategory.Ethereal;
             * thingDef.thingClass = typeof(OgsOld_ExtraHives.TunnelRaidSpawner);
             * thingDef.useHitPoints = false;
             * thingDef.drawOffscreen = true;
             * thingDef.alwaysFlee = true;
             * thingDef.tickerType = TickerType.Normal;
             * thingDef.altitudeLayer = AltitudeLayer.Skyfaller;
             * thingDef.drawerType = DrawerType.RealtimeOnly;
             * thingDef.label = "tunnel (incoming)";
             * thingDef.size = new IntVec2(3,3);
             * DefGenerator.AddImpliedDef<ThingDef>(thingDef);
             *
             */

            //RuleDef

            RuleDef ruleDef;

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveBaseMaker";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveBaseMaker";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_Hivebase());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveMoundMaker";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveMoundMaker";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_HiveBaseMoundMaker());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveClearChamber";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveClearChamber";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_ClearChamber());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveInterals";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveInterals";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_HiveInternals());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveOutdoorLighting";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveOutdoorLighting";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_OutdoorLightingHivebase());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveRandomCorpse";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveRandomCorpse";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_RandomCorpse());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveRandomDamage";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveRandomDamage";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_RandomDamage());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_HiveRandomHives";
            ruleDef.symbol    = "OgsOld_ExtraHives_HiveRandomHives";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_RandomHives());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_PawnGroup";
            ruleDef.symbol    = "OgsOld_ExtraHives_PawnGroup";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_PawnHiveGroup());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);

            ruleDef           = new RuleDef();
            ruleDef.defName   = "OgsOld_ExtraHives_Pawn";
            ruleDef.symbol    = "OgsOld_ExtraHives_Pawn";
            ruleDef.resolvers = new List <SymbolResolver>();
            ruleDef.resolvers.Add(new OgsOld_ExtraHives.GenStuff.SymbolResolver_SingleHivePawn());
            DefGenerator.AddImpliedDef <RuleDef>(ruleDef);
        }
Exemple #30
0
        public override void PassingParameters(ResolveParams rp)
        {
            string defChair = "DiningChair";
            string defLamp  = "Jecrell_GasLamp";

            ThingDef lampDef      = Cthulhu.Utility.IsIndustrialAgeLoaded() ? ThingDef.Named(defLamp) : ThingDefOf.TorchLamp;
            ThingDef lampStuffDef = Cthulhu.Utility.IsIndustrialAgeLoaded() ? ThingDefOf.Steel : null;

            Map      map      = BaseGen.globalSettings.map;
            bool     @bool    = Rand.Bool;
            bool     hasLamp  = false;
            ThingDef thingDef = ThingDefOf.SleepingSpot;
            ThingDef chairDef = ThingDef.Named(defChair);

            foreach (IntVec3 current in rp.rect)
            {
                if (@bool)
                {
                    if (current.x % 3 != 0 || current.z % 3 != 0)
                    {
                        continue;
                    }
                }
                else if (current.x % 3 != 0 || current.z % 3 != 0)
                {
                    continue;
                }
                Rot4 rot = (!@bool) ? Rot4.South : Rot4.West;
                if (!GenSpawn.WouldWipeAnythingWith(current, rot, thingDef, map, (Thing x) => x.def.category == ThingCategory.Building))
                {
                    bool flag = false;
                    foreach (IntVec3 current2 in GenAdj.CellsOccupiedBy(current, rot, thingDef.Size))
                    {
                        if (BaseGenUtility.AnyDoorAdjacentCardinalTo(current2, map))
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        ///Bed
                        ThingDef stuff = null;
                        if (thingDef.MadeFromStuff)
                        {
                            stuff = ThingDefOf.WoodLog;
                        }
                        Thing thing = ThingMaker.MakeThing(thingDef, stuff);
                        thing.SetFaction(rp.faction, null);

                        GenSpawn.Spawn(thing, current, map, rot);

                        if (thing != null)
                        {
                            if (thing.Spawned && thing.Position.InBounds(map))
                            {
                                CellRect thingRect = thing.OccupiedRect();
                                if (thingRect != null)
                                {
                                    thingRect = thingRect.ExpandedBy(1);
                                    List <IntVec3> possibleCells = new List <IntVec3>();
                                    possibleCells.AddRange(thingRect.GetEdgeCells(Rot4.North));
                                    possibleCells.AddRange(thingRect.GetEdgeCells(Rot4.South));
                                    possibleCells.AddRange(thingRect.GetEdgeCells(Rot4.East));
                                    possibleCells.AddRange(thingRect.GetEdgeCells(Rot4.West));
                                    possibleCells.Remove(Cthulhu.Utility.GetCornerPos(thingRect, 0));
                                    possibleCells.Remove(Cthulhu.Utility.GetCornerPos(thingRect, 1));
                                    possibleCells.Remove(Cthulhu.Utility.GetCornerPos(thingRect, 2));
                                    possibleCells.Remove(Cthulhu.Utility.GetCornerPos(thingRect, 3));

                                    IntVec3 spawnPos = IntVec3.Invalid;
                                    spawnPos = possibleCells.InRandomOrder <IntVec3>().FirstOrDefault((IntVec3 x) => x.InBounds(map) && x.Walkable(map));
                                    if (spawnPos != null)
                                    {
                                        possibleCells.Remove(spawnPos);
                                        Thing thing2 = ThingMaker.MakeThing(chairDef, ThingDefOf.WoodLog);
                                        thing2.SetFaction(rp.faction, null);
                                        GenSpawn.Spawn(thing2, spawnPos, map, rot.Opposite);
                                    }
                                    if (!hasLamp)
                                    {
                                        hasLamp  = true;
                                        spawnPos = possibleCells.FirstOrDefault((IntVec3 x) => x.InBounds(map) && x.Walkable(map));
                                        if (spawnPos != null)
                                        {
                                            possibleCells.Remove(spawnPos);
                                            Thing thing3 = ThingMaker.MakeThing(lampDef, lampStuffDef);
                                            thing3.SetFaction(rp.faction, null);
                                            GenSpawn.Spawn(thing3, spawnPos, map, rot.Opposite);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            //if (!Cthulhu.Utility.IsCosmicHorrorsLoaded())
            //{
            PawnGroupKindDef    groupKind           = rp.pawnGroupKindDef ?? PawnGroupKindDefOf.Combat;
            PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms()
            {
                faction = (from x in Find.FactionManager.AllFactions
                           where x.HostileTo(rp.faction) && x.def.pawnGroupMakers != null &&
                           x.def.pawnGroupMakers.Count > 0 &&
                           x.def.humanlikeFaction &&
                           IsCosmicHorrorFaction(x) == false &&
                           (x.def.pawnGroupMakers.FirstOrDefault((PawnGroupMaker y) => y.kindDef == PawnGroupKindDefOf.Combat) != null)
                           select x).RandomElement <Faction>(),
                tile   = map.Tile,
                points = 5000,
                generateFightersOnly = false,
            };
            int num = 0;

            foreach (Pawn current in PawnGroupMakerUtility.GeneratePawns(pawnGroupMakerParms, true))
            {
                num++;
                ResolveParams resolveParams = rp;
                resolveParams.singlePawnToSpawn = current;
                BaseGen.symbolStack.Push("pawn", resolveParams);
                if (num == 3)
                {
                    break;
                }
            }
            //}
            //else
            //{
            //    Faction tempFaction = Find.FactionManager.AllFactions.InRandomOrder<Faction>().FirstOrDefault((Faction z) => IsCosmicHorrorFaction(z));
            //    PawnGroupKindDef groupKind = rp.pawnGroupKindDef ?? PawnGroupKindDefOf.Combat;
            //    PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms()
            //    {
            //        faction = tempFaction,
            //        map = map,
            //        points = 5000,
            //        generateFightersOnly = false,
            //        generateMeleeOnly = false
            //    };
            //    int num = 0;
            //    foreach (Pawn current in PawnGroupMakerUtility.GeneratePawns(groupKind, pawnGroupMakerParms, true))
            //    {
            //        num++;
            //        ResolveParams resolveParams = rp;
            //        resolveParams.singlePawnToSpawn = current;
            //        resolveParams.singlePawnLord = null;
            //        BaseGen.symbolStack.Push("pawn", resolveParams);
            //        if (num == 3) break;
            //    }
            //}

            //List<int> corners = new List<int>() { 0, 1, 2, 3 };
            //foreach (int corner in corners.InRandomOrder<int>())
            //{
            //    IntVec3 loc = Cthulhu.Utility.GetCornerPos(rp.rect.ContractedBy(1), corner);
            //    if (!GenSpawn.WouldWipeAnythingWith(loc, Rot4.South, lampDef, map, (Thing x) => x.def.category == ThingCategory.Building))
            //    {
            //        ThingDef singleThingDef3 = (Cthulhu.Utility.IsIndustrialAgeLoaded()) ? lampDef : ThingDefOf.TorchLamp;
            //        Thing thing3 = ThingMaker.MakeThing(singleThingDef3, ThingDefOf.Steel);
            //        GenSpawn.Spawn(thing3, loc, map);
            //        break;
            //    }
            //}
        }