public override void Generate(Map map, GenStepParams parms)
        {
            Faction fac = this.forcedfaction != null?Find.FactionManager.FirstFactionOfDef(this.forcedfaction) : Find.FactionManager.RandomEnemyFaction(minTechLevel: TechLevel.Neolithic);

            parms.sitePart.site.SetFaction(fac);

            Lord defend = LordMaker.MakeNewLord(fac, new LordJob_DefendBase(fac, map.Center), map);
            IEnumerable <Pawn> pawns = this.GeneratePawns(map, fac, parms);

            foreach (Pawn pawn in pawns)
            {
                IntVec3 loc;
                if (spawnOnEdge)
                {
                    if (!CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Standable(map) && !x.Fogged(map) && map.reachability.CanReachColony(x), map, CellFinder.EdgeRoadChance_Ignore, out loc))
                    {
                        pawn.Discard();
                        break;
                    }
                }
                else if (!CellFinder.TryFindRandomSpawnCellForPawnNear(map.Center, map, out loc, 2))
                {
                    pawn.Discard();
                    break;
                }
                GenSpawn.Spawn(pawn, loc, map);
                defend.AddPawn(pawn);
            }

            if (!pawns.Any())
            {
                return;
            }
        }
Exemplo n.º 2
0
        public static Pawn SpawnInhabitant(IntVec3 pos, Map map, Lord lord, PawnKindDef kind = null)
        {
            pos = FindPawnSpot(pos, map);

            var pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(
                                                      kind ?? map.ParentFaction.RandomPawnKind(),
                                                      map.ParentFaction,
                                                      PawnGenerationContext.NonPlayer,
                                                      map.Tile,
                                                      mustBeCapableOfViolence: true,
                                                      forceGenerateNewPawn: true, /////
                                                      inhabitant: true
                                                      ));

            lord?.AddPawn(pawn);
            GenSpawn.Spawn(pawn, pos, map);

            if (pawn.guilt == null)
            {
                pawn.guilt = new Pawn_GuiltTracker(pawn);
            }
            pawn.guilt.Notify_Guilty(0);

            return(pawn);
        }
Exemplo n.º 3
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     if (!respawningAfterLoad)
     {
         CalculateNextEggSpawnTick();
         gender = Gender.Female;
         if (Faction == null)
         {
             SetFaction(HiveUtility.GetInsectFaction(this));
         }
         if (!hiveLocation.IsValid)
         {
             hiveLocation = Position;
             IntVec3 loc;
             if (InfestationCellFinder.TryFindCell(out loc, map))
             {
                 hiveLocation = loc;
             }
         }
         spawnedInsects.Add(this);
         Lord lord = Lord;
         if (lord == null)
         {
             lord = CreateNewLord();
         }
         lord.AddPawn(this);
     }
 }
Exemplo n.º 4
0
        public void SendRaid()
        {
            if (!TryFindSpawnSpot(Map, out IntVec3 spawnSpot))
            {
                return;
            }

            PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms
            {
                faction = Faction,
                points  = Rand.Range(1800, 2400),
                generateFightersOnly = true,
                groupKind            = PawnGroupKindDefOf.Combat,
                raidStrategy         = RaidStrategyDefOf.ImmediateAttack
            };

            LordJob lordJob = new LordJob_AssaultColony(Faction, canKidnap: false, canTimeoutOrFlee: false, canSteal: false);
            Lord    lord    = LordMaker.MakeNewLord(Faction, lordJob, Map);

            lord.numPawnsLostViolently = int.MaxValue;

            IEnumerable <Pawn> pawns = PawnGroupMakerUtility.GeneratePawns(pawnGroupMakerParms);

            foreach (var p in pawns)
            {
                GenSpawn.Spawn(p, spawnSpot, Map);

                lord.AddPawn(p);
            }

            Find.LetterStack.ReceiveLetter("DoomsdayContrAttackTitle".Translate(), "DoomsdayContrAttack".Translate(), LetterDefOf.ThreatBig);

            RaidSent = true;
        }
Exemplo n.º 5
0
        private void SpawnMobs()
        {
            CheckList();

            if (spawnedMobs.Count >= 25)
            {
                return;
            }

            int count = Rand.Range(2, 4);

            lord = LordMaker.MakeNewLord(TribalFaction, new LordJob_AssaultColony(TribalFaction), Map);

            PawnGenerationRequest request = new PawnGenerationRequest(PawnKindDefOfLocal.Tribal_Warrior, TribalFaction, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, false, 1f, false, true, true, false, false, false, false, false, 0, null, 1, null, null, null, null);

            for (int i = 0; i < count; i++)
            {
                if (spawnedMobs.Count >= 25)
                {
                    return;
                }

                Pawn pawn = PawnGenerator.GeneratePawn(request);
                spawnedMobs.Add(pawn);
                GenSpawn.Spawn(pawn, this.Position, Map);
                lord.AddPawn(pawn);
            }
        }
        private void GenerateAndSpawnPawns(Faction faction, IncidentParms parms, IntVec3 spot)
        {
            Map map = (Map)parms.target;

            LordJob lordJob = new LordJob_AssaultColony(faction, canKidnap: true, canTimeoutOrFlee: false, true);
            Lord    lord    = LordMaker.MakeNewLord(faction, lordJob, map);

            PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms
            {
                faction = faction,
                points  = Mathf.Clamp(parms.points / 2, 0, parms.points),
                generateFightersOnly = true,
                groupKind            = PawnGroupKindDefOf.Combat,
                raidStrategy         = RaidStrategyDefOf.ImmediateAttack,
                forceOneIncap        = true
            };

            IEnumerable <Pawn> pawns = PawnGroupMakerUtility.GeneratePawns(pawnGroupMakerParms);

            foreach (var pawn in pawns)
            {
                IntVec3 loc = CellFinder.RandomSpawnCellForPawnNear(spot, map);
                GenSpawn.Spawn(pawn, loc, map, Rot4.Random);
                lord.AddPawn(pawn);
            }
        }
Exemplo n.º 7
0
        private bool TryConvertOnePawnToSmallTrader(List <Pawn> pawns, Faction faction)
        {
            Pawn pawn = pawns.RandomElement <Pawn>();
            Lord lord = pawn.GetLord();

            pawn.mindState.wantsToTradeWithColony = true;
            PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, true);
            TraderKindDef traderKindDef = IncidentWorker_SoraGoodseller.SoraTraderKindDef;

            pawn.trader.traderKind = traderKindDef;
            pawn.inventory.DestroyAll(DestroyMode.Vanish);
            foreach (Thing current in this.GenerateTraderThings(traderKindDef))
            {
                Pawn pawn2 = current as Pawn;
                if (pawn2 != null)
                {
                    if (pawn2.Faction != pawn.Faction)
                    {
                        pawn2.SetFaction(pawn.Faction, null);
                    }
                    IntVec3 loc = CellFinder.RandomClosewalkCellNear(pawn.Position, 5);
                    GenSpawn.Spawn(pawn2, loc);
                    lord.AddPawn(pawn2);
                }
                else if (!pawn.inventory.container.TryAdd(current))
                {
                    current.Destroy(DestroyMode.Vanish);
                }
            }
            if (!pawn.inventory.container.Any((Thing x) => x.def.IsNutritionGivingIngestible && x.def.ingestible.preferability >= FoodPreferability.MealAwful))
            {
                PawnInventoryGenerator.GiveRandomFood(pawn);
            }
            return(true);
        }
Exemplo n.º 8
0
        public override void CompTick()
        {
            base.CompTick();
            if (!AlphaAnimalsEvents_Mod.settings.flagAlphaMechanoidsSappers)
            {
                if (parent.Map != null)
                {
                    PawnGenerationRequest request = new PawnGenerationRequest(PawnKindDef.Named(Props.defToChangeTo), Find.FactionManager.FirstFactionOfDef(FactionDefOf.Mechanoid), PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 1f, false, true, true, false, false);
                    Pawn pawn = PawnGenerator.GeneratePawn(request);
                    GenSpawn.Spawn(pawn, this.parent.Position, parent.Map, WipeMode.Vanish);

                    Lord lord = null;
                    if (pawn.Map.mapPawns.SpawnedPawnsInFaction(Faction.OfMechanoids).Any((Pawn p) => p != pawn))
                    {
                        lord = ((Pawn)GenClosest.ClosestThing_Global(pawn.Position, pawn.Map.mapPawns.SpawnedPawnsInFaction(Faction.OfMechanoids), 99999f, (Thing p) => p != pawn && ((Pawn)p).GetLord() != null, null)).GetLord();
                    }
                    if (lord == null)
                    {
                        LordJob_DefendPoint lordJob = new LordJob_DefendPoint(pawn.Position, null, false, true);
                        lord = LordMaker.MakeNewLord(Faction.OfMechanoids, lordJob, Find.CurrentMap, null);
                    }
                    lord.AddPawn(pawn);


                    this.parent.Destroy();
                }
            }
        }
Exemplo n.º 9
0
        private static void SpawnPawn()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (PawnKindDef item in DefDatabase <PawnKindDef> .AllDefs.OrderBy((PawnKindDef kd) => kd.defName))
            {
                PawnKindDef localKindDef = item;
                list.Add(new DebugMenuOption(localKindDef.defName, DebugMenuOptionMode.Tool, delegate
                {
                    Faction faction = FactionUtility.DefaultFactionFrom(localKindDef.defaultFactionType);
                    Pawn newPawn    = PawnGenerator.GeneratePawn(localKindDef, faction);
                    GenSpawn.Spawn(newPawn, UI.MouseCell(), Find.CurrentMap);
                    if (faction != null && faction != Faction.OfPlayer)
                    {
                        Lord lord = null;
                        if (newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction).Any((Pawn p) => p != newPawn))
                        {
                            lord = ((Pawn)GenClosest.ClosestThing_Global(newPawn.Position, newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction), 99999f, (Thing p) => p != newPawn && ((Pawn)p).GetLord() != null)).GetLord();
                        }
                        if (lord == null)
                        {
                            LordJob_DefendPoint lordJob = new LordJob_DefendPoint(newPawn.Position);
                            lord = LordMaker.MakeNewLord(faction, lordJob, Find.CurrentMap);
                        }
                        lord.AddPawn(newPawn);
                    }
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
Exemplo n.º 10
0
        private bool TrySpawnPawn(out Pawn pawn)
        {
            if (!this.canSpawnPawns)
            {
                pawn = null;
                return(false);
            }
            float curPoints = this.SpawnedPawnsPoints;
            IEnumerable <PawnKindDef> source = from x in Hive.spawnablePawnKinds
                                               where curPoints + x.combatPower <= 500f
                                               select x;
            PawnKindDef kindDef;

            if (!source.TryRandomElement(out kindDef))
            {
                pawn = null;
                return(false);
            }
            pawn = PawnGenerator.GeneratePawn(kindDef, base.Faction);
            this.spawnedPawns.Add(pawn);
            GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(base.Position, base.Map, 2, null), base.Map, WipeMode.Vanish);
            Lord lord = this.Lord;

            if (lord == null)
            {
                lord = this.CreateNewLord();
            }
            lord.AddPawn(pawn);
            SoundDefOf.Hive_Spawn.PlayOneShot(this);
            return(true);
        }
Exemplo n.º 11
0
        private static void GenerateInsects(ref OG_OutpostData outpostData)
        {
            int insectsNumber = Rand.Range(15, 25);

            if (Rand.Value < 0.1f)
            {
                // Just a free outpost if player get control of it fast enough.
                return;
            }

            IntVec3 spawnCell = outpostData.areaSouthWestOrigin + new IntVec3(OG_BigOutpost.areaSideLength / 2, 0, OG_BigOutpost.areaSideLength / 2);
            Lord    lord      = LordMaker.MakeNewLord(Faction.OfInsects, new LordJob_DefendPoint(spawnCell));

            List <PawnKindDef> list = new List <PawnKindDef>();

            list.Add(PawnKindDefOf.Megascarab);
            list.Add(PawnKindDefOf.Spelopede);
            list.Add(PawnKindDefOf.Megaspider);
            for (int insectIndex = 0; insectIndex < insectsNumber; insectIndex++)
            {
                PawnKindDef kindDef = list.RandomElement();
                Pawn        insect  = PawnGenerator.GeneratePawn(kindDef, Faction.OfInsects);
                GenSpawn.Spawn(insect, CellFinder.RandomClosewalkCellNear(spawnCell, 10));
                lord.AddPawn(insect);
            }
        }
        public override void CompTick()
        {
            base.CompTick();
            if (!TacticalMechanoids_Settings.MechanoidIsEnabled(Props.defToChangeFrom))
            {
                if (parent.Map != null)
                {
                    for (int i = 0; i < Props.numToSpawn; i++)
                    {
                        PawnGenerationRequest request = new PawnGenerationRequest(PawnKindDef.Named(Props.defToChangeTo), Find.FactionManager.FirstFactionOfDef(FactionDefOf.Mechanoid), PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 1f, false, true, true, false, false);
                        Pawn pawn = PawnGenerator.GeneratePawn(request);
                        GenSpawn.Spawn(pawn, this.parent.Position, parent.Map, WipeMode.Vanish);

                        Lord lord = null;
                        if (this.parent is Pawn parentPawn)
                        {
                            lord = parentPawn.GetLord();
                        }
                        if (lord == null)
                        {
                            LordJob_DefendPoint lordJob = new LordJob_DefendPoint(pawn.Position, null, false, true);
                            lord = LordMaker.MakeNewLord(Faction.OfMechanoids, lordJob, Find.CurrentMap, null);
                        }
                        lord.AddPawn(pawn);
                    }


                    this.parent.Destroy();
                }
            }
        }
Exemplo n.º 13
0
        public void TransferColonists(bool toPlayer)
        {
            if (toPlayer)
            {
                foreach (var p in friendlyPawns)
                {
                    if (p != null && !p.Dead)
                    {
                        p.SetFaction(Faction.OfPlayer);
                        p.playerSettings.hostilityResponse = HostilityResponseMode.Attack;
                    }
                }
            }
            else
            {
                Lord lord = LordMaker.MakeNewLord(settlement.Faction, new LordJob_DefendBase(settlement.Faction, settlement.Map.Center), settlement.Map);

                foreach (var p in friendlyPawns)
                {
                    if (p != null)
                    {
                        p.SetFaction(settlement.Faction);

                        if (!p.Dead && !p.Downed)
                        {
                            lord.AddPawn(p);
                        }
                    }
                }
            }
        }
Exemplo n.º 14
0
        public static List <Pawn> GenerateFighter(float points, Lord lord, List <PawnKindDef> kindDefs, Map map, Faction faction, IntVec3 vec3, bool toList = false)
        {
            Pawn        fighter = new Pawn();
            List <Pawn> pawns   = new List <Pawn>();
            PawnKindDef def     = new PawnKindDef();

            while (points > 0)
            {
                PawnGenerationRequest generationRequest = new PawnGenerationRequest(kindDefs.Where(x => x.RaceProps.Humanlike).TryRandomElementByWeight(x => x.combatPower, out def) ? def : null, faction, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true);

                fighter = PawnGenerator.GeneratePawn(generationRequest);
                fighter.mindState.canFleeIndividual = false;
                if (fighter.equipment != null && fighter.equipment.Primary != null && fighter.equipment.Primary.def.thingSetMakerTags != null && fighter.equipment.Primary.def.thingSetMakerTags.Contains("SingleUseWeapon"))//.Where(x=> x.def.IsWeaponUsingProjectiles && x.def.thingSetMakerTags.Contains("SingleUseWeapon")).Any())
                {
                    fighter.equipment.Primary.Destroy();
                    fighter.equipment.AddEquipment((ThingWithComps)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("Gun_Revolver")));
                }
                points -= fighter.kindDef.combatPower;

                if (!toList)
                {
                    lord.AddPawn(fighter);
                    GenSpawn.Spawn(fighter, vec3, map);
                    vec3 = fighter.RandomAdjacentCell8Way();
                    vec3.ClampInsideMap(map);
                    map.mapPawns.UpdateRegistryForPawn(fighter);
                }
                else
                {
                    pawns.Add(fighter);
                }
            }
            return(pawns);
        }
Exemplo n.º 15
0
        // Token: 0x0600267E RID: 9854 RVA: 0x00124538 File Offset: 0x00122938
        private bool TrySpawnPawn(out Pawn pawn)
        {
            if (!this.canSpawnPawns)
            {
                pawn = null;
                return(false);
            }
            float curPoints = this.SpawnedPawnsPoints;
            IEnumerable <PawnKindDef> source = from x in spawnablePawnKinds
                                               where curPoints + x.combatPower <= MaxSpawnedPawnsPoints
                                               select x;

            if (!source.TryRandomElement(out PawnKindDef kindDef))
            {
                pawn = null;
                return(false);
            }
            if (!this.spawnedPawns.Any(x => x.def != XenomorphRacesDefOf.RRY_Xenomorph_Drone))
            {
                kindDef = XenomorphDefOf.RRY_Xenomorph_Drone;
            }
            pawn = PawnGenerator.GeneratePawn(kindDef, base.Faction);
            this.spawnedPawns.Add(pawn);
            GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(base.Position, base.Map, 2, null), base.Map, WipeMode.Vanish);
            Lord lord = this.Lord;

            if (lord == null)
            {
                lord = this.CreateNewLord();
            }
            pawn.xenomorph().HiveLoc = this.Position;
            lord.AddPawn(pawn);
            SoundDefOf.Hive_Spawn.PlayOneShot(this);
            return(true);
        }
        private void AssaultColony()
        {
            faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, canSendLetter: false);
            for (int i = 0; i < pawns.Count; i++)
            {
                pawns[i].GetLord()?.Notify_PawnLost(pawns[i], PawnLostCondition.ForcedByQuest);
            }
            for (int j = 0; j < pawns.Count; j++)
            {
                pawns[j].SetFaction(faction);
                if (!pawns[j].Awake())
                {
                    RestUtility.WakeUp(pawns[j]);
                }
            }
            Lord lord = LordMaker.MakeNewLord(faction, new LordJob_AssaultColony(faction), mapParent.Map);

            for (int k = 0; k < pawns.Count; k++)
            {
                if (!pawns[k].Dead)
                {
                    lord.AddPawn(pawns[k]);
                }
            }
            Complete();
        }
Exemplo n.º 17
0
        public PawnSummoned SpawnPawn(SpawnThings spawnables, Faction faction)
        {
            var newPawn = (PawnSummoned)PawnGenerator.GeneratePawn(spawnables.kindDef, faction);

            newPawn.Spawner   = Caster;
            newPawn.Temporary = spawnables.temporary;
            if (newPawn.Faction != Faction.OfPlayerSilentFail && this?.Caster?.Faction is Faction f)
            {
                newPawn.SetFaction(f);
            }
            GenSpawn.Spawn(newPawn, PositionHeld, Find.CurrentMap);
            if (faction != null && faction != Faction.OfPlayer)
            {
                Lord lord = null;
                if (newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction).Any(p => p != newPawn))
                {
                    Predicate <Thing> validator = p => p != newPawn && ((Pawn)p).GetLord() != null;
                    var p2 = (Pawn)GenClosest.ClosestThing_Global(newPawn.Position,
                                                                  newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction), 99999f, validator);
                    lord = p2.GetLord();
                }
                if (lord == null)
                {
                    var lordJob = new LordJob_DefendPoint(newPawn.Position);
                    lord = LordMaker.MakeNewLord(faction, lordJob, Find.CurrentMap, null);
                }
                lord.AddPawn(newPawn);
            }
            return(newPawn);
        }
Exemplo n.º 18
0
        private bool TrySpawnPawn(out Pawn pawn)
        {
            List <PawnKindDef> list = new List <PawnKindDef>();

            list.Add(PawnKindDef.Named("Terrorworm"));
            list.Add(PawnKindDef.Named("Visceral"));
            float curPoints = this.SpawnedPawnsPoints;
            IEnumerable <PawnKindDef> source =
                from x in list
                where curPoints + x.combatPower <= 500f
                select x;
            PawnKindDef kindDef;

            if (!source.TryRandomElement(out kindDef))
            {
                pawn = null;
                return(false);
            }
            pawn = PawnGenerator.GeneratePawn(kindDef, this.Faction);
            PawnUtility.TrySpawnHatchedOrBornPawn(pawn, this);
            //GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(base.Position, base.Map, 4, null), base.Map);
            this.spawnedPawns.Add(pawn);
            Lord lord = this.Lord;

            if (lord == null)
            {
                lord = this.CreateNewLord();
            }
            lord.AddPawn(pawn);
            return(true);
        }
 public static bool switchLord(this Pawn p, Lord L)
 {
     Log.Message(string.Format("trying to switch {0} to {1}", p.LabelShortCap, L));
     if (p.GetLord() != null && p.GetLord() is Lord l)
     {
         Log.Message(string.Format("{0} currently belongs to {1}", p.LabelShortCap, l));
         if (l.ownedPawns.Count > 0)
         {
             Log.Message(string.Format("removing {0} from {1}", p.LabelShortCap, l));
             l.ownedPawns.Remove(p);
             Log.Message(string.Format("removed {0} from {1}: {2}", p.LabelShortCap, l, p.GetLord() == null));
         }
         if (l.ownedPawns.Count == 0)
         {
             Log.Message(string.Format("removed {0} final pawn, removing l", l));
             l.lordManager.RemoveLord(l);
             Log.Message(string.Format("removed l: {0}", l == null));
         }
         Log.Message(string.Format("{0} currently has lord: {1}", p.LabelShortCap, p.GetLord() == null));
     }
     Log.Message(string.Format("adding {0} to {1}", p.LabelShortCap, L));
     L.AddPawn(p);
     Log.Message(string.Format("addied {0} to {1} = {2}", p.LabelShortCap, L, p.GetLord() == L));
     return(p.GetLord() == L);
 }
Exemplo n.º 20
0
        private bool TrySpawnPawn(out Pawn pawn)
        {
            if (!this.canSpawnPawns)
            {
                pawn = null;
                return(false);
            }
            List <PawnKindDef> list = new List <PawnKindDef>();

            list.Add(PawnKindDefOf.Megascarab);
            list.Add(PawnKindDefOf.Spelopede);
            list.Add(PawnKindDefOf.Megaspider);
            float curPoints = this.SpawnedPawnsPoints;
            IEnumerable <PawnKindDef> source = from x in list
                                               where curPoints + x.combatPower <= 500.0
                                               select x;
            PawnKindDef kindDef = default(PawnKindDef);

            if (!source.TryRandomElement <PawnKindDef>(out kindDef))
            {
                pawn = null;
                return(false);
            }
            pawn = PawnGenerator.GeneratePawn(kindDef, base.Faction);
            GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(base.Position, base.Map, 4, null), base.Map);
            this.spawnedPawns.Add(pawn);
            Lord lord = this.Lord;

            if (lord == null)
            {
                lord = this.CreateNewLord();
            }
            lord.AddPawn(pawn);
            return(true);
        }
Exemplo n.º 21
0
        private static void SpawnPawnQuality()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (PawnKindDef item in DefDatabase <PawnKindDef> .AllDefs.Where(x => x.GetModExtension <DefExtension_Hybrid>() != null || x.race.tradeTags?.Contains("AnimalGeneticMechanoid") == true).OrderBy((PawnKindDef kd) => kd.defName))
            {
                PawnKindDef localKindDef = item;
                list.Add(new DebugMenuOption(localKindDef.defName, DebugMenuOptionMode.Tool, delegate
                {
                    Faction faction = FactionUtility.DefaultFactionFrom(localKindDef.defaultFactionType);
                    Pawn newPawn    = PawnGenerator.GeneratePawn(localKindDef, faction);
                    GenSpawn.Spawn(newPawn, UI.MouseCell(), Find.CurrentMap);
                    CompHybrid compHybrid = newPawn.TryGetComp <CompHybrid>();
                    if (compHybrid != null)
                    {
                        compHybrid.quality = QualityUtility.GenerateQualityRandomEqualChance();
                    }
                    if (faction != null && faction != Faction.OfPlayer)
                    {
                        Lord lord = null;
                        if (newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction).Any((Pawn p) => p != newPawn))
                        {
                            lord = ((Pawn)GenClosest.ClosestThing_Global(newPawn.Position, newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction), 99999f, (Thing p) => p != newPawn && ((Pawn)p).GetLord() != null)).GetLord();
                        }
                        if (lord == null)
                        {
                            LordJob_DefendPoint lordJob = new LordJob_DefendPoint(newPawn.Position);
                            lord = LordMaker.MakeNewLord(faction, lordJob, Find.CurrentMap);
                        }
                        lord.AddPawn(newPawn);
                    }
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
        private bool TrySpawnPawn(out Pawn pawn, Map map)
        {
            var kindDef = (Cthulhu.Utility.IsCosmicHorrorsLoaded() ? PawnKindDef.Named("ROM_DarkYoung") : PawnKindDefOf.Megaspider);

            pawn = PawnGenerator.GeneratePawn(kindDef, base.Faction);
            try
            {
                IntVec3 pos = base.Position;
                for (int i = 0; i < 3; i++)
                {
                    pos += GenAdj.CardinalDirections[2];
                }
                GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(pos, map, 1), map); //
                this.spawnedPawns.Add(pawn);
                if (this.Faction != Faction.OfPlayer)
                {
                    if (lord == null)
                    {
                        lord = this.CreateNewLord();
                    }
                    lord.AddPawn(pawn);
                }

                Messages.Message("Cults_NewDarkYoung".Translate(), pawn, MessageTypeDefOf.PositiveEvent);
                return(true);
            }
            catch
            {
                return(true);
            }
        }
Exemplo n.º 23
0
        private void AddPawnToStock(Pawn newPawn)
        {
            if (!newPawn.Spawned)
            {
                GenSpawn.Spawn(newPawn, pawn.Position, pawn.Map);
            }
            if (newPawn.Faction != pawn.Faction)
            {
                newPawn.SetFaction(pawn.Faction);
            }
            if (newPawn.RaceProps.Humanlike)
            {
                newPawn.kindDef = PawnKindDefOf.Slave;
            }
            Lord lord = pawn.GetLord();

            if (lord == null)
            {
                newPawn.Destroy();
                Log.Error("Tried to sell pawn " + newPawn + " to " + pawn + ", but " + pawn + " has no lord. Traders without lord can't buy pawns.");
            }
            else
            {
                if (newPawn.RaceProps.Humanlike)
                {
                    soldPrisoners.Add(newPawn);
                }
                lord.AddPawn(newPawn);
            }
        }
Exemplo n.º 24
0
        private bool TryConvertOnePawnToSmallTrader(Pawn pawn, Faction faction, Map map)
        {
            Lord lord = pawn.GetLord();

            pawn.mindState.wantsToTradeWithColony = true;
            PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, true);
            TraderKindDef traderKindDef = DefOfs.C_TraderKindDefs.Visitor_IoM_Wanderer;

            pawn.trader.traderKind = traderKindDef;
            pawn.inventory.DestroyAll(DestroyMode.Vanish);
            foreach (Thing current in TraderStockGenerator.GenerateTraderThings(traderKindDef, map))
            {
                Pawn pawn2 = current as Pawn;
                if (pawn2 != null)
                {
                    if (pawn2.Faction != pawn.Faction)
                    {
                        pawn2.SetFaction(pawn.Faction, null);
                    }
                    IntVec3 loc = CellFinder.RandomClosewalkCellNear(pawn.Position, map, 5);
                    GenSpawn.Spawn(pawn2, loc, map);
                    lord.AddPawn(pawn2);
                }
                else if (!pawn.inventory.innerContainer.TryAdd(current, true))
                {
                    current.Destroy(DestroyMode.Vanish);
                }
            }
            PawnInventoryGenerator.GiveRandomFood(pawn);
            return(true);
        }
Exemplo n.º 25
0
        // Token: 0x06005359 RID: 21337 RVA: 0x001BDC90 File Offset: 0x001BBE90
        private bool TrySpawnPawn(out Pawn pawn, PawnKindDef kindDef = null)
        {
            if (!this.canSpawnPawns)
            {
                pawn = null;
                return(false);
            }
            if (!this.Props.chooseSingleTypeToSpawn)
            {
                this.chosenKind = kindDef != null ? kindDef : this.RandomPawnKindDef();
            }
            if (this.chosenKind == null)
            {
                //	Log.Message("TrySpawnPawn chosenKind == null return false");
                pawn = null;
                return(false);
            }
            Faction faction = null;


            if (parent.Faction != null)
            {
                faction = parent.Faction;
            }
            else
            {
                Log.Warning("Warning faction not found");
                if (HiveExtension?.Faction != null)
                {
                    faction = Find.FactionManager.FirstFactionOfDef(HiveExtension.Faction);
                }
            }
            if (parent.Faction == null)
            {
                parent.SetFaction(faction);
            }
            pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(this.chosenKind, faction, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 1f, false, true, true, true, false, false, false, false, 0f, null, 1f, null, null, null, null, null, new float?(this.chosenKind.race.race.lifeStageAges.Last().minAge), null, null, null, null, null, null));

            this.spawnedPawns.Add(pawn);
            GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(this.parent.OccupiedRect().AdjacentCells.RandomElement(), this.parent.Map, this.Props.pawnSpawnRadius, null), this.parent.Map, WipeMode.Vanish);
            Lord lord = this.Lord;

            if (lord == null)
            {
                //	Log.Message("make new lord of "+ this.parent.Faction +" for "+this.parent+" agro "+aggressive+" radius "+Props.defendRadius+" Job: "+this.Props.lordJob);
                lord = CreateNewLord(this.parent, this.aggressive, this.Props.defendRadius, this.Props.lordJob);
            }
            lord.AddPawn(pawn);
            if (this.Props.spawnSound != null)
            {
                this.Props.spawnSound.PlayOneShot(this.parent);
            }
            if (this.pawnsLeftToSpawn > 0)
            {
                this.pawnsLeftToSpawn--;
            }
            this.SendMessage();
            return(true);
        }
Exemplo n.º 26
0
        public static TMPawnSummoned SpawnPawn(Pawn caster, SpawnThings spawnables, Faction faction, IntVec3 position, int duration)
        {
            TMPawnSummoned newPawn = (TMPawnSummoned)PawnGenerator.GeneratePawn(spawnables.kindDef, faction);

            newPawn.validSummoning = true;
            newPawn.Spawner        = caster;
            newPawn.Temporary      = spawnables.temporary;
            newPawn.TicksToDestroy = duration;
            //Faction val = default(Faction);
            //int num;
            //if (newPawn.Faction != Faction.OfPlayerSilentFail)
            //{
            //    Faction obj = null;

            //    obj = ((caster != null) ? caster.Faction : null);

            //    val = obj;
            //    num = ((obj != null) ? 1 : 0);
            //}
            //else
            //{
            //    num = 0;
            //}
            //if (num != 0)
            //{
            //    newPawn.SetFaction(val, null);
            //}
            GenSpawn.Spawn(newPawn, position, Find.CurrentMap, 0);

            if (newPawn.Faction != null && newPawn.Faction != Faction.OfPlayer)
            {
                Lord lord = null;
                if (newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction).Any((Pawn p) => p != newPawn))
                {
                    Predicate <Thing> validator = (Thing p) => p != newPawn && ((Pawn)p).GetLord() != null;
                    Pawn p2 = (Pawn)GenClosest.ClosestThing_Global(newPawn.Position, newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction), 99999f, validator, null);
                    lord = p2.GetLord();
                }
                bool flag4 = lord == null;
                if (flag4)
                {
                    LordJob_DefendPoint lordJob = new LordJob_DefendPoint(newPawn.Position);
                    lord = LordMaker.MakeNewLord(faction, lordJob, newPawn.Map, null);
                }
                else
                {
                    try
                    {
                        newPawn.mindState.duty = new PawnDuty(DutyDefOf.Defend);
                    }
                    catch
                    {
                        Log.Message("error attempting to assign a duty to summoned object");
                    }
                }
                lord.AddPawn(newPawn);
            }
            return(newPawn);
        }
Exemplo n.º 27
0
        private static bool TryConvertOnePawnToSmallTrader(List <Pawn> pawns, Faction faction)
        {
            if (faction.def.visitorTraderKinds.NullOrEmpty())
            {
                return(false);
            }
            Pawn pawn = pawns.RandomElement();
            Lord lord = pawn.GetLord();

            pawn.mindState.wantsToTradeWithColony = true;
            PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, true);
            TraderKindDef traderKindDef = faction.def.visitorTraderKinds.RandomElement();

            pawn.trader.traderKind = traderKindDef;
            pawn.inventory.DestroyAll();

            pawn.TryGiveBackpack();

            foreach (Thing current in TraderStockGenerator.GenerateTraderThings(traderKindDef, lord.Map))
            {
                Pawn slave = current as Pawn;
                if (slave != null)
                {
                    if (slave.Faction != pawn.Faction)
                    {
                        slave.SetFaction(pawn.Faction);
                    }
                    IntVec3 loc = CellFinder.RandomClosewalkCellNear(pawn.Position, lord.Map, 5);
                    GenSpawn.Spawn(slave, loc, lord.Map);
                    lord.AddPawn(slave);
                }
                else
                {
                    var spaceFor = pawn.GetInventorySpaceFor(current);

                    if (current.Destroyed)
                    {
                        continue;
                    }
                    if (spaceFor <= 0)
                    {
                        current.Destroy();
                        continue;
                    }
                    current.stackCount = spaceFor;

                    // Core stuff
                    if (!pawn.inventory.GetInnerContainer().TryAdd(current))
                    {
                        current.Destroy();
                    }
                }
            }
            return(true);
        }
        private void TrySpawnMadSailors()
        {
            var lordList = new List <Pawn>();
            var faction  = Find.FactionManager.FirstFactionOfDef(CultsDefOf.Cults_Sailors);

            Utility.DebugReport(faction.ToString());
            //Log.Message("Building_LandedShip LordJob_DefendPoint");
            var lordJob = new LordJob_DefendPoint(Position);

            if (pointsLeft <= 0f)
            {
                return;
            }

            if (lord == null)
            {
                lord = LordMaker.MakeNewLord(faction, lordJob, Map, lordList);
            }

            while (pointsLeft > 0f)
            {
                if (!(from cell in GenAdj.CellsAdjacent8Way(this)
                      where cell.Walkable(Map)
                      select cell).TryRandomElement(out var center))
                {
                    continue;
                }

                var request = new PawnGenerationRequest(CultsDefOf.Cults_Sailor, faction,
                                                        PawnGenerationContext.NonPlayer, Map.Tile, false, false, false, false, true, true, 20f, false,
                                                        true, true, false, false, false, false, false, 0, 0, null, 0);
                var pawn = PawnGenerator.GeneratePawn(request);
                if (!GenPlace.TryPlaceThing(pawn, center, Map, ThingPlaceMode.Near))
                {
                    continue;
                }

                if (pawn.GetLord() != null)
                {
                    pawn.GetLord().Cleanup();
                    pawn.GetLord().CurLordToil.Cleanup();
                    pawn.GetLord().LordJob.Cleanup();
                }

                lord.AddPawn(pawn);
                pointsLeft -= pawn.kindDef.combatPower;
                Utility.ApplySanityLoss(pawn, 1f);

                //Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard);
            }

            pointsLeft = 0f;
            SoundDefOf.PsychicPulseGlobal.PlayOneShotOnCamera();
        }
Exemplo n.º 29
0
        public static Pawn SpawnInhabitant(IntVec3 pos, Map map, Lord lord)
        {
            var pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(map.ParentFaction.RandomPawnKind(), map.ParentFaction, PawnGenerationContext.NonPlayer, map.Tile, inhabitant: true));

            if (lord != null)
            {
                lord.AddPawn(pawn);
            }
            GenSpawn.Spawn(pawn, pos, map);
            return(pawn);
        }
Exemplo n.º 30
0
        public void SingleSpawnLoop(SpawnThings spawnables, IntVec3 position, Map map)
        {
            bool flag = spawnables.def != null;

            if (flag)
            {
                Faction        faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("TM_ElementalFaction"));
                TMPawnSummoned newPawn = new TMPawnSummoned();
                bool           flag2   = spawnables.def.race != null;
                if (flag2)
                {
                    bool flag3 = spawnables.kindDef == null;
                    if (flag3)
                    {
                        Log.Error("Missing kinddef");
                    }
                    else
                    {
                        newPawn = (TMPawnSummoned)PawnGenerator.GeneratePawn(spawnables.kindDef, faction);
                        newPawn.validSummoning = true;
                        //newPawn.Spawner = this.Caster;
                        newPawn.Temporary = false;
                        if (newPawn.Faction == null || !newPawn.Faction.HostileTo(Faction.OfPlayer))
                        {
                            Log.Message("elemental faction was null or not hostile - fixing");
                            newPawn.SetFaction(faction, null);
                            faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null);
                        }
                        GenSpawn.Spawn(newPawn, position, this.Map);
                        if (newPawn.Faction != null && newPawn.Faction != Faction.OfPlayer)
                        {
                            Lord lord = null;
                            if (newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction).Any((Pawn p) => p != newPawn))
                            {
                                Predicate <Thing> validator = (Thing p) => p != newPawn && ((Pawn)p).GetLord() != null;
                                Pawn p2 = (Pawn)GenClosest.ClosestThing_Global(newPawn.Position, newPawn.Map.mapPawns.SpawnedPawnsInFaction(faction), 99999f, validator, null);
                                lord = p2.GetLord();
                            }
                            bool flag4 = lord == null;
                            if (flag4)
                            {
                                LordJob_AssaultColony lordJob = new LordJob_AssaultColony(newPawn.Faction, false, false, false, true, false);
                                lord = LordMaker.MakeNewLord(faction, lordJob, this.Map, null);
                            }
                            lord.AddPawn(newPawn);
                        }
                    }
                }
                else
                {
                    Log.Message("Missing race");
                }
            }
        }