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; } }
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); }
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); } }
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; }
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); } }
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); }
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(); } } }
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)); }
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); }
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(); } } }
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); } } } } }
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); }
// 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(); }
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); }
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); }
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); }
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); } }
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); } }
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); }
// 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); }
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); }
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(); }
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); }
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"); } } }