protected override void ScatterAt(IntVec3 loc, Map map, int count = 1) { Faction faction = (map.ParentFaction != null && map.ParentFaction != Faction.OfPlayer) ? map.ParentFaction : Find.FactionManager.RandomEnemyFaction(); CellRect cellRect = CellRect.CenteredOn(loc, 8, 8).ClipInsideMap(map); PrisonerWillingToJoinComp component = map.Parent.GetComponent <PrisonerWillingToJoinComp>(); Pawn singlePawnToSpawn = (component == null || !component.pawn.Any) ? PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, faction) : component.pawn.Take(component.pawn[0]); ResolveParams resolveParams = default(ResolveParams); resolveParams.rect = cellRect; resolveParams.faction = faction; RimWorld.BaseGen.BaseGen.globalSettings.map = map; RimWorld.BaseGen.BaseGen.symbolStack.Push("prisonCell", resolveParams); RimWorld.BaseGen.BaseGen.Generate(); ResolveParams resolveParams2 = default(ResolveParams); resolveParams2.rect = cellRect; resolveParams2.faction = faction; resolveParams2.singlePawnToSpawn = singlePawnToSpawn; resolveParams2.postThingSpawn = delegate(Thing x) { MapGenerator.rootsToUnfog.Add(x.Position); ((Pawn)x).mindState.WillJoinColonyIfRescued = true; }; RimWorld.BaseGen.BaseGen.globalSettings.map = map; RimWorld.BaseGen.BaseGen.symbolStack.Push("pawn", resolveParams2); RimWorld.BaseGen.BaseGen.Generate(); MapGenerator.SetVar("RectOfInterest", cellRect); }
private void SpawnAdditonalPrisoners(Map map) { PrisonerWillingToJoinComp component = parent.GetComponent <PrisonerWillingToJoinComp>(); List <Pawn> prisoner = map.mapPawns.AllPawnsSpawned.Where(p => p.kindDef == PawnKindDefOf.Slave || p.IsPrisoner).ToList(); DamageInfo info = new DamageInfo(DamageDefOf.Blunt, 20, 0); info.SetAllowDamagePropagation(true); for (int i = 0; i < prisoner.ToList().Count; i++) { prisoner[i].SetFaction(ally); prisoner[i].guest.SetGuestStatus(map.ParentFaction, true); prisoner[i].mindState.WillJoinColonyIfRescued = true; Pawn pawn = component == null || !component.pawn.Any ? PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, map.ParentFaction) : component.pawn.Take(component.pawn[0]); pawn.mindState.WillJoinColonyIfRescued = true; pawn.SetFaction(ally); IntVec3 result = CellFinder.RandomSpawnCellForPawnNear(prisoner[i % prisoner.ToList().Count].CellsAdjacent8WayAndInside().Where(x => x.Standable(map) && x.Walkable(map)).RandomElement(), map); if (result == null) { Log.Warning("spawn pawn cell null"); } pawn.guest.SetGuestStatus(map.ParentFaction, true); GenSpawn.Spawn(pawn, result, map); if (pawn.equipment != null && pawn.equipment.AllEquipmentListForReading.Count > 0) { pawn.equipment.DestroyAllEquipment(); } pawn.TakeDamage(info); prisoner[i % prisoner.ToList().Count].TakeDamage(info); } }
protected override void ScatterAt(IntVec3 loc, Map map, int count = 1) { Faction faction; if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer) { faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined); } else { faction = map.ParentFaction; } CellRect cellRect = CellRect.CenteredOn(loc, 8, 8).ClipInsideMap(map); PrisonerWillingToJoinComp component = map.info.parent.GetComponent <PrisonerWillingToJoinComp>(); Pawn singlePawnToSpawn; if (component != null && component.pawn.Any) { singlePawnToSpawn = component.pawn.Take(component.pawn[0]); } else { singlePawnToSpawn = PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, faction); } ResolveParams resolveParams = default(ResolveParams); resolveParams.rect = cellRect; resolveParams.faction = faction; BaseGen.globalSettings.map = map; BaseGen.symbolStack.Push("prisonCell", resolveParams); BaseGen.Generate(); ResolveParams resolveParams2 = default(ResolveParams); resolveParams2.rect = cellRect; resolveParams2.faction = faction; resolveParams2.singlePawnToSpawn = singlePawnToSpawn; resolveParams2.postThingSpawn = delegate(Thing x) { MapGenerator.rootsToUnfog.Add(x.Position); ((Pawn)x).mindState.willJoinColonyIfRescued = true; }; BaseGen.globalSettings.map = map; BaseGen.symbolStack.Push("pawn", resolveParams2); BaseGen.Generate(); MapGenerator.SetVar <CellRect>("RectOfInterest", cellRect); }