예제 #1
0
        public override void Generate(Map map, GenStepParams parms)
        {
            CellRect rectToDefend;

            if (!MapGenerator.TryGetVar <CellRect>("RectOfInterest", out rectToDefend))
            {
                rectToDefend = CellRect.SingleCell(map.Center);
            }
            Faction faction;

            if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer)
            {
                faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named(
                                                                    "ROMV_Sabbat")); //Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
            }
            else
            {
                faction = map.ParentFaction;
            }
            ResolveParams resolveParams = default(ResolveParams);

            resolveParams.rect             = this.GetOutpostRect(rectToDefend, map);
            resolveParams.faction          = faction;
            resolveParams.edgeDefenseWidth = new int?(2);
            //resolveParams.edgeDefenseTurretsCount = new int?(Rand.RangeInclusive(0, 1));
            resolveParams.edgeDefenseMortarsCount   = new int?(0);
            resolveParams.settlementPawnGroupPoints = new float?(0.4f);
            BaseGen.globalSettings.map          = map;
            BaseGen.globalSettings.minBuildings = 1;
            BaseGen.globalSettings.minBarracks  = 1;
            BaseGen.symbolStack.Push("factionBase", resolveParams);
            BaseGen.Generate();
        }
예제 #2
0
        public static PawnKindDef GetFactionKindDef(PawnKindDef kindDef, Faction faction)
        {
            int factionID = 0;

            if (faction.def == FactionDef.Named("BI_InsectRedFaction"))
            {
                factionID = 1;
            }
            else if (faction.def == FactionDef.Named("BI_InsectBlackFaction"))
            {
                factionID = 2;
            }
            else if (faction.def == FactionDef.Named("BI_InsectGreenFaction"))
            {
                factionID = 3;
            }
            if (queenKindDef.Contains(kindDef))
            {
                return(queenKindDef[factionID]);
            }
            else if (megaspiderKindDef.Contains(kindDef))
            {
                return(megaspiderKindDef[factionID]);
            }
            else if (spelopedeKindDef.Contains(kindDef))
            {
                return(spelopedeKindDef[factionID]);
            }
            else if (megascarabKindDef.Contains(kindDef))
            {
                return(megascarabKindDef[factionID]);
            }
            return(null);
        }
 public void CheckFaction()
 {
     if (this.parent.Faction == Faction.OfPlayer)
     {
         Pawn pawn = parent as Pawn;
         if (pawn != null)
         {
             if (!Props.goesManhunter)
             {
                 parent.SetFaction(null, null);
             }
             else if (Props.factionToReturnTo == "")
             {
                 pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent);
             }
             else
             {
                 parent.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToReturnTo)), null);
                 pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent);
             };
             if (Props.sendMessage)
             {
                 Messages.Message(Props.message.Translate(pawn.LabelIndefinite().CapitalizeFirst()), pawn, MessageTypeDefOf.NegativeEvent, true);
             }
         }
     }
 }
예제 #4
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Faction faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("PLAHF_faction"));
            Map     map     = (Map)parms.target;
            //List<TargetInfo> list = new List<TargetInfo>();
            float shrapnelDirection = Rand.Range(0f, 360f);
            Thing lookhere;


            IntVec3 intVec;

            if (!CellFinderLoose.TryFindSkyfallerCell(RimWorld.ThingDefOf.DropPodIncoming, map, out intVec, 14, default(IntVec3), -1, false, true, true, true, true, false, null))
            {
                return(false);
            }
            Building_TacticalManaBomb building_tacticalmanabomb = (Building_TacticalManaBomb)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("Building_TacticalManaBomb", true));

            building_tacticalmanabomb.SetFaction(faction, null);
            building_tacticalmanabomb.spawnpoints = (float)(parms.points * 0.8);
            lookhere = building_tacticalmanabomb;

            Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(RimWorld.ThingDefOf.DropPodIncoming, building_tacticalmanabomb);

            skyfaller.shrapnelDirection = shrapnelDirection;
            GenSpawn.Spawn(skyfaller, intVec, map, WipeMode.Vanish);



            Find.LetterStack.ReceiveLetter("LetterLabelPLAHFTMBAttack".Translate(), "LetterPLAHFTMBAttack".Translate(), LetterDefOf.ThreatBig, lookhere, null, null);


            Find.TickManager.slower.SignalForceNormalSpeedShort();
            Find.StoryWatcher.statsRecord.numRaidsEnemy++;
            return(true);
        }
        public override void DefsLoaded()
        {
            hasAlienRace = GenTypes.GetTypeInAnyAssembly("AlienRace.RaceSettings", "AlienRace") != null;

            FB_Factions.RemoveAll(x => true);
            FB_Factions.Add(FactionDef.Named("FactionBlender_Pirate"));
            FB_Factions.Add(FactionDef.Named("FactionBlender_Civil"));

            ProcessSettings();

            DefInjector.InjectMiscToFactions(FB_Factions);

            Logger.Message("Injecting pawn groups to our factions");
            FillFilterLists();
            DefInjector.InjectPawnKindDefsToFactions(FB_Factions);

            if (hasAlienRace)
            {
                Logger.Message("Injecting pawn groups to our race settings");
                DefInjector.InjectPawnKindEntriesToRaceSettings();
            }
            else
            {
                Logger.Message("AlienRace not loaded; no race settings for us!");
            }
        }
 public void CheckFaction()
 {
     //If I detect the creature is part of the player's faction (has been tamed)
     if (AnimalBehaviours_Settings.flagUntameable && this.parent.Faction == Faction.OfPlayer)
     {
         Pawn pawn = parent as Pawn;
         if (pawn != null)
         {
             //if goesManhunter is false, the creature is just returned to the wild, no faction
             if (!Props.goesManhunter)
             {
                 parent.SetFaction(null, null);
             }
             //if goesManhunter is true and factionToReturnTo is not set, the creature is made manhunter
             else if (Props.factionToReturnTo == "")
             {
                 pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent);
             }
             //if goesManhunter is true and factionToReturnTo is set, the creature is made manhunter and placed on the
             //faction it should belong to
             else
             {
                 parent.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToReturnTo)), null);
                 pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent);
             };
             //Optionally a message can be sent when this happens
             if (Props.sendMessage)
             {
                 Messages.Message(Props.message.Translate(pawn.LabelIndefinite().CapitalizeFirst()), pawn, MessageTypeDefOf.NegativeEvent, true);
             }
         }
     }
 }
 public override void Init()
 {
     ModOptions.SettingsRef settingsRef = new ModOptions.SettingsRef();
     if (settingsRef.riftChallenge > 0)
     {
         base.Init();
         this.disabled = false;
         this.FindGoodCenterLocation();
         this.thing = ThingMaker.MakeThing(ThingDef.Named("TM_ElementalRift"), ThingDefOf.BlocksGranite);
         GenSpawn.Spawn(thing, centerLocation.ToIntVec3, this.SingleMap, Rot4.North, WipeMode.Vanish, false);
         Faction faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("TM_ElementalFaction"));
         if (!faction.HostileTo(Faction.OfPlayer))
         {
             thing.SetFaction(Faction.OfMechanoids, null);
         }
         else
         {
             thing.SetFaction(faction, null);
         }
     }
     else
     {
         this.disabled = true;
         Log.Message("Rift spawning disabled.");
     }
 }
예제 #8
0
        public override void CompTick()
        {
            base.CompTick();
            if (!AlphaAnimalsEvents_Mod.settings.flagAlphaMechanoids)
            {
                if (parent.Map != null && Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToChangeTo)) != null)
                {
                    PawnGenerationRequest request = new PawnGenerationRequest(PawnKindDef.Named(Props.defToChangeTo), Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToChangeTo)), 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(Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToChangeTo))).Any((Pawn p) => p != pawn))
                    {
                        lord = ((Pawn)GenClosest.ClosestThing_Global(pawn.Position, pawn.Map.mapPawns.SpawnedPawnsInFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToChangeTo))), 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(Find.FactionManager.FirstFactionOfDef(FactionDef.Named(Props.factionToChangeTo)), lordJob, Find.CurrentMap, null);
                    }
                    lord.AddPawn(pawn);


                    this.parent.Destroy();
                }
            }
        }
예제 #9
0
        public override void OnGameLoaded(Game g, Harmony h)
        {
            var factionManger = g.World.factionManager;

            foreach (var fac in factionManger.allFactions.Where(f => f.def == null))
            {
                fac.def = FactionDef.Named("OutlanderCivil");
            }

            foreach (var wo in g.World.worldObjects.worldObjects.Where(w => w.factionInt.def == null))
            {
                var faction = factionManger.allFactions.Where(f => !f.IsPlayer && (!f.hidden ?? true)).RandomElement();

                ThreadSafeLogger.Warning($"[Analyzer] Changed the world object {wo.Label}'s faction from {wo.factionInt.name}(Removed) to {faction.name}");
                wo.factionInt = faction;
            }

            foreach (var wp in g.World.worldPawns.AllPawnsAliveOrDead.Where(p => p.factionInt.def == null))
            {
                var faction = factionManger.allFactions.Where(f => !f.IsPlayer && (!f.hidden ?? true)).RandomElement();

                ThreadSafeLogger.Warning($"[Analyzer] Changed the pawn {wp.Label}'s faction from {wp.factionInt.name}(Removed) to {faction.name}");
                wp.factionInt = faction;
            }

            Active = false;
        }
        public void InjectMiscToFactions(List <FactionDef> FB_Factions)
        {
            Base FB = Base.Instance;

            // Preemptively fix apparelStuffFilters for the basic factions that'll get FB pawn kinds
            // (See also Harmony patch for GenerateWorkingPossibleApparelSetFor)
            FB.ModLogger.Message("Injecting apparel filters to basic factions");

            if ((SettingHandle <bool>)FB.config["EnableMixedAncients"])
            {
                // Give Ancients the best stuff (Plasteel, Hyperweave, Gold, etc.)
                InjectApparelStuffIntoFaction(FactionDef.Named("Ancients"), 5, 100_000);
                InjectApparelStuffIntoFaction(FactionDef.Named("AncientsHostile"), 5, 100_000);
            }

            if ((SettingHandle <bool>)FB.config["EnableMixedStartingColonists"])
            {
                // PlayerColony gets average stuff (Synthread, Wool, etc.)
                InjectApparelStuffIntoFaction(FactionDef.Named("PlayerColony"), 2.5f, 5);

                // PlayerTribe gets the worst stuff (Cloth, Steel, etc.)
                InjectApparelStuffIntoFaction(FactionDef.Named("PlayerTribe"), 0, 2.5f);
            }

            // Fix caravanTraderKinds, visitorTraderKinds, baseTraderKinds for the civil faction only
            FB.ModLogger.Message("Injecting trader kinds to our factions");
            TraderKindDefInjector.InjectTraderKindDefsToFactions(FB_Factions);
        }
예제 #11
0
        public override void SpawnSetup(Map map, bool bla)
        {
            base.SpawnSetup(map, bla);
            Building_SignOfDagon toDestroy = null;

            foreach (Building bld in map.listerBuildings.allBuildingsColonist)
            {
                if (bld == this)
                {
                    continue;
                }
                if (bld is Building_SignOfDagon)
                {
                    toDestroy = (Building_SignOfDagon)bld;
                }
            }
            if (toDestroy != null)
            {
                toDestroy.Destroy(0);
            }


            List <Pawn> list = map.GetComponent <MapComponent_SacrificeTracker>().defendTheBroodPawns;

            if (list != null)
            {
                if (list.Count > 0)
                {
                    Faction f = null;
                    if (Cthulhu.Utility.IsCosmicHorrorsLoaded())
                    {
                        f = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROM_DeepOne"));
                    }
                    else
                    {
                        Messages.Message("Cosmic horrors mod is not loaded. Using insectoids instead.", MessageTypeDefOf.NegativeEvent);
                        f = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROM_DeepOneAlt"));
                    }

                    Lord lord = null;

                    LordJob_DefendPoint lordJob = new LordJob_DefendPoint(this.Position);
                    Cthulhu.Utility.TemporaryGoodwill(f, false);
                    foreach (Pawn current in list)
                    {
                        if (lord == null)
                        {
                            lord = current.GetLord();
                        }
                        if (lord != null)
                        {
                            map.lordManager.RemoveLord(lord);
                        }
                    }
                    LordMaker.MakeNewLord(f, lordJob, map, list);
                }
            }
        }
 public static void Prefix(FactionManager __instance)
 {
     for (var i = 0; i < __instance.allFactions.Count; i++)
     {
         if (__instance.allFactions[i].def == null)
         {
             __instance.allFactions[i].def = FactionDef.Named("OutlanderCivil");
         }
     }
 }
예제 #13
0
        public void GenerateVillagerCorpses()
        {
            Faction faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("TribeCivil"));

            SpawnPawnCorpse(Map, Position, PawnKindDef.Named("Tribal_ChiefMelee"), faction, GenDate.TicksPerDay, true);
            SpawnPawnCorpse(Map, Position + new IntVec3(2, 0, 2), PawnKindDef.Named("Tribal_Warrior"), faction, GenDate.TicksPerDay, true);
            SpawnPawnCorpse(Map, Position + new IntVec3(2, 0, -2), PawnKindDef.Named("Tribal_Warrior"), faction, GenDate.TicksPerDay, true);
            SpawnPawnCorpse(Map, Position + new IntVec3(-2, 0, -2), PawnKindDef.Named("Tribal_Warrior"), faction, GenDate.TicksPerDay, true);
            SpawnPawnCorpse(Map, Position + new IntVec3(-2, 0, 2), PawnKindDef.Named("Tribal_Warrior"), faction, GenDate.TicksPerDay, true);
        }
예제 #14
0
        private static Pawn CreateXenoPawn(string pawnKindDefName)
        {
            var faction = FactionUtility.DefaultFactionFrom(FactionDef.Named("THU_Xenomorph"));

            var pawnKindDef = PawnKindDef.Named(pawnKindDefName);

            var request = new PawnGenerationRequest(pawnKindDef, newborn: true, faction: faction);

            return(PawnGenerator.GeneratePawn(request));
        }
예제 #15
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");
                }
            }
        }
예제 #16
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     if (base.Faction == null)
     {
         this.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors")));
     }
     if (!respawningAfterLoad)
     {
         this.ticksToSpawnInitialPawns = 420;
     }
 }
        private void SpawnPawns_start()
        {
            LordJob_AssaultColony lordJob = new LordJob_AssaultColony(this.Faction, true, false, true, false, true);

            this.lord = LordMaker.MakeNewLord(this.Faction, lordJob, this.Map, null);

            pointsLeft = spawnpoints;
            IntVec3 invalid;

            if (!CellFinder.TryFindRandomCellNear(this.Position, this.Map, 7, (IntVec3 c) => c.Standable(this.Map) && this.Map.reachability.CanReach(c, this, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors, Danger.Deadly, false)), out invalid, -1))
            {
                //Log.Message("Building_TacticalManaBomb. SpawnInitialPawns spawnpoints : " + this.pointsLeft + "...." + this, false);
                invalid = IntVec3.Invalid;
            }
            else if (spawnpoints <= 100)
            {
                //Log.Message("Building_TacticalManaBomb. SpawnInitialPawns spawnpoints : " + this.pointsLeft + "...." + this, false);
                return;
            }

            Faction faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("PLAHF_faction"));


            Pawn pawn;
            int  RRR;

            while (pointsLeft > 80)
            {
                RRR = Rand.Range(0, 7);

                if (RRR < 1)
                {
                    pawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("PLAHF_Honorary_member"), faction);
                }
                else if (RRR < 2)
                {
                    pawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("PLAHF_test_subjectB"), faction);
                }
                else if (RRR < 5)
                {
                    pawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("PLAHF_former_Town_Guard"), faction);
                }
                else
                {
                    pawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("PLAHF_Lab_slave"), faction);
                }

                GenSpawn.Spawn(pawn, CellFinder.RandomClosewalkCellNear(base.Position, base.Map, 3, null), base.Map, WipeMode.Vanish);
                this.lord.AddPawn(pawn);
                pointsLeft -= pawn.kindDef.combatPower;
            }
        }
예제 #18
0
 public override void PostMake()
 {
     base.PostMake();
     LongEventHandler.QueueLongEvent(delegate
     {
         sealedVampire =
             VampireGen.GenerateVampire(Rand.Range(4, 7), VampireUtility.RandBloodline, null,
                                        Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROMV_LegendaryVampires")));
         GenSpawn.Spawn(sealedVampire, this.PositionHeld, this.MapHeld);
         sealedVampire.DeSpawn();
         this.innerContainer.TryAdd(sealedVampire);
     }, "ROMV_GeneratingAncientVampire", false, exception => { });
 }
예제 #19
0
 protected bool TrySetDeepOneFaction(IncidentParms parms)
 {
     if (Cthulhu.Utility.IsCosmicHorrorsLoaded())
     {
         parms.faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROM_DeepOne"));
     }
     else
     {
         Messages.Message("UsingInsectoidsInstead".Translate(), MessageTypeDefOf.NegativeEvent);
         parms.faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROM_DeepOneAlt"));
     }
     return(parms.faction != null);
 }
        private HorrorHive SpawnHiveCluster(Map map)
        {
            if (!InfestationCellFinder.TryFindCell(out var loc, map))
            {
                return(null);
            }

            var hive = (HorrorHive)GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("HorrorHive")), loc, map);

            hive.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors")));

            return(hive);
        }
예제 #21
0
        public override void Resolve(ResolveParams rp)
        {
            foreach (var cell in rp.rect.Cells)
            {
                var resolveParams3 = rp;
                resolveParams3.rect           = CellRect.SingleCell(cell);
                resolveParams3.singleThingDef = CthulhuFactionsDefOf.ROM_TemporaryRegionBarrier;
                BaseGen.symbolStack.Push("thing", resolveParams3);
            }

            PassingParameters(rp);
            instanceMap     = Map;
            instanceFaction = rp.faction ?? Find.FactionManager.FirstFactionOfDef(FactionDef.Named("TheAgency"));

            //ResolveParams resolveParams4 = rp;
            //BaseGen.symbolStack.Push("clear", resolveParams4);

            UnfogRoomCenter(rp.rect.CenterCell);

            LongEventHandler.QueueLongEvent(delegate
            {
                if (instanceMap == null)
                {
                    return;
                }

                foreach (var cell in instanceMap.AllCells)
                {
                    var thing = cell.GetThingList(instanceMap)
                                .Find(x => x.def == CthulhuFactionsDefOf.ROM_TemporaryDoorMarker);
                    if (thing == null)
                    {
                        //Log.Warning("Could not destroy temporary region barrier at " + cell + " because it's not here.");
                    }
                    else
                    {
                        if (thing.def == CthulhuFactionsDefOf.ROM_TemporaryDoorMarker)
                        {
                            newThing = null;
                            newThing = ThingMaker.MakeThing(ThingDefOf.Door, ThingDefOf.Steel);
                            newThing.SetFaction(instanceFaction);
                            //newThing.Rotation = thing.Rotation;
                            tempIntVec = new IntVec3(cell.x, 0, cell.z);
                            GenSpawn.Spawn(newThing, tempIntVec, instanceMap);
                        }

                        thing.Destroy();
                    }
                }
            }, "doorResolver", true, null);
        }
예제 #22
0
        public void Hatch()
        {
            PawnGenerationRequest request = new PawnGenerationRequest(this.Props.hatcherPawn, this.hatcheeFaction, PawnGenerationContext.NonPlayer, -1, false, true, false, false, true, false, 1f, false, true, true, false, false, false, false, false, 0, null, 1, null, null, null, null, null);
            Pawn hatchling = PawnGenerator.GeneratePawn(request);

            hatchling.SetFactionDirect(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors")));
            PawnUtility.TrySpawnHatchedOrBornPawn(hatchling, this.parent);
            PawnInventoryGenerator.GenerateInventoryFor(hatchling, request);
            PawnWeaponGenerator.TryGenerateWeaponFor(hatchling, request);
            Lord lord = CreateNewLord();

            lord.AddPawn(hatchling);
            this.parent.Destroy(DestroyMode.Vanish);
        }
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            Faction faction = Find.FactionManager.FirstFactionOfDef(FactionDef.Named("PLAHF_faction"));

            base.SpawnSetup(map, respawningAfterLoad);
            if (this.Faction == null)
            {
                this.SetFaction(faction, null);
            }
            if (!respawningAfterLoad)
            {
                this.SpawnPawns_start();
            }
        }
예제 #24
0
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            base.SpawnSetup(map, respawningAfterLoad);

            if (Faction == null)
            {
                SetFactionDirect(FactionUtility.DefaultFactionFrom(FactionDef.Named("Horrors")));
            }

            if (Faction != null && Faction.IsPlayer)
            {
                contentsKnown = true;
            }
        }
        private HorrorHive SpawnHiveCluster(int hiveCount, Map map)
        {
            IntVec3 loc;

            if (!InfestationCellFinder.TryFindCell(out loc, map))
            {
                return(null);
            }
            HorrorHive hive = (HorrorHive)GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("HorrorHive"), null), loc, map);

            hive.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors")));

            return(hive);
        }
예제 #26
0
        public void Hatch()
        {
            var request = new PawnGenerationRequest(Props.hatcherPawn, hatcheeFaction, PawnGenerationContext.NonPlayer,
                                                    -1, false, true, false, false, true, false, 1f, false, true, true, false);
            var hatchling = PawnGenerator.GeneratePawn(request);

            hatchling.SetFactionDirect(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors")));
            PawnUtility.TrySpawnHatchedOrBornPawn(hatchling, parent);
            PawnInventoryGenerator.GenerateInventoryFor(hatchling, request);
            PawnWeaponGenerator.TryGenerateWeaponFor(hatchling, request);
            var lord = CreateNewLord();

            lord.AddPawn(hatchling);
            parent.Destroy();
        }
        private static void FixHair(Pawn pawn)
        {
            int tries = 100;

            while (!pawn.story.hairDef.hairTags.Any(h => h == "Rural" || h == "Urban") || pawn.story.hairDef.hairGender != HairGender.Female)
            {
                pawn.story.hairDef = PawnHairChooser.RandomHairDefFor(pawn, FactionDef.Named("Spacer"));
                tries--;
                if (tries <= 0)
                {
                    Log.Error("Couldn't get backstory.");
                    break;
                }
            }
        }
 public override void WorldComponentTick()
 {
     base.WorldComponentTick();
     if (Find.TickManager.TicksGame % 100 == 0 &&
         !hostilityDeclared &&
         Find.FactionManager.FirstFactionOfDef(FactionDef.Named("PJ_RebelFac")) is Faction rebelFaction &&
         Find.FactionManager.FirstFactionOfDef(FactionDef.Named("PJ_GalacticEmpire")) is Faction impFaction)
     {
         hostilityDeclared = true;
         impFaction.SetHostileTo(rebelFaction, true);
         rebelFaction.SetHostileTo(impFaction, true);
         Find.LetterStack.ReceiveLetter("PJ_WarDeclared".Translate(), "PJ_WarDeclaredDesc".Translate(
                                            new object[] { rebelFaction.def.label, impFaction.def.label }
                                            ), DefDatabase <LetterDef> .GetNamed("PJ_BadUrgent"), null);
     }
 }
예제 #29
0
        public void FactionSetup()
        {
            Faction ghostFaction = this.Faction;

            if (this.Faction?.def != FactionDef.Named("PJ_GhostFaction"))
            {
                return;
            }
            if (ghostFaction != null && ghostFaction != Faction.OfPlayerSilentFail)
            {
                foreach (Faction fac in Find.FactionManager.AllFactions)
                {
                    bool hostile = fac.HostileTo(Faction.OfPlayerSilentFail);
                    ghostFaction.TrySetRelationKind(fac, FactionRelationKind.Hostile);
                }
            }
        }
예제 #30
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            int tile;

            if (!TileFinder.TryFindNewSiteTile(out tile))
            {
                return(false);
            }
            Site site = SiteMaker.MakeSite(SitePartDefOf.Outpost, tile,
                                           Find.FactionManager.FirstFactionOfDef(FactionDef.Named("ROMV_Sabbat")));

            site.Tile = tile;
            site.GetComponent <HandleVampireQuestComp>().StartQuest();
            Find.WorldObjects.Add(site);
            base.SendStandardLetter(parms, null);
            return(true);
        }