public static PawnSummoned SpawnPawn(Pawn caster, SpawnThings spawnables, Faction faction, IntVec3 position) { PawnSummoned newPawn = (PawnSummoned)PawnGenerator.GeneratePawn(spawnables.kindDef, faction); newPawn.Spawner = caster; newPawn.Temporary = spawnables.temporary; 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); }
public void SingleSpawnLoop(SpawnThings spawnables, IntVec3 position, Map map) { Log.Message("single spawn loop start"); bool flag = spawnables.def != null; if (flag) { Faction faction = Faction.OfPlayer; bool flag2 = spawnables.def.race != null; if (flag2) { bool flag3 = spawnables.kindDef == null; if (flag3) { Log.Error("Missing kinddef"); } else { PawnSummoned newPawn = (PawnSummoned)PawnGenerator.GeneratePawn(spawnables.kindDef, faction); newPawn.Spawner = this.CasterPawn; newPawn.Temporary = false; if (newPawn.Faction != Faction.OfPlayerSilentFail) { Log.Message("Failing check for newpawn faction: " + newPawn.Faction); newPawn.SetFaction(this.CasterPawn.Faction, null); } Log.Message("attempting to spawn " + newPawn.def.defName + " of " + newPawn.kindDef.defName + " of faction " + newPawn.Faction); GenSpawn.Spawn(newPawn, position, Find.VisibleMap); 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, Find.VisibleMap, null); } lord.AddPawn(newPawn); } } } else { Log.Message("Missing race"); } } }